samplesinfoService.go 57 KB

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