samplesinfoService.go 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545
  1. package samplesinfo
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "os"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "github.com/astaxie/beego"
  10. "dashoo.cn/backend/api/business/baseUser"
  11. "dashoo.cn/backend/api/business/donorsinfo"
  12. "dashoo.cn/backend/api/business/sampleimporttemplate"
  13. // "dashoo.cn/backend/api/business/samplenoteitem"
  14. "dashoo.cn/backend/api/business/samplesbusiness"
  15. "dashoo.cn/backend/api/business/sampletype"
  16. "dashoo.cn/backend/api/business/shelfset"
  17. . "dashoo.cn/backend/api/models"
  18. . "dashoo.cn/backend/api/mydb"
  19. "dashoo.cn/business2/userRole"
  20. "dashoo.cn/utils"
  21. . "dashoo.cn/utils/db"
  22. "github.com/go-xorm/xorm"
  23. "github.com/tealeg/xlsx"
  24. )
  25. type SamplesInfoService struct {
  26. MyServiceBase
  27. }
  28. func GetSamplesInfoService(xormEngine *xorm.Engine) *SamplesInfoService {
  29. s := new(SamplesInfoService)
  30. s.DBE = xormEngine
  31. return s
  32. }
  33. func (s *SamplesInfoService) GetPagingEntitiesWithOrderSearch(acccode string, pageIndex, itemsPerPage int64, order, where string) (int64, []SamplesInfoList) {
  34. var err error
  35. var total int64
  36. if order != "" {
  37. order = " order by " + order
  38. }
  39. //获取总记录数
  40. if where == "" {
  41. where = "1=1"
  42. }
  43. tbldetail := acccode + SamplesDetailtbName
  44. tblmain := acccode + SamplesMaintbName
  45. //当是蜜蜂所用户时,取acccode + AnimalInfoName 动物表数据
  46. tbldonor := ""
  47. if(strings.EqualFold(acccode,"sBBo4")){
  48. tbldonor = acccode + AnimalInfoName
  49. }else{
  50. tbldonor = acccode + DonorstbName
  51. }
  52. groupdetail := acccode + GroupDetailName
  53. sqlCount := " select count(*) from " + tbldetail + " a left join " + tblmain + " b on a.SampleCode = b.SampleCode left join " + tbldonor + " c on b.SourceId = c.Id left join Shelf d on a.ShelfId=d.Id left join Box e on a.BoxId=e.Id left join Equipment f on a.EquipmentId=f.Id left join " + groupdetail + " g on g.SampleId=a.Id where " + where
  54. fmt.Println(sqlCount)
  55. var sql string
  56. sql = ` select a.*,b.*,c.FamilyState,c.ClinicNum,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode,g.GroupId,g.GroupName from ` + tbldetail + ` a
  57. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  58. left join ` + tbldonor + ` c on b.SourceId = c.Id
  59. left join Shelf d on a.ShelfId=d.Id
  60. left join Box e on a.BoxId=e.Id
  61. left join Equipment f on a.EquipmentId=f.Id
  62. left join ` + groupdetail + ` g on g.SampleId=a.Id
  63. where ` + where + order + `
  64. limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) + ""
  65. fmt.Println(sql)
  66. List := make([]SamplesInfoList, 0)
  67. utils.DBE.Sql(sql).Find(&List)
  68. resultsSlice, err := s.DBE.Query(sqlCount)
  69. LogError(err)
  70. if len(resultsSlice) > 0 {
  71. results := resultsSlice[0]
  72. for _, value := range results {
  73. total, err = strconv.ParseInt(string(value), 10, 64)
  74. LogError(err)
  75. break
  76. }
  77. }
  78. return total, List
  79. }
  80. func (s *SamplesInfoService) GetPagingEntitiesWithTb(acccode string, pageIndex, itemsPerPage int64, tbldonor, order, where string) (int64, []SamplesInfoList) {
  81. var err error
  82. var total int64
  83. if order != "" {
  84. order = " order by " + order
  85. }
  86. //获取总记录数
  87. if where == "" {
  88. where = "1=1"
  89. }
  90. tbldetail := acccode + SamplesDetailtbName
  91. tblmain := acccode + SamplesMaintbName
  92. groupdetail := acccode + GroupDetailName
  93. sqlCount := " select count(*) from " + tbldetail + " a left join " + tblmain + " b on a.SampleCode = b.SampleCode left join " + tbldonor + " c on b.SourceId = c.Id left join Shelf d on a.ShelfId=d.Id left join Box e on a.BoxId=e.Id left join Equipment f on a.EquipmentId=f.Id left join " + groupdetail + " g on g.SampleId=a.Id where " + where
  94. fmt.Println(sqlCount)
  95. var sql string
  96. //sql = ` select a.*,b.*,c.Genus,concat(c.ProvinceName,c.CityName,c.StreetName,c.Address) as AddressName,c.SurveyDate,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode,g.GroupId,g.GroupName from ` + tbldetail + ` a
  97. sql = ` select a.*,b.*,c.Genus,concat(c.ProvinceName,c.CityName,c.StreetName,c.Address) as AddressName,c.SurveyDate,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode from ` + tbldetail + ` a
  98. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  99. left join ` + tbldonor + ` c on b.SourceId = c.Id
  100. left join Shelf d on a.ShelfId=d.Id
  101. left join Box e on a.BoxId=e.Id
  102. left join Equipment f on a.EquipmentId=f.Id
  103. where ` + where + order + `
  104. limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) + ""
  105. fmt.Println(sql)
  106. List := make([]SamplesInfoList, 0)
  107. utils.DBE.Sql(sql).Find(&List)
  108. resultsSlice, err := s.DBE.Query(sqlCount)
  109. LogError(err)
  110. if len(resultsSlice) > 0 {
  111. results := resultsSlice[0]
  112. for _, value := range results {
  113. total, err = strconv.ParseInt(string(value), 10, 64)
  114. LogError(err)
  115. break
  116. }
  117. }
  118. return total, List
  119. }
  120. func (s *SamplesInfoService) GetPagingEntitiesWithDonorsTb(acccode string, pageIndex, itemsPerPage int64, tbldonor, order, where string) (int64, []SamplesInfoList) {
  121. var err error
  122. var total int64
  123. if order != "" {
  124. order = " order by " + order
  125. }
  126. //获取总记录数
  127. if where == "" {
  128. where = "1=1"
  129. }
  130. tbldetail := acccode + SamplesDetailtbName
  131. tblmain := acccode + SamplesMaintbName
  132. groupdetail := acccode + GroupDetailName
  133. sqlCount := " select count(*) from " + tbldetail + " a left join " + tblmain + " b on a.SampleCode = b.SampleCode left join " + tbldonor + " c on b.SourceId = c.Id left join Shelf d on a.ShelfId=d.Id left join Box e on a.BoxId=e.Id left join Equipment f on a.EquipmentId=f.Id left join " + groupdetail + " g on g.SampleId=a.Id where " + where
  134. fmt.Println(sqlCount)
  135. var sql string
  136. sql = ` select a.*,b.*,c.*,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode,g.GroupId,g.GroupName from ` + tbldetail + ` a
  137. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  138. left join ` + tbldonor + ` c on b.SourceId = c.Id
  139. left join Shelf d on a.ShelfId=d.Id
  140. left join Box e on a.BoxId=e.Id
  141. left join Equipment f on a.EquipmentId=f.Id
  142. left join ` + groupdetail + ` g on g.SampleId=a.Id
  143. where ` + where + order + `
  144. limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) + ""
  145. fmt.Println(sql)
  146. List := make([]SamplesInfoList, 0)
  147. utils.DBE.Sql(sql).Find(&List)
  148. resultsSlice, err := s.DBE.Query(sqlCount)
  149. LogError(err)
  150. if len(resultsSlice) > 0 {
  151. results := resultsSlice[0]
  152. for _, value := range results {
  153. total, err = strconv.ParseInt(string(value), 10, 64)
  154. LogError(err)
  155. break
  156. }
  157. }
  158. return total, List
  159. }
  160. //质控随机显示
  161. func (s *SamplesInfoService) GetPagingEntitiesSearch(acccode string, page, size string, order, where string) (int64, []SamplesInfoList) {
  162. var err error
  163. var total int64
  164. if order != "" {
  165. order = " order by " + order
  166. }
  167. //获取总记录数
  168. if where == "" {
  169. where = "1=1"
  170. }
  171. tblmain := acccode + SamplesMaintbName
  172. tbldetail := acccode + SamplesDetailtbName
  173. tbldonor := acccode + DonorstbName
  174. sqlCount := " select count(*) from " + tbldetail + " a left join " + tblmain + " b on a.SampleCode = b.SampleCode left join " + tbldonor + " c on b.SourceId = c.Id left join Shelf d on a.ShelfId=d.Id left join Box e on a.BoxId=e.Id left join Equipment f on a.EquipmentId=f.Id where " + where
  175. fmt.Println(sqlCount)
  176. var sql string
  177. sql = ` select a.*,b.*,c.FamilyState,c.ClinicNum,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode from ` + tbldetail + ` a
  178. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  179. left join ` + tbldonor + ` c on b.SourceId = c.Id
  180. left join Shelf d on a.ShelfId=d.Id
  181. left join Box e on a.BoxId=e.Id
  182. left join Equipment f on a.EquipmentId=f.Id where ` + where + order + `
  183. limit ` + page + `,` + size
  184. fmt.Println(sql)
  185. List := make([]SamplesInfoList, 0)
  186. utils.DBE.Sql(sql).Find(&List)
  187. resultsSlice, err := s.DBE.Query(sqlCount)
  188. LogError(err)
  189. if len(resultsSlice) > 0 {
  190. results := resultsSlice[0]
  191. for _, value := range results {
  192. total, err = strconv.ParseInt(string(value), 10, 64)
  193. LogError(err)
  194. break
  195. }
  196. }
  197. return total, List
  198. }
  199. func (s *SamplesInfoService) GetSamplesInfoListAllData(acccode string, order, where string) []SamplesInfoList {
  200. if order != "" {
  201. order = " order by " + order
  202. }
  203. //获取总记录数
  204. if where == "" {
  205. where = "1=1"
  206. }
  207. tblmain := acccode + SamplesMaintbName
  208. tbldetail := acccode + SamplesDetailtbName
  209. tbldonor := acccode + DonorstbName
  210. groupdetail := acccode + GroupDetailName
  211. var sql string
  212. sql = ` select a.*,b.*,c.FamilyState,c.ClinicNum,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode,g.GroupName from ` + tbldetail + ` a
  213. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  214. left join ` + tbldonor + ` c on b.SourceId = c.Id
  215. left join Shelf d on a.ShelfId=d.Id
  216. left join Box e on a.BoxId=e.Id
  217. left join Equipment f on a.EquipmentId=f.Id
  218. left join ` + groupdetail + ` g on a.Id = g.SampleId where ` + where + order
  219. fmt.Println(sql)
  220. List := make([]SamplesInfoList, 0)
  221. utils.DBE.Sql(sql).Find(&List)
  222. return List
  223. }
  224. func (s *SamplesInfoService) GetArchivedSamplesInfoListAllData(acccode string, order, where string) []SamplesInfoList {
  225. if order != "" {
  226. order = " order by " + order
  227. }
  228. //获取总记录数
  229. if where == "" {
  230. where = "1=1"
  231. }
  232. tblmain := acccode + SamplesMaintbName
  233. tbldetail := acccode + SamplesDetailFiletbName
  234. tbldonor := acccode + DonorstbName
  235. var sql string
  236. sql = ` select a.*,b.*,c.FamilyState from ` + tbldetail + ` a left join ` + tblmain +
  237. ` b on a.SampleCode = b.SampleCode left join ` + tbldonor + ` c on b.SourceId = c.Id where ` + where + order
  238. fmt.Println(sql)
  239. List := make([]SamplesInfoList, 0)
  240. utils.DBE.Sql(sql).Find(&List)
  241. return List
  242. }
  243. func (s *SamplesInfoService) QuerySampleEntity(acccode string, where string) (entity SamplesInfoShow) {
  244. tblmain := acccode + SamplesMaintbName
  245. tbldetail := acccode + SamplesDetailtbName
  246. sql := "select a.*,b.* from " + tbldetail + " a left join " + tblmain +
  247. " b on a.SampleCode = b.SampleCode where " + where
  248. s.DBE.Sql(sql).Get(&entity)
  249. return
  250. }
  251. //获取样本详情 --动物
  252. func (s *SamplesInfoService) QueryAnimalSampleEntity(acccode string, where string) (entity AnimalSamplesInfoShow) {
  253. tblmain := acccode + SamplesMaintbName
  254. tbldetail := acccode + SamplesDetailtbName
  255. sourcetb := acccode + AnimalInfoName
  256. sql := `select a.*,b.*,c.Genus,c.GenusName,concat(c.ProvinceName,c.CityName,c.StreetName,c.Address) as AddressName,c.InnerNo as SourceInner,c.Amount,c.Unit as SourceUni,c.ProjectName,c.Longitude,c.Latitude,c.Altitude,c.SurveyDate
  257. from ` + tbldetail + ` a left join
  258. ` + tblmain + ` b on a.SampleCode = b.SampleCode
  259. left join ` + sourcetb + ` c on b.SourceId = c.Id
  260. where ` + where
  261. s.DBE.Sql(sql).Get(&entity)
  262. return
  263. }
  264. //获取样本详情 2017-10-31新增,增加设备名等信息
  265. func (s *SamplesInfoService) QuerySampleDetailEntity(acccode string, where string) (entity SamplesInDetailfoShow) {
  266. tblmain := acccode + SamplesMaintbName
  267. tbldetail := acccode + SamplesDetailtbName
  268. sql := `select a.*,b.*,c.Name EName,c.Code ECode,d.Code ShelfCode,e.Code BoxCode,
  269. d.XStation ShelfX,d.YStation ShelfY,e.XStation BoxX,e.YStation BoxY
  270. from ` + tbldetail + ` a left join
  271. ` + tblmain + ` b on a.SampleCode = b.SampleCode
  272. inner join Equipment c on a.EquipmentId=c.Id
  273. inner join Shelf d on a.ShelfId=d.Id
  274. inner join Box e on a.BoxId = e.Id
  275. where ` + where
  276. s.DBE.Sql(sql).Get(&entity)
  277. return
  278. }
  279. func (s *SamplesInfoService) DeleteDetail(tbldetail, where string) error {
  280. sql := "update " + tbldetail + " set DeletionStateCode=1 where " + where
  281. _, err := s.DBE.Exec(sql)
  282. return err
  283. }
  284. func (s *SamplesInfoService) InsertExcelSamplesInput(excelpath, acccode, createby string, createuserid int) (err error, warn string) {
  285. //公共扩展list
  286. //svcdnote := samplenoteitem.GetSampleNoteItemService(utils.DBE)
  287. //wherenote := " AccCode='" + acccode + "'"
  288. //notecount := svcdnote.GetNoteCount(acccode) //获取扩展项目count
  289. //notelist := svcdnote.GetDNoteItemList(wherenote)
  290. tblmain := acccode + SamplesMaintbName
  291. tbldetail := acccode + SamplesDetailtbName
  292. tblfile := acccode + SamplesDetailFiletbName
  293. tblbuss := acccode + SamplesBusstbName
  294. //tbldonor := acccode + AnimalInfoName
  295. //tbldonor := acccode + DonorstbName
  296. //当是蜜蜂所用户时,取acccode + AnimalInfoName 动物表数据
  297. tbldonor := ""
  298. if(strings.EqualFold(acccode,"sBBo4")){
  299. tbldonor = acccode + AnimalInfoName
  300. }else{
  301. tbldonor = acccode + DonorstbName
  302. }
  303. var datadetail SamplesDetail
  304. var databuss samplesbusiness.SamplesBusiness //业务记录
  305. dir, _ := os.Getwd()
  306. flag := 0
  307. excelpath = dir + excelpath
  308. xlFile, err := xlsx.OpenFile(excelpath)
  309. if err != nil {
  310. beego.Error(err)
  311. return
  312. }
  313. svcdonors := donorsinfo.GetDonorsInfoService(utils.DBE)
  314. var donors_data donorsinfo.DonorsInfo
  315. var sampletype_data sampletype.SampleType
  316. var base_userrole userRole.Base_User
  317. svc := sampletype.GetSampleTypeService(utils.DBE)
  318. svc1 := baseUser.GetBaseUserService(utils.DBE)
  319. var warn1 string
  320. for sheetindex, sheet := range xlFile.Sheets { //循环页数
  321. sheetrows := len(xlFile.Sheets[sheetindex].Rows) //每一页的行数
  322. templateName := sheet.Name
  323. if templateName != "默认模板" {
  324. svc2 := sampleimporttemplate.GetSampleImporttemplateService(utils.DBE)
  325. where := " AccCode = '" + acccode + "'"
  326. where = where + " and Name='" + templateName + "'"
  327. var list []sampleimporttemplate.SampleImporttemplate
  328. svc2.GetPagingEntitiesWithSortCode(0, 1, "Id desc", &list, where)
  329. if len(list) == 0 {
  330. beego.Error("not found template:", templateName)
  331. continue
  332. }
  333. fields := strings.Split(list[0].Content, ",")
  334. for rowindex, row := range sheet.Rows { //循环行数
  335. notefieldstr := ""
  336. notevaluestr := ""
  337. if rowindex == 0 { //第一行是表头,跳过
  338. continue
  339. }
  340. if row.Cells == nil { //小于必填项的19列,不允许导入(改为跳过)
  341. continue
  342. }
  343. basestation := new(SamplesInfoShow)
  344. for cellindex, cell := range row.Cells { //循环列数
  345. if cellindex >= len(fields) {
  346. break
  347. }
  348. field := fields[cellindex]
  349. if len(cell.String()) == 0 && (field == "SampleCode" || field == "SampleType") {
  350. //不能为空
  351. flag = 1
  352. break
  353. }
  354. if cell.String() != "" && len(cell.String()) != 0 {
  355. if field == "EquipmentId" {
  356. basestation.EquipmentId, _ = utils.StrTo(cell.String()).Int()
  357. } else if field == "ShelfId" {
  358. basestation.ShelfId, _ = utils.StrTo(cell.String()).Int()
  359. } else if field == "BoxId" {
  360. basestation.BoxId, _ = utils.StrTo(cell.String()).Int()
  361. } else if field == "Position" {
  362. spos := cell.String()
  363. sposs := StrSplit(spos, ";")
  364. basestation.Position = sposs[1] + ";" + utils.ToStr(Boxlineumber(sposs[0]))
  365. whereposition := " DeletionStateCode=0 and IState in (1,5) and BoxId=" + utils.ToStr(basestation.BoxId) + " and Position='" + basestation.Position + "'"
  366. have := s.QuerySampleInfoHas(tbldetail, whereposition)
  367. if have {
  368. flag = 1
  369. warn1 += cell.String() + ","
  370. break
  371. }
  372. } else if field == "SampleCode" { //样本编码
  373. basestation.SampleCode = cell.String()
  374. } else if field == "BarCode" { //样本条码
  375. whereposition := " DeletionStateCode=0 and BarCode = '" + cell.String() + "' "
  376. have := s.QuerySampleInfoHas(tbldetail, whereposition)
  377. where := " DeletionStateCode=0 and BarCode = '" + cell.String() + "'"
  378. has := s.QuerySampleInfoHas(tblfile, where)
  379. if have || has {
  380. flag = 1
  381. warn1 += cell.String() + ","
  382. break
  383. }
  384. basestation.BarCode = cell.String()
  385. } else if field == "SampleType" {
  386. basestation.SampleTypeName = cell.String()
  387. where2 := " AccCode='" + acccode + "' and Name='" + cell.String() + "'"
  388. sampletype_data = svc.GetSampleType(where2)
  389. if sampletype_data.Id == 0 {
  390. flag = 1
  391. warn1 = " "
  392. break
  393. }
  394. basestation.SampleType = sampletype_data.Id
  395. } else if field == "Name" {
  396. basestation.Name = cell.String()
  397. } else if field == "Unit" {
  398. basestation.Unit = cell.String()
  399. } else if field == "ValidityDate" {
  400. stime, err := utils.TimeParse(cell.Value, "2006-1-2 15:4:5")
  401. if err != nil {
  402. aa, _ := utils.StrTo(cell.Value).Float64()
  403. basestation.ValidityDate = xlsx.TimeFromExcelTime(aa, false)
  404. } else {
  405. basestation.ValidityDate = stime
  406. }
  407. } else if field == "ReceiveDate" {
  408. stime, err := utils.TimeParse(cell.Value, "2006-1-2 15:4:5")
  409. if err != nil {
  410. aa, _ := utils.StrTo(cell.Value).Float64()
  411. basestation.ReceiveDate = xlsx.TimeFromExcelTime(aa, false)
  412. } else {
  413. basestation.ReceiveDate = stime
  414. }
  415. } else if field == "CreateBy" {
  416. base_userrole = svc1.GetidByRealname(cell.String())
  417. basestation.CreateBy = cell.String()
  418. basestation.CreateUserId = base_userrole.Id
  419. } else if field == "SourceName" {
  420. basestation.SourceName = cell.String()
  421. } else if field == "SourceIdCard" {
  422. basestation.SourceIdCard = cell.String()
  423. } else if field == "Remark" {
  424. basestation.Remark = cell.String()
  425. } else if field == "ParentBarCode" {
  426. basestation.ParentBarCode = cell.String()
  427. } else if field == "InnerCode" {
  428. basestation.InnerCode = cell.String()
  429. } else {
  430. if strings.Contains(field, "ZBack") {
  431. notefieldstr = notefieldstr + "," + field //扩展字段
  432. notevaluestr = notevaluestr + ",'" + cell.String() + "'" //扩展名称
  433. }
  434. }
  435. // else if field == "SamplingOrgan" {
  436. // basestation.SamplingOrgan = cell.String()
  437. // } else if field == "SamplingOrganName" {
  438. // basestation.SamplingOrganName = cell.String()
  439. // } else if field == "SamplingSite" {
  440. // basestation.SamplingSite = cell.String()
  441. // } else if field == "SamplingSiteName" {
  442. // basestation.SamplingSiteName = cell.String()
  443. // } else if field == "Capacity" {
  444. // basestation.Capacity, _ = utils.StrTo(cell.String()).Float32()
  445. // basestation.InitCapacity = basestation.Capacity
  446. // }
  447. }
  448. }
  449. // if flag == 1 {
  450. // flag = 0
  451. // continue
  452. // }
  453. if basestation.CreateBy == "" {
  454. basestation.CreateBy = createby
  455. basestation.CreateUserId = createuserid
  456. }
  457. // if basestation.SourceName != "" || basestation.SourceIdCard != "" {
  458. if basestation.SourceName != "" {
  459. //wheredonors := " IdCard = '" + basestation.SourceIdCard + "' and Name ='" + basestation.SourceName + "' "
  460. wheredonors := " Name ='" + basestation.SourceName + "' "
  461. donors_data = svcdonors.QueryDonorEntity(tbldonor, wheredonors)
  462. basestation.SourceId = donors_data.Id
  463. }
  464. basestation.AccCode = acccode
  465. basestation.CreateOn = time.Now()
  466. basestation.IState = 3
  467. basestation.IType = 0
  468. basestation.FreezingNum = 0
  469. wheremain := " SampleCode='" + basestation.SampleCode + "' "
  470. ishasmain := s.QuerySampleInfoHas(tblmain, wheremain)
  471. if !ishasmain { //没有主信息,全部添加
  472. //添加主表
  473. sqlfield := " AccCode,SampleCode,Name,SampleType,SampleTypeName,SourceId,"
  474. sqlfield = sqlfield + "SamplingOrgan,SamplingOrganName,SamplingSite,SamplingSiteName,ReceiveDate,"
  475. sqlfield = sqlfield + "SourceIdCard,SourceName,MCreateUserId,MCreateBy,MCreateOn,MModifiedOn"
  476. sqlfield = sqlfield + notefieldstr
  477. sqlvalue := "'" + basestation.AccCode + "','" + basestation.SampleCode + "','" + basestation.Name + "'," + utils.ToStr(basestation.SampleType) + ",'" + basestation.SampleTypeName + "',"
  478. sqlvalue = sqlvalue + "" + utils.ToStr(basestation.SourceId) + ","
  479. sqlvalue = sqlvalue + "'" + basestation.SamplingOrgan + "','" + basestation.SamplingOrganName + "','" + basestation.SamplingSite + "',"
  480. sqlvalue = sqlvalue + "'" + basestation.SamplingSiteName + "','" + basestation.ReceiveDate.Format("2006-1-2 15:4:5") + "','" + basestation.SourceIdCard + "','" + basestation.SourceName + "',"
  481. sqlvalue = sqlvalue + "" + utils.ToStr(basestation.CreateUserId) + ",'" + basestation.CreateBy + "',now(),now()"
  482. sqlvalue = sqlvalue + notevaluestr
  483. s.AddLine(tblmain, sqlfield, sqlvalue)
  484. }
  485. // if basestation.BarCode == "" {
  486. // basestation.BarCode = s.AutoGetBarCode(acccode, basestation.SampleCode)
  487. // }
  488. datadetail.SampleCode = basestation.SampleCode
  489. datadetail.BarCode = basestation.BarCode
  490. datadetail.IState = 1
  491. datadetail.EquipmentId = basestation.EquipmentId
  492. datadetail.ShelfId = basestation.ShelfId
  493. datadetail.BoxId = basestation.BoxId
  494. datadetail.Position = basestation.Position
  495. datadetail.ParentBarCode = basestation.ParentBarCode
  496. datadetail.IType = basestation.IType
  497. datadetail.Capacity = basestation.Capacity
  498. datadetail.InitCapacity = basestation.Capacity
  499. datadetail.Unit = basestation.Unit
  500. datadetail.FreezingNum = 0
  501. datadetail.ValidityDate = basestation.ValidityDate
  502. datadetail.InnerCode = basestation.InnerCode
  503. datadetail.CreateUserId = basestation.CreateUserId
  504. datadetail.CreateBy = basestation.CreateBy
  505. datadetail.Remark = basestation.Remark
  506. fmt.Println("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee3", tbldetail, &datadetail)
  507. affected, _ := s.InsertEntityBytbl(tbldetail, &datadetail)
  508. if affected > 0 {
  509. databuss.OpType = 7
  510. databuss.AccCode = basestation.AccCode
  511. databuss.BarCode = datadetail.BarCode
  512. databuss.CapacityUsed = datadetail.Capacity
  513. databuss.CapacityRest = datadetail.Capacity
  514. databuss.SampleCode = datadetail.SampleCode
  515. databuss.Unit = datadetail.Unit
  516. databuss.SampleType = basestation.SampleType
  517. databuss.EquipmentId = datadetail.EquipmentId
  518. databuss.ShelfId = datadetail.ShelfId
  519. databuss.BoxId = datadetail.BoxId
  520. databuss.Position = datadetail.Position
  521. databuss.PositionDesc = s.GetPostiondescByPosId(datadetail.EquipmentId, datadetail.ShelfId, datadetail.BoxId, datadetail.Position)
  522. databuss.CreateUserId = datadetail.CreateUserId
  523. databuss.CreateBy = datadetail.CreateBy
  524. s.InsertEntityBytbl(tblbuss, &databuss)
  525. }
  526. if rowindex == (sheetrows) {
  527. //s.AddLine(tbldetail, sqlfield, sqlvalue)
  528. }
  529. }
  530. } else {
  531. for rowindex, row := range sheet.Rows { //循环行数
  532. notefieldstr := ""
  533. notevaluestr := ""
  534. if rowindex == 0 { //第一行是表头,跳过
  535. continue
  536. }
  537. if row.Cells == nil || len(row.Cells) < 13 { //小于必填项的19列,不允许导入(改为跳过)
  538. continue
  539. }
  540. basestation := new(SamplesInfoShow)
  541. for cellindex, cell := range row.Cells { //循环列数
  542. if cellindex == 0 && len(cell.String()) == 0 { //冰箱ID不能为空
  543. flag = 1
  544. break
  545. }
  546. if cellindex == 2 && len(cell.String()) == 0 { //冻存架不能为空
  547. flag = 1
  548. break
  549. }
  550. if cellindex == 4 && len(cell.String()) == 0 { //冻存盒Id不能为空
  551. flag = 1
  552. break
  553. }
  554. if cellindex == 6 && len(cell.String()) == 0 { //位置不能为空
  555. flag = 1
  556. break
  557. }
  558. if cellindex == 7 && len(cell.String()) == 0 { //样本编码不能为空
  559. flag = 1
  560. break
  561. }
  562. if cellindex == 9 && len(cell.String()) == 0 { //样本类型不能为空
  563. flag = 1
  564. break
  565. }
  566. if cellindex == 17 && len(cell.String()) == 0 { //有效日期不能为空
  567. flag = 1
  568. break
  569. }
  570. if cellindex == 18 && len(cell.String()) == 0 { //接收日期不能为空
  571. flag = 1
  572. break
  573. }
  574. if cell.String() != "" && len(cell.String()) != 0 {
  575. if cellindex == 0 {
  576. basestation.EquipmentId, _ = utils.StrTo(cell.String()).Int()
  577. } else if cellindex == 2 {
  578. basestation.ShelfId, _ = utils.StrTo(cell.String()).Int()
  579. } else if cellindex == 4 {
  580. basestation.BoxId, _ = utils.StrTo(cell.String()).Int()
  581. } else if cellindex == 6 {
  582. spos := cell.String()
  583. sposs := StrSplit(spos, ";")
  584. basestation.Position = sposs[1] + ";" + utils.ToStr(Boxlineumber(sposs[0]))
  585. whereposition := " DeletionStateCode=0 and IState in (1,5) and BoxId=" + utils.ToStr(basestation.BoxId) + " and Position='" + basestation.Position + "'"
  586. have := s.QuerySampleInfoHas(tbldetail, whereposition)
  587. if have {
  588. flag = 1
  589. warn1 += cell.String() + ","
  590. break
  591. }
  592. } else if cellindex == 7 { //样本编码
  593. basestation.SampleCode = cell.String()
  594. } else if cellindex == 8 { //样本条码
  595. whereposition := " DeletionStateCode=0 and BarCode = '" + cell.String() + "' "
  596. have := s.QuerySampleInfoHas(tbldetail, whereposition)
  597. where := " DeletionStateCode=0 and BarCode = '" + cell.String() + "'"
  598. has := s.QuerySampleInfoHas(tblfile, where)
  599. if have || has {
  600. flag = 1
  601. warn1 += cell.String() + ","
  602. break
  603. }
  604. basestation.BarCode = cell.String()
  605. } else if cellindex == 9 {
  606. basestation.SampleTypeName = cell.String()
  607. where2 := " AccCode='" + acccode + "' and Name='" + cell.String() + "'"
  608. sampletype_data = svc.GetSampleType(where2)
  609. if sampletype_data.Id == 0 {
  610. flag = 1
  611. warn1 = " "
  612. break
  613. }
  614. basestation.SampleType = sampletype_data.Id
  615. } else if cellindex == 10 {
  616. basestation.Name = cell.String()
  617. } else if cellindex == 11 {
  618. basestation.SamplingOrgan = cell.String()
  619. } else if cellindex == 12 {
  620. basestation.SamplingOrganName = cell.String()
  621. } else if cellindex == 13 {
  622. basestation.SamplingSite = cell.String()
  623. } else if cellindex == 14 {
  624. basestation.SamplingSiteName = cell.String()
  625. } else if cellindex == 15 {
  626. basestation.Capacity, _ = utils.StrTo(cell.String()).Float32()
  627. basestation.InitCapacity = basestation.Capacity
  628. } else if cellindex == 16 {
  629. basestation.Unit = cell.String()
  630. } else if cellindex == 17 {
  631. stime, err := utils.TimeParse(cell.Value, "2006-1-2 15:4:5")
  632. if err != nil {
  633. aa, _ := utils.StrTo(cell.Value).Float64()
  634. basestation.ValidityDate = xlsx.TimeFromExcelTime(aa, false)
  635. } else {
  636. basestation.ValidityDate = stime
  637. }
  638. } else if cellindex == 18 {
  639. stime, err := utils.TimeParse(cell.Value, "2006-1-2 15:4:5")
  640. if err != nil {
  641. aa, _ := utils.StrTo(cell.Value).Float64()
  642. basestation.ReceiveDate = xlsx.TimeFromExcelTime(aa, false)
  643. } else {
  644. basestation.ReceiveDate = stime
  645. }
  646. } else if cellindex == 19 {
  647. base_userrole = svc1.GetidByRealname(cell.String())
  648. basestation.CreateBy = cell.String()
  649. basestation.CreateUserId = base_userrole.Id
  650. } else if cellindex == 20 {
  651. basestation.SourceName = cell.String()
  652. } else if cellindex == 21 {
  653. basestation.SourceIdCard = cell.String()
  654. } else if cellindex == 22 {
  655. basestation.Remark = cell.String()
  656. } else if cellindex == 23 {
  657. basestation.ParentBarCode = cell.String()
  658. } else if cellindex == 24 {
  659. basestation.InnerCode = cell.String()
  660. }
  661. // else if cellindex > 24 && cellindex < 25+notecount {
  662. // for i := 1; i < notecount+1; i++ {
  663. // if cellindex == 24+i {
  664. // notefieldstr = notefieldstr + "," + notelist[i-1].FieldName //扩展字段 因为cellindex可能小于21
  665. // notevaluestr = notevaluestr + ",'" + cell.String() + "'" //扩展名称
  666. // }
  667. // }
  668. // }
  669. }
  670. }
  671. if flag == 1 {
  672. flag = 0
  673. //continue
  674. }
  675. if basestation.CreateBy == "" {
  676. basestation.CreateBy = createby
  677. basestation.CreateUserId = createuserid
  678. }
  679. if basestation.SourceName != "" || basestation.SourceIdCard != "" {
  680. wheredonors := " IdCard = '" + basestation.SourceIdCard + "' and Name ='" + basestation.SourceName + "' "
  681. donors_data = svcdonors.QueryDonorEntity(tbldonor, wheredonors)
  682. basestation.SourceId = donors_data.Id
  683. }
  684. basestation.AccCode = acccode
  685. basestation.CreateOn = time.Now()
  686. basestation.IState = 3
  687. basestation.IType = 0
  688. basestation.FreezingNum = 0
  689. wheremain := " SampleCode='" + basestation.SampleCode + "' "
  690. ishasmain := s.QuerySampleInfoHas(tblmain, wheremain)
  691. if !ishasmain { //没有主信息,全部添加
  692. //添加主表
  693. sqlfield := " AccCode,SampleCode,Name,SampleType,SampleTypeName,SourceId,"
  694. sqlfield = sqlfield + "SamplingOrgan,SamplingOrganName,SamplingSite,SamplingSiteName,ReceiveDate,"
  695. sqlfield = sqlfield + "SourceIdCard,SourceName,MCreateUserId,MCreateBy,MCreateOn,MModifiedOn"
  696. sqlfield = sqlfield + notefieldstr
  697. sqlvalue := "'" + basestation.AccCode + "','" + basestation.SampleCode + "','" + basestation.Name + "'," + utils.ToStr(basestation.SampleType) + ",'" + basestation.SampleTypeName + "',"
  698. sqlvalue = sqlvalue + "" + utils.ToStr(basestation.SourceId) + ","
  699. sqlvalue = sqlvalue + "'" + basestation.SamplingOrgan + "','" + basestation.SamplingOrganName + "','" + basestation.SamplingSite + "',"
  700. sqlvalue = sqlvalue + "'" + basestation.SamplingSiteName + "','" + basestation.ReceiveDate.Format("2006-1-2 15:4:5") + "','" + basestation.SourceIdCard + "','" + basestation.SourceName + "',"
  701. sqlvalue = sqlvalue + "" + utils.ToStr(basestation.CreateUserId) + ",'" + basestation.CreateBy + "',now(),now()"
  702. sqlvalue = sqlvalue + notevaluestr
  703. fmt.Println(sqlfield)
  704. fmt.Println(sqlvalue)
  705. s.AddLine(tblmain, sqlfield, sqlvalue)
  706. }
  707. if basestation.BarCode == "" {
  708. basestation.BarCode = s.AutoGetBarCode(acccode, basestation.SampleCode)
  709. }
  710. datadetail.SampleCode = basestation.SampleCode
  711. datadetail.BarCode = basestation.BarCode
  712. datadetail.IState = 1
  713. datadetail.EquipmentId = basestation.EquipmentId
  714. datadetail.ShelfId = basestation.ShelfId
  715. datadetail.BoxId = basestation.BoxId
  716. datadetail.Position = basestation.Position
  717. datadetail.ParentBarCode = basestation.ParentBarCode
  718. datadetail.IType = basestation.IType
  719. datadetail.Capacity = basestation.Capacity
  720. datadetail.InitCapacity = basestation.Capacity
  721. datadetail.Unit = basestation.Unit
  722. datadetail.FreezingNum = 0
  723. datadetail.ValidityDate = basestation.ValidityDate
  724. datadetail.InnerCode = basestation.InnerCode
  725. datadetail.CreateUserId = basestation.CreateUserId
  726. datadetail.CreateBy = basestation.CreateBy
  727. datadetail.Remark = basestation.Remark
  728. affected, _ := s.InsertEntityBytbl(tbldetail, &datadetail)
  729. if affected > 0 {
  730. databuss.OpType = 7
  731. databuss.AccCode = basestation.AccCode
  732. databuss.BarCode = datadetail.BarCode
  733. databuss.CapacityUsed = datadetail.Capacity
  734. databuss.CapacityRest = datadetail.Capacity
  735. databuss.SampleCode = datadetail.SampleCode
  736. databuss.Unit = datadetail.Unit
  737. databuss.SampleType = basestation.SampleType
  738. databuss.EquipmentId = datadetail.EquipmentId
  739. databuss.ShelfId = datadetail.ShelfId
  740. databuss.BoxId = datadetail.BoxId
  741. databuss.Position = datadetail.Position
  742. databuss.PositionDesc = s.GetPostiondescByPosId(datadetail.EquipmentId, datadetail.ShelfId, datadetail.BoxId, datadetail.Position)
  743. databuss.CreateUserId = datadetail.CreateUserId
  744. databuss.CreateBy = datadetail.CreateBy
  745. s.InsertEntityBytbl(tblbuss, &databuss)
  746. }
  747. if rowindex == (sheetrows) {
  748. //s.AddLine(tbldetail, sqlfield, sqlvalue)
  749. }
  750. }
  751. }
  752. }
  753. return err, warn1
  754. }
  755. //判断是否存在此样本
  756. func (s *SamplesInfoService) QuerySampleInfoHas(tablename, where string) bool {
  757. var num MyInt_Id
  758. sql := "select count(1) Id from " + tablename
  759. if where != "" {
  760. sql = sql + " where " + where + " limit 1 "
  761. }
  762. s.DBE.Sql(sql).Get(&num)
  763. total := num.Id
  764. if total > 0 {
  765. return true
  766. } else {
  767. return false
  768. }
  769. }
  770. func (s *SamplesInfoService) AddLine(tablename, fieldName, fieldValue string) error {
  771. sql := "insert into " + tablename + "(" + fieldName + ") values(" + fieldValue + ")"
  772. _, err := s.DBE.Exec(sql)
  773. return err
  774. }
  775. func (s *SamplesInfoService) AutoGetBarCode(acccode, samplecode string) string {
  776. var num MyInt_Id
  777. tbldetail := acccode + SamplesDetailtbName
  778. tblfile := acccode + SamplesDetailFiletbName
  779. slikestring := samplecode
  780. // slikestring := samplecode + "-"
  781. sql := "select MAX(REPLACE(BarCode,'" + slikestring + "','')+1) Id from "
  782. sql = sql + "( select BarCode from " + tbldetail
  783. sql = sql + " where DeletionStateCode=0 and BarCode like '" + slikestring + "%' "
  784. sql = sql + " union select BarCode from " + tblfile
  785. sql = sql + " where DeletionStateCode=0 and BarCode like '" + slikestring + "%') as A "
  786. s.DBE.Sql(sql).Get(&num)
  787. total := num.Id
  788. if total == 0 {
  789. total = 1
  790. }
  791. if total < 10 {
  792. slikestring = samplecode + "0"
  793. }
  794. return slikestring + utils.ToStr(total)
  795. }
  796. func (s *SamplesInfoService) QueryZBackList(acccode string) []String_Id {
  797. List := make([]String_Id, 0)
  798. sql := "select FieldName Id from STypeNoteItem where FieldNo>10 and AccCode ='" + acccode + "' union select FieldName Id from SamplesNoteItem where FieldNo>10 and AccCode ='" + acccode + "'"
  799. utils.DBE.Sql(sql).Find(&List)
  800. return List
  801. }
  802. func (s *SamplesInfoService) DelSDetailInfo(acccode string, id int) error {
  803. tbldetail := acccode + SamplesDetailtbName
  804. sql := " delete from " + tbldetail + " where Id=" + utils.ToStr(id) + ""
  805. _, err := s.DBE.Exec(sql)
  806. return err
  807. }
  808. func (s *SamplesInfoService) DelSMainInfo(acccode string, id int) error {
  809. tbldetail := acccode + SamplesMaintbName
  810. sql := " delete from " + tbldetail + " where MId=" + utils.ToStr(id) + ""
  811. _, err := s.DBE.Exec(sql)
  812. return err
  813. }
  814. func (s *SamplesInfoService) QuerySampleList(acccode string, where string) []SamplesInfoShow {
  815. tblmain := acccode + SamplesMaintbName
  816. tbldetail := acccode + SamplesDetailtbName
  817. sql := "select a.*,b.* from " + tbldetail + " a left join " + tblmain +
  818. " b on a.SampleCode = b.SampleCode where " + where + " order by a.Id desc"
  819. List := make([]SamplesInfoShow, 0)
  820. utils.DBE.Sql(sql).Find(&List)
  821. return List
  822. }
  823. func (s *SamplesInfoService) QueryAnimalSampleList(acccode string, where string) []AnimalSamplesInfoShow {
  824. tblmain := acccode + SamplesMaintbName
  825. tbldetail := acccode + SamplesDetailtbName
  826. animaltb := acccode + AnimalInfoName
  827. sql := "select a.*,b.*,c.Genus,c.GenusName,concat(c.ProvinceName,c.CityName,c.StreetName,c.Address) as AddressName,c.InnerNo as SourceInner,c.Amount,c.Unit as SourceUni,c.ProjectName,c.Longitude,c.Latitude,c.Altitude,c.SurveyDate,c.ZBack11 as BeeKeepers,c.ZBack17 as TakeAway from " + tbldetail + " a left join " + tblmain +
  828. " b on a.SampleCode = b.SampleCode left join " + animaltb +
  829. " c on b.SourceId = c.Id where " + where + " order by a.Id desc"
  830. List := make([]AnimalSamplesInfoShow, 0)
  831. utils.DBE.Sql(sql).Find(&List)
  832. for i := 0; i < len(List); i++ {
  833. //List[i].AllbarCode = "蜂种:" + List[i].Genus + "&&蜂种备注:" + List[i].GenusName + "&&项目属性:" + List[i].ProjectName + "&&采样地址:" + List[i].AddressName + "&&采样时间:" + List[i].SurveyDate.Format("2006-01-02") + "&&群数:" + strconv.Itoa(List[i].Amount) + "&&经度:" + List[i].Longitude + "&&纬度:" + List[i].Latitude + "&&海拔:" + List[i].Altitude + "&&采集人:" + List[i].TakeAway + "&&供蜂人:" + List[i].BeeKeepers + "&&样本编码:" + List[i].BarCode
  834. List[i].ShortbarCode = List[i].BarCode[0:14]
  835. List[i].AllbarCode = List[i].BarCode + "·" + List[i].Genus + "-" + List[i].GenusName + "·" + List[i].AddressName + "·" + List[i].SurveyDate.Format("2006-01-02") + "·" + List[i].Altitude + "米·" + List[i].ProjectName
  836. }
  837. return List
  838. }
  839. type SampleCount struct {
  840. IState int
  841. SCount int
  842. }
  843. //获取数量
  844. func (s *SamplesInfoService) GetSampleOwnCount(tablename, where string) int {
  845. var num MyInt_Id
  846. sql := "select count(Id) Id from " + tablename
  847. if where != "" {
  848. sql = sql + " where " + where
  849. }
  850. s.DBE.Sql(sql).Get(&num)
  851. total := num.Id
  852. return total
  853. }
  854. //获取数量
  855. func (s *SamplesInfoService) GetSampleOwnCountBySourceId(acccode, where string) int {
  856. tblmain := acccode + SamplesMaintbName
  857. tbldetail := acccode + SamplesDetailtbName
  858. var num MyInt_Id
  859. sql := "select count(Id) Id from " + tbldetail + " a left join " + tblmain +
  860. " b on a.SampleCode = b.SampleCode "
  861. if where != "" {
  862. sql = sql + " where " + where
  863. }
  864. s.DBE.Sql(sql).Get(&num)
  865. total := num.Id
  866. return total
  867. }
  868. //获取样本数量分样本类型
  869. type SampleCountType struct {
  870. SampleType int
  871. SCount int
  872. }
  873. func (s *SamplesInfoService) GetSampleCountbySampleType(tablename, where, groupstr string) []SampleCountType {
  874. sql := " select SampleType,Count(Id) SCount from " + tablename
  875. if where != "" {
  876. sql = sql + " where " + where
  877. }
  878. if groupstr != "" {
  879. sql = sql + groupstr
  880. }
  881. List := make([]SampleCountType, 0)
  882. utils.DBE.Sql(sql).Find(&List)
  883. return List
  884. }
  885. func (s *SamplesInfoService) GetPreSampleCountbySampleType(acccode, where, groupstr string) []SampleCountType {
  886. tblmain := acccode + SamplesMaintbName
  887. tbldetail := acccode + SamplesDetailtbName
  888. sql := " select SampleType,Count(Id) SCount from " + tbldetail + " a left join " + tblmain +
  889. " b on a.SampleCode = b.SampleCode "
  890. if where != "" {
  891. sql = sql + " where " + where
  892. }
  893. if groupstr != "" {
  894. sql = sql + groupstr
  895. }
  896. List := make([]SampleCountType, 0)
  897. utils.DBE.Sql(sql).Find(&List)
  898. return List
  899. }
  900. //获取样本数量分样本类型
  901. type SampleOutCountOpType struct {
  902. SampleType int
  903. OpType int
  904. SCount int
  905. }
  906. func (s *SamplesInfoService) GetSampleOutCountbyOpType(tablename, where, groupstr string) []SampleOutCountOpType {
  907. sql := " select SampleType,OpType,Count(Id) SCount from " + tablename
  908. if where != "" {
  909. sql = sql + " where " + where
  910. }
  911. if groupstr != "" {
  912. sql = sql + groupstr
  913. }
  914. List := make([]SampleOutCountOpType, 0)
  915. utils.DBE.Sql(sql).Find(&List)
  916. return List
  917. }
  918. func (s *SamplesInfoService) GetSumSampleLogCountbyOpType(tablename, where, groupstr string) []SampleOutCountOpType {
  919. sql := " select OpType,Count(Id) SCount from " + tablename
  920. if where != "" {
  921. sql = sql + " where " + where
  922. }
  923. if groupstr != "" {
  924. sql = sql + groupstr
  925. }
  926. List := make([]SampleOutCountOpType, 0)
  927. utils.DBE.Sql(sql).Find(&List)
  928. return List
  929. }
  930. func (s *SamplesInfoService) InsertExcelSampleBox(excelpath string, boxentity shelfset.Box, stypeid int, stypename string, capacity float32, unit string) (err error, warn string) {
  931. tblmain := boxentity.AccCode + SamplesMaintbName
  932. tbldetail := boxentity.AccCode + SamplesDetailtbName
  933. tblfile := boxentity.AccCode + SamplesDetailFiletbName
  934. boxrow := boxentity.RowNum
  935. positionitem := 2
  936. var datamain SamplesMain
  937. var datadetail SamplesDetail
  938. dir, _ := os.Getwd()
  939. flag := 0
  940. excelpath = dir + excelpath
  941. xlFile, _ := xlsx.OpenFile(excelpath)
  942. var warn1 string
  943. for sheetindex, sheet := range xlFile.Sheets { //循环页数
  944. sheetrows := len(xlFile.Sheets[sheetindex].Rows) //每一页的行数
  945. fmt.Println("sheetindex", sheetindex)
  946. for rowindex, row := range sheet.Rows { //循环行数
  947. scellrow := ""
  948. scolumn := ""
  949. srealrow := ""
  950. realrow := 0
  951. if rowindex == 0 { //第一行是表头,跳过
  952. continue
  953. }
  954. if row.Cells == nil || len(row.Cells) < 3 { //小于必填项的3列,不允许导入
  955. break
  956. }
  957. basestation := new(SamplesInfoShow)
  958. for cellindex, cell := range row.Cells { //循环列数
  959. if cellindex == 0 && len(cell.String()) == 0 { //条码不能为空
  960. flag = 1
  961. break
  962. }
  963. if cellindex == 1 && len(cell.String()) == 0 { //行数不能为空
  964. flag = 1
  965. break
  966. }
  967. if cellindex == 2 && len(cell.String()) == 0 { //列数不能为空
  968. flag = 1
  969. break
  970. }
  971. if cell.String() != "" && len(cell.String()) != 0 {
  972. if cellindex == 0 {
  973. if cell.String() == "notfound" || cell.String() == "notpipe" {
  974. flag = 1
  975. break
  976. }
  977. basestation.BarCode = cell.String()
  978. } else if cellindex == 1 {
  979. scellrow = cell.String()
  980. if positionitem == 2 {
  981. rowint, _ := utils.StrTo(scellrow).Int()
  982. realrow = boxrow + 1 - rowint
  983. srealrow = utils.ToStr(realrow)
  984. } else {
  985. srealrow = scellrow
  986. }
  987. } else if cellindex == 2 {
  988. scolumn = cell.String()
  989. basestation.Position = utils.ToStr(Boxlineumber(scolumn)) + ";" + srealrow
  990. }
  991. }
  992. }
  993. fmt.Println("qqq---", basestation.Position, positionitem)
  994. if flag == 1 {
  995. flag = 0
  996. continue
  997. }
  998. if basestation.CreateBy == "" {
  999. basestation.CreateBy = boxentity.CreateBy
  1000. basestation.CreateUserId = boxentity.CreateUserId
  1001. }
  1002. basestation.SampleCode = basestation.BarCode
  1003. basestation.Capacity = capacity
  1004. basestation.InitCapacity = basestation.Capacity
  1005. basestation.Unit = unit
  1006. basestation.SampleTypeName = stypename
  1007. basestation.SampleType = stypeid
  1008. basestation.AccCode = boxentity.AccCode
  1009. basestation.CreateOn = time.Now()
  1010. basestation.IType = 0
  1011. basestation.FreezingNum = 0
  1012. wheremain := " SampleCode='" + basestation.SampleCode + "' "
  1013. ishasmain := s.QuerySampleInfoHas(tblmain, wheremain)
  1014. where := " DeletionStateCode=0 and BarCode = '" + basestation.BarCode + "'"
  1015. have := s.QuerySampleInfoHas(tbldetail, where)
  1016. has := s.QuerySampleInfoHas(tblfile, where)
  1017. if !ishasmain && !has && !have {
  1018. datamain.SampleCode = basestation.SampleCode
  1019. datamain.SampleType = basestation.SampleType
  1020. datamain.SampleTypeName = basestation.SampleTypeName
  1021. datamain.AccCode = basestation.AccCode
  1022. datamain.MCreateUserId = basestation.CreateUserId
  1023. datamain.MCreateBy = basestation.CreateBy
  1024. s.InsertEntityBytbl(tblmain, &datamain)
  1025. datadetail.EquipmentId = boxentity.EquipmentId
  1026. datadetail.ShelfId = boxentity.ShelfId
  1027. datadetail.BoxId = boxentity.Id
  1028. datadetail.SampleCode = basestation.SampleCode
  1029. datadetail.BarCode = basestation.BarCode
  1030. datadetail.IState = 11
  1031. datadetail.Position = basestation.Position
  1032. datadetail.IType = basestation.IType
  1033. datadetail.Capacity = basestation.Capacity
  1034. datadetail.InitCapacity = basestation.Capacity
  1035. datadetail.Unit = basestation.Unit
  1036. datadetail.FreezingNum = 0
  1037. datadetail.CreateUserId = basestation.CreateUserId
  1038. datadetail.CreateBy = basestation.CreateBy
  1039. datadetail.Remark = basestation.Remark
  1040. s.InsertEntityBytbl(tbldetail, &datadetail)
  1041. }
  1042. if rowindex == (sheetrows) {
  1043. //s.AddLine(tbldetail, sqlfield, sqlvalue)
  1044. }
  1045. }
  1046. }
  1047. return err, warn1
  1048. }
  1049. //扫描导入无冻存盒导入冻存管
  1050. func (s *SamplesInfoService) ExportSampleBox(dongcun string, boxentity shelfset.Box, stypeid int, stypename string, capacity float32, unit string) (err error, issuess int) {
  1051. dongcuns := strings.Split(dongcun, ",")
  1052. if len(dongcuns) == 48 || len(dongcuns) == 49 {
  1053. tblmain := boxentity.AccCode + SamplesMaintbName
  1054. tbldetail := boxentity.AccCode + SamplesDetailtbName
  1055. tblfile := boxentity.AccCode + SamplesDetailFiletbName
  1056. var datamain SamplesMain
  1057. var datadetail SamplesDetail
  1058. //添加冻存管数据
  1059. for i := 1; i <= 12; i++ { //盒子有12列,8行,交替显示
  1060. for j := 1; j <= 4; j++ { //实际每列只有4个
  1061. guanx, guany := 0, 0
  1062. if i%2 == 1 { //奇数列从第2行开始2,4,6,8
  1063. guanx, guany = i, 2*j
  1064. } else {
  1065. guanx, guany = i, 2*j-1
  1066. }
  1067. basestation := new(SamplesInfoShow)
  1068. basestation.BarCode = dongcuns[4*(i-1)+(j-1)]
  1069. //无冻存管是字符串:No Tube
  1070. if strings.Index(basestation.BarCode, "No Tube") > -1 {
  1071. continue
  1072. }
  1073. basestation.Position = fmt.Sprintf("%v;%v", guanx, guany) //位置
  1074. basestation.SampleCode = basestation.BarCode
  1075. if basestation.CreateBy == "" {
  1076. basestation.CreateBy = boxentity.CreateBy
  1077. basestation.CreateUserId = boxentity.CreateUserId
  1078. }
  1079. basestation.Capacity = capacity
  1080. basestation.InitCapacity = basestation.Capacity
  1081. basestation.Unit = unit
  1082. basestation.SampleTypeName = stypename
  1083. basestation.SampleType = stypeid
  1084. basestation.AccCode = boxentity.AccCode
  1085. basestation.CreateOn = time.Now()
  1086. basestation.IType = 0
  1087. basestation.FreezingNum = 0
  1088. wheremain := " SampleCode='" + basestation.SampleCode + "' "
  1089. ishasmain := s.QuerySampleInfoHas(tblmain, wheremain)
  1090. where := " DeletionStateCode=0 and BarCode = '" + basestation.BarCode + "'"
  1091. have := s.QuerySampleInfoHas(tbldetail, where)
  1092. has := s.QuerySampleInfoHas(tblfile, where)
  1093. if !ishasmain && !has && !have {
  1094. datamain.SampleCode = basestation.SampleCode
  1095. datamain.SampleType = basestation.SampleType
  1096. datamain.SampleTypeName = basestation.SampleTypeName
  1097. datamain.AccCode = basestation.AccCode
  1098. datamain.MCreateUserId = basestation.CreateUserId
  1099. datamain.MCreateBy = basestation.CreateBy
  1100. s.InsertEntityBytbl(tblmain, &datamain)
  1101. datadetail.EquipmentId = boxentity.EquipmentId
  1102. datadetail.ShelfId = boxentity.ShelfId
  1103. datadetail.BoxId = boxentity.Id
  1104. datadetail.SampleCode = basestation.SampleCode
  1105. datadetail.BarCode = basestation.BarCode
  1106. datadetail.IState = 1
  1107. datadetail.Position = basestation.Position
  1108. datadetail.IType = basestation.IType
  1109. datadetail.Capacity = basestation.Capacity
  1110. datadetail.InitCapacity = basestation.Capacity
  1111. datadetail.Unit = basestation.Unit
  1112. datadetail.FreezingNum = 0
  1113. datadetail.CreateUserId = basestation.CreateUserId
  1114. datadetail.CreateBy = basestation.CreateBy
  1115. datadetail.Remark = basestation.Remark
  1116. s.InsertEntityBytbl(tbldetail, &datadetail)
  1117. }
  1118. }
  1119. }
  1120. //添加补充位置的数据
  1121. for i := 1; i <= 12; i++ { //盒子有12列,8行,交替显示
  1122. for j := 1; j <= 4; j++ { //实际每列只有4个
  1123. guanx, guany := 0, 0
  1124. if i%2 == 1 { //奇数列从第2行开始2,4,6,8
  1125. guanx, guany = i, 2*j-1
  1126. } else {
  1127. guanx, guany = i, 2*j
  1128. }
  1129. basestation := new(SamplesInfoShow)
  1130. basestation.BarCode = "-99" //特殊,不需要
  1131. basestation.Position = fmt.Sprintf("%v;%v", guanx, guany) //位置
  1132. basestation.SampleCode = basestation.BarCode
  1133. if basestation.CreateBy == "" {
  1134. basestation.CreateBy = boxentity.CreateBy
  1135. basestation.CreateUserId = boxentity.CreateUserId
  1136. }
  1137. basestation.Capacity = 0
  1138. basestation.InitCapacity = basestation.Capacity
  1139. basestation.Unit = unit
  1140. basestation.SampleTypeName = stypename
  1141. basestation.SampleType = stypeid
  1142. basestation.AccCode = boxentity.AccCode
  1143. basestation.CreateOn = time.Now()
  1144. basestation.IType = 0
  1145. basestation.FreezingNum = 0
  1146. where := " DeletionStateCode=0 and BarCode = '" + basestation.BarCode + "' and Position = '" +
  1147. basestation.Position + "' and EquipmentId=" + utils.ToStr(boxentity.EquipmentId) + " and ShelfId = " +
  1148. utils.ToStr(boxentity.ShelfId) + " and BoxId = " + utils.ToStr(boxentity.Id)
  1149. have := s.QuerySampleInfoHas(tbldetail, where)
  1150. if !have {
  1151. datadetail.EquipmentId = boxentity.EquipmentId
  1152. datadetail.ShelfId = boxentity.ShelfId
  1153. datadetail.BoxId = boxentity.Id
  1154. datadetail.SampleCode = basestation.SampleCode
  1155. datadetail.BarCode = basestation.BarCode
  1156. datadetail.IState = 99
  1157. datadetail.Position = basestation.Position
  1158. datadetail.IType = basestation.IType
  1159. datadetail.Capacity = basestation.Capacity
  1160. datadetail.InitCapacity = basestation.Capacity
  1161. datadetail.Unit = basestation.Unit
  1162. datadetail.FreezingNum = 0
  1163. datadetail.CreateUserId = basestation.CreateUserId
  1164. datadetail.CreateBy = basestation.CreateBy
  1165. datadetail.Remark = basestation.Remark
  1166. s.InsertEntityBytbl(tbldetail, &datadetail)
  1167. }
  1168. }
  1169. }
  1170. return err, 1
  1171. } else {
  1172. return nil, 0
  1173. }
  1174. }
  1175. //扫描导入有冻存盒导入冻存管
  1176. func (s *SamplesInfoService) ExportSampleBoxFull(dongcun string, boxentity shelfset.Box, stypeid int, stypename string, capacity float32, unit string) (err error, issuess int) {
  1177. dongcuns := strings.Split(dongcun, ",")
  1178. if len(dongcuns) == 48 || len(dongcuns) == 49 {
  1179. tblmain := boxentity.AccCode + SamplesMaintbName
  1180. tbldetail := boxentity.AccCode + SamplesDetailtbName
  1181. tblfile := boxentity.AccCode + SamplesDetailFiletbName
  1182. var datamain SamplesMain
  1183. var datadetail SamplesDetail
  1184. //添加冻存管数据
  1185. for i := 1; i <= 12; i++ { //盒子有12列,8行,交替显示
  1186. for j := 1; j <= 4; j++ { //实际每列只有4个
  1187. guanx, guany := 0, 0
  1188. if i%2 == 1 { //奇数列从第2行开始2,4,6,8
  1189. guanx, guany = i, 2*j
  1190. } else {
  1191. guanx, guany = i, 2*j-1
  1192. }
  1193. basestation := new(SamplesInfoShow)
  1194. basestation.BarCode = dongcuns[4*(i-1)+(j-1)]
  1195. //无冻存管是字符串:No Tube
  1196. if strings.Index(basestation.BarCode, "No Tube") > -1 {
  1197. continue
  1198. }
  1199. basestation.Position = fmt.Sprintf("%v;%v", guanx, guany) //位置
  1200. basestation.SampleCode = basestation.BarCode
  1201. if basestation.CreateBy == "" {
  1202. basestation.CreateBy = boxentity.CreateBy
  1203. basestation.CreateUserId = boxentity.CreateUserId
  1204. }
  1205. basestation.Capacity = capacity
  1206. basestation.InitCapacity = basestation.Capacity
  1207. basestation.Unit = unit
  1208. basestation.SampleTypeName = stypename
  1209. basestation.SampleType = stypeid
  1210. basestation.AccCode = boxentity.AccCode
  1211. basestation.CreateOn = time.Now()
  1212. basestation.IType = 0
  1213. basestation.FreezingNum = 0
  1214. wheremain := " SampleCode='" + basestation.SampleCode + "' "
  1215. ishasmain := s.QuerySampleInfoHas(tblmain, wheremain)
  1216. where := " DeletionStateCode=0 and BarCode = '" + basestation.BarCode + "'"
  1217. have := s.QuerySampleInfoHas(tbldetail, where)
  1218. has := s.QuerySampleInfoHas(tblfile, where)
  1219. //当前位置为空
  1220. whereempty := " Position = '" + basestation.Position +
  1221. "' and EquipmentId=" + utils.ToStr(boxentity.EquipmentId) + " and ShelfId = " +
  1222. utils.ToStr(boxentity.ShelfId) + " and BoxId = " + utils.ToStr(boxentity.Id)
  1223. haveempty := s.QuerySampleInfoHas(tbldetail, whereempty)
  1224. if !ishasmain && !has && !have && !haveempty {
  1225. datamain.SampleCode = basestation.SampleCode
  1226. datamain.SampleType = basestation.SampleType
  1227. datamain.SampleTypeName = basestation.SampleTypeName
  1228. datamain.AccCode = basestation.AccCode
  1229. datamain.MCreateUserId = basestation.CreateUserId
  1230. datamain.MCreateBy = basestation.CreateBy
  1231. s.InsertEntityBytbl(tblmain, &datamain)
  1232. datadetail.EquipmentId = boxentity.EquipmentId
  1233. datadetail.ShelfId = boxentity.ShelfId
  1234. datadetail.BoxId = boxentity.Id
  1235. datadetail.SampleCode = basestation.SampleCode
  1236. datadetail.BarCode = basestation.BarCode
  1237. datadetail.IState = 1
  1238. datadetail.Position = basestation.Position
  1239. datadetail.IType = basestation.IType
  1240. datadetail.Capacity = basestation.Capacity
  1241. datadetail.InitCapacity = basestation.Capacity
  1242. datadetail.Unit = basestation.Unit
  1243. datadetail.FreezingNum = 0
  1244. datadetail.CreateUserId = basestation.CreateUserId
  1245. datadetail.CreateBy = basestation.CreateBy
  1246. datadetail.Remark = basestation.Remark
  1247. s.InsertEntityBytbl(tbldetail, &datadetail)
  1248. }
  1249. }
  1250. }
  1251. return err, 1
  1252. } else {
  1253. return nil, 0
  1254. }
  1255. }
  1256. // 获取统计数据按样本类型分组
  1257. func (s *SamplesInfoService) GetTJBysampletype(acccode string, where string) (list []TJGroupModel) {
  1258. tblmain := acccode + SamplesMaintbName
  1259. tbldetail := acccode + SamplesDetailtbName
  1260. donorsinfo := acccode + DonorstbName
  1261. // sql := `select * from (
  1262. // select b.SampleTypeName Name,count(1) Num from ` + tbldetail + ` a left join
  1263. // ` + tblmain + ` b on a.SampleCode = b.SampleCode
  1264. // where a.DeletionStateCode=0 group by b.SampleTypeName) m order by Num desc`
  1265. sql := `select * from (
  1266. select b.SampleTypeName Name,count(1) Num from ` + tbldetail + ` a
  1267. left join ` + tblmain + ` b on a.SampleCode = b.SampleCode
  1268. left join ` + donorsinfo + ` c on b.SourceId=c.Id
  1269. where ` + where + ` group by b.SampleTypeName) m order by Num desc`
  1270. s.DBE.Sql(sql).Find(&list)
  1271. return
  1272. }
  1273. // 获取统计数据按设备分组
  1274. func (s *SamplesInfoService) GetTJBydevice(acccode, where string) (list []TJGroupModel) {
  1275. tbldetail := acccode + SamplesDetailtbName
  1276. sql := `select Name,sum(num) Num from (
  1277. select a.Id,a.Name,case when b.Id is null then 0 else 1 end num from Equipment a left join
  1278. ` + tbldetail + ` b on a.Id=b.EquipmentId where ` + where + `
  1279. ) m group by Id`
  1280. s.DBE.Sql(sql).Find(&list)
  1281. return
  1282. }
  1283. //多中心管理分组统计
  1284. func (s *SamplesInfoService) GetTJBygroup(acccode string, where string) (list []GroupSamples) {
  1285. tbldetail := acccode + SamplesDetailtbName
  1286. tbgroup := acccode + GroupDetailName
  1287. sql := `select * from (
  1288. select a.IState ,c.GroupName as Name,count(1) Num from ` + tbldetail + ` a
  1289. left join ` + tbgroup + ` c on c.SampleId = a.Id
  1290. where ` + where + ` group by IState,Name) m order by IState desc`
  1291. s.DBE.Sql(sql).Find(&list)
  1292. return
  1293. }
  1294. func (s *SamplesInfoService) GetStationByCode(acccode string, where string) SamplesInfoList {
  1295. if where == "" {
  1296. where = "1=1"
  1297. }
  1298. tblmain := acccode + SamplesMaintbName
  1299. tbldetail := acccode + SamplesDetailtbName
  1300. sql := ` select a.*,b.*,d.XStation ShelfX,d.YStation ShelfY,d.Code ShelfCode,e.XStation BoxX,e.YStation BoxY,e.Code BoxCode,f.Id Eid,f.Name EName,f.Code ECode from ` + tbldetail + ` a left join ` + tblmain +
  1301. ` b on a.SampleCode = b.SampleCode left join Shelf d on a.ShelfId=d.Id left join Box e on a.BoxId=e.Id left join Equipment f on a.EquipmentId=f.Id where ` + where + `
  1302. limit 1`
  1303. var model SamplesInfoList
  1304. utils.DBE.Sql(sql).Get(&model)
  1305. return model
  1306. }
  1307. func (s *SamplesInfoService) QuerySampleBoxDataList(tablename, where string) []SampleBoxCount {
  1308. sql := "select BoxId,Count(Id) CurrCount,100 AllCount from " + tablename + where + " group by BoxId "
  1309. List := make([]SampleBoxCount, 0)
  1310. utils.DBE.Sql(sql).Find(&List)
  1311. return List
  1312. }
  1313. //查询日志数据列表
  1314. func (s *SamplesInfoService) GetContantById(tablename, id string) *SamplesLog {
  1315. entity := new(SamplesLog)
  1316. sql := "select * from " + tablename + " where Id=" + id + ""
  1317. s.DBE.Sql(sql).Get(entity)
  1318. return entity
  1319. }
  1320. //获取主表修改记录的下一条
  1321. func (s *SamplesInfoService) GetNextContantById(logtablename, id, tblmain, mid string, model interface{}) string {
  1322. entity := new(SamplesLog)
  1323. sql := "select * from " + logtablename + " where TableName='SamplesMain' and MId = '" + mid + "' and Id > '" + id + "' order by Id limit 1"
  1324. has, _ := s.DBE.Sql(sql).Get(entity)
  1325. if !has {
  1326. sql = "select * from " + tblmain + " where MId = '" + mid + "' limit 1"
  1327. has, _ := s.DBE.Sql(sql).Get(model)
  1328. if has {
  1329. j, _ := json.Marshal(model)
  1330. fmt.Println(j)
  1331. return string(j)
  1332. }
  1333. }
  1334. return entity.RecordData
  1335. }
  1336. //查询下一条数据列表
  1337. func (s *SamplesInfoService) GetNextContantShowInfoById(logtablename, id, recordId string, model interface{}, acccode string) string {
  1338. entity := new(SamplesLog)
  1339. sql := "select * from " + logtablename + " where RecordId = '" + recordId + "' and Id > '" + id + "' order by Id limit 1"
  1340. has, _ := s.DBE.Sql(sql).Get(entity)
  1341. if !has {
  1342. tblmain := acccode + SamplesMaintbName
  1343. tbldetail := acccode + SamplesDetailtbName
  1344. sql := "select a.*,b.* from " + tbldetail + " a left join " + tblmain +
  1345. " b on a.SampleCode = b.SampleCode where Id=" + recordId + " and DeletionStateCode =0 limit 1"
  1346. has, _ := s.DBE.Sql(sql).Get(model)
  1347. if has {
  1348. j, _ := json.Marshal(model)
  1349. return string(j)
  1350. }
  1351. }
  1352. return entity.RecordData
  1353. }
  1354. func NumtoUpChar(x int) string {
  1355. return string(64 + x)
  1356. }
  1357. func (s *SamplesInfoService) GetPostiondescByPosId(eid, sid, bid int, posti string) string {
  1358. var entity SamplesInDetailfoShow
  1359. sql := `select c.Code ECode,b.XStation ShelfX,b.YStation ShelfY,a.XStation BoxX,a.YStation BoxY from Box a
  1360. left join Shelf b on a.ShelfId=b.Id
  1361. left join Equipment c on a.EquipmentId=c.Id
  1362. where a.Id=` + utils.ToStr(bid) + ` and a.ShelfId=` + utils.ToStr(sid) + ` and a.EquipmentId=` + utils.ToStr(eid)
  1363. s.DBE.Sql(sql).Get(&entity)
  1364. pos := strings.Split(posti, ";")
  1365. position := posti
  1366. if len(pos) == 2 {
  1367. posyint, _ := utils.StrTo(pos[1]).Int()
  1368. position = NumtoUpChar(posyint) + pos[0]
  1369. }
  1370. return fmt.Sprintf("%v-%v%v-%v%v-%v", entity.ECode, NumtoUpChar(entity.ShelfY), entity.ShelfX, NumtoUpChar(entity.BoxY), entity.BoxX, position)
  1371. }
  1372. func (s *SamplesInfoService) UpsertSearchTemplate(tablename, name, template string) error {
  1373. var num MyInt_Id
  1374. sql := "select count(1) Id from " + tablename
  1375. sql = sql + " where Name='" + name + "' limit 1 "
  1376. s.DBE.Sql(sql).Get(&num)
  1377. total := num.Id
  1378. var err error
  1379. if total > 0 {
  1380. // 更新
  1381. sql := fmt.Sprintf("update %s set Template='%s' where name='%s'", tablename, template, name)
  1382. _, err = s.DBE.Exec(sql)
  1383. } else {
  1384. //插入
  1385. //sql := "insert into " + tablename + "(Name, Template) values('" + name + "','" + template + "')"
  1386. //_, err = s.DBE.Exec(sql)
  1387. _, err = s.DBE.Table(tablename).Cols("Id", "Name", "Template").Insert(&SamplesSearchTemplate{
  1388. Name: name,
  1389. Template: template,
  1390. })
  1391. }
  1392. return err
  1393. }
  1394. func (s *SamplesInfoService) GetAllSearchTemplate(tablename string) ([]*SamplesSearchTemplate, error) {
  1395. templates := make([]*SamplesSearchTemplate, 0)
  1396. err := s.DBE.Table(tablename).Find(&templates)
  1397. return templates, err
  1398. }
  1399. func (s *SamplesInfoService) GetSearchTemplateByName(tablename, name string) (*SamplesSearchTemplate, error) {
  1400. var template SamplesSearchTemplate
  1401. _, err := s.DBE.Table(tablename).Where("Name='" + name + "'").Get(&template)
  1402. return &template, err
  1403. }
  1404. func (s *SamplesInfoService) DeleteSearchTemplate(tablename, name string) error {
  1405. sql := fmt.Sprintf("delete from %s where name='%s'", tablename, name)
  1406. _, err := s.DBE.Exec(sql)
  1407. return err
  1408. }
  1409. func (s *SamplesInfoService) CreateTemplateTable(tablename string) error {
  1410. sql := fmt.Sprintf(`create table %s (Id int(10) NOT NULL AUTO_INCREMENT, Name varchar(25), Template Text, PRIMARY KEY (Id), UNIQUE (Name))`, tablename)
  1411. _, err := s.DBE.Exec(sql)
  1412. return err
  1413. }