TBMaterialController.java 120 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248
  1. package cn.com.lzt.sign.controller;
  2. import cn.com.lzt.arrangedutyoperate.dto.UserAndUserPersonnelDto;
  3. import cn.com.lzt.car.cardoc.entity.CarEntity;
  4. import cn.com.lzt.goodscategory.entity.TBGoodsCategoryEntity;
  5. import cn.com.lzt.goodsinfo.entity.TBGoodsInfoEntity;
  6. import cn.com.lzt.goodsinfo.service.TBGoodsInfoServiceI;
  7. import cn.com.lzt.sign.entity.*;
  8. import cn.com.lzt.sign.page.TBMaterialPage;
  9. import cn.com.lzt.sign.service.*;
  10. import cn.com.lzt.useractiviti.data.dao.UseractivitiDataDao;
  11. import cn.com.lzt.useroptions.service.TBusUserOptionsServiceI;
  12. import cn.com.lzt.warehouse.entity.WarehouseEntity;
  13. import cn.com.lzt.warehouse.service.WarehouseServiceI;
  14. import java.io.*;
  15. import java.net.URLEncoder;
  16. import java.text.ParseException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.*;
  19. import java.util.logging.Logger;
  20. import java.util.stream.Collectors;
  21. import java.util.zip.ZipEntry;
  22. import java.util.zip.ZipOutputStream;
  23. import javax.servlet.ServletOutputStream;
  24. import javax.servlet.http.HttpServletRequest;
  25. import javax.servlet.http.HttpServletResponse;
  26. import javax.servlet.http.HttpSession;
  27. import com.alibaba.fastjson.JSONObject;
  28. import org.apache.poi.hssf.usermodel.*;
  29. import org.apache.poi.ss.usermodel.CellStyle;
  30. import org.apache.poi.ss.util.CellRangeAddress;
  31. import org.jeecgframework.core.common.controller.BaseController;
  32. import org.jeecgframework.core.common.exception.BusinessException;
  33. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  34. import org.jeecgframework.core.common.model.json.AjaxJson;
  35. import org.jeecgframework.core.common.model.json.DataGrid;
  36. import org.jeecgframework.core.constant.Globals;
  37. import org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil;
  38. import org.jeecgframework.core.util.ContextHolderUtils;
  39. import org.jeecgframework.core.util.ResourceUtil;
  40. import org.jeecgframework.core.util.StringUtil;
  41. import org.jeecgframework.tag.core.easyui.TagUtil;
  42. import org.jeecgframework.tag.vo.datatable.SortDirection;
  43. import org.jeecgframework.web.cgform.service.migrate.MigrateForm;
  44. import org.jeecgframework.web.system.pojo.base.*;
  45. import org.jeecgframework.web.system.service.SystemService;
  46. import org.jeecgframework.web.system.util.Tool;
  47. import org.springframework.beans.factory.annotation.Autowired;
  48. import org.springframework.stereotype.Controller;
  49. import org.springframework.transaction.annotation.Transactional;
  50. import org.springframework.ui.ModelMap;
  51. import org.springframework.web.bind.annotation.RequestMapping;
  52. import org.springframework.web.bind.annotation.ResponseBody;
  53. import org.springframework.web.servlet.ModelAndView;
  54. @Controller
  55. @RequestMapping({"/tBMaterialController"})
  56. public class TBMaterialController extends BaseController {
  57. private static final Logger logger = Logger.getLogger(String.valueOf(cn.com.lzt.sign.controller.TBMaterialController.class));
  58. @Autowired
  59. private TBMaterialService tBMaterialService;
  60. @Autowired
  61. private TBMaterialService TBMaterialInfoService;
  62. @Autowired
  63. private WarehouseServiceI warehouseService;
  64. @Autowired
  65. private TBusUserOptionsServiceI userOptionsService;
  66. @Autowired
  67. private TBGoodsInfoServiceI tBGoodsInfoService;
  68. @Autowired
  69. private UseractivitiDataDao useractivitiDataDao;
  70. @Autowired
  71. private SystemService systemService;
  72. @Autowired
  73. private TBMaterialArrivalService tbMaterialArrivalService;
  74. @Autowired
  75. private TBMaterialDeliveryService tbMaterialDeliveryService;
  76. @Autowired
  77. private TBMaterialDeliveryInfoService tbMaterialDeliveryInfoService;
  78. @Autowired
  79. private TBMaterialStockOnHandService tbMaterialStockOnHandService;
  80. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  81. //物料申购页面跳转
  82. @RequestMapping(params = {"list"})
  83. public ModelAndView list(HttpServletRequest request) {
  84. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialList");
  85. }
  86. //物料采购页面跳转
  87. @RequestMapping(params = {"materialPurchasingList"})
  88. public ModelAndView materialPurchasingList(HttpServletRequest request) {
  89. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialPurchasingList");
  90. }
  91. //物料到货页面跳转
  92. @RequestMapping(params = {"materialArrivalList"})
  93. public ModelAndView materialArrivalList(HttpServletRequest request) {
  94. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialArrivalList");
  95. }
  96. //物料出货页面跳转
  97. @RequestMapping(params = {"materialDeliveryList"})
  98. public ModelAndView materialDeliveryList(HttpServletRequest request) {
  99. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDeliveryList");
  100. }
  101. //物料现存量页面跳转
  102. @RequestMapping(params = {"materialStockOnHandList"})
  103. public ModelAndView materialStockOnHandList(HttpServletRequest request) {
  104. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialStockOnHandList");
  105. }
  106. /**
  107. * 获取当前登录人的审批权限集合
  108. *
  109. * @return
  110. * @author刘梦祥
  111. * @Date 2021年11月29日00:42:57
  112. */
  113. public Map<String, List<String>> getUserRuleMap() {
  114. // 获取当前操作人的信息
  115. TSUser user = ResourceUtil.getSessionUser();
  116. CriteriaQuery criteriaQuery = new CriteriaQuery(TSUserOrg.class, new DataGrid());
  117. criteriaQuery.eq("tsUser.id", user.getId());
  118. criteriaQuery.add();
  119. List<TSUserOrg> tsUserOrgList = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  120. DataGrid dataGrid1 = new DataGrid();
  121. CriteriaQuery criteriaQuery1 = new CriteriaQuery(UserAndUserPersonnelDto.class, dataGrid1);
  122. criteriaQuery1.eq("userid", user.getId());
  123. criteriaQuery1.add();
  124. List<UserAndUserPersonnelDto> userAndUserPersonnelDtoList = this.systemService.getListByCriteriaQuery(criteriaQuery1, true);
  125. Map<String, List<String>> ruleMap = new HashMap<>();
  126. // 得到登录人的科室
  127. List<String> departidList = new ArrayList<>();
  128. if (tsUserOrgList != null && tsUserOrgList.size() > 0) {
  129. for (TSUserOrg tsUserOrg : tsUserOrgList) {
  130. departidList.add(tsUserOrg.getTsDepart().getId());
  131. }
  132. } else {
  133. System.err.println("用户的科室信息查询失败:用户id:" + user.getId());
  134. }
  135. // 得到操作人的岗位
  136. List<String> inPostidList = new ArrayList<>();
  137. if (userAndUserPersonnelDtoList != null && userAndUserPersonnelDtoList.size() > 0) {
  138. for (UserAndUserPersonnelDto userInfoDto : userAndUserPersonnelDtoList) {
  139. if (StringUtil.isNotEmpty(userInfoDto.getInPostid())) {
  140. if (!inPostidList.contains(userInfoDto.getInPostid())) {
  141. inPostidList.add(userInfoDto.getInPostid());
  142. }
  143. }
  144. }
  145. } else {
  146. System.err.println("用户的岗位信息查询失败:用户id:" + user.getId());
  147. }
  148. ruleMap.put("departId", departidList);
  149. ruleMap.put("inPostid", inPostidList);
  150. return ruleMap;
  151. }
  152. //物料申购页面数据请求(add-刘梦祥-2021年11月27日15:13:19-(添加逻辑:如果该采购单已经到货,就不再显示))
  153. @RequestMapping(params = {"datagrid"})
  154. public void datagrid(TBMaterialEntity tBMaterial, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  155. StringBuffer queryStr = new StringBuffer();
  156. queryStr.append(" where 1 = 1 ");
  157. // 封装请购科室查询条件
  158. if (StringUtil.isNotEmpty(request.getParameter("materialDaptId"))) {
  159. queryStr.append(" and material_dapt_id = \"" + request.getParameter("materialDaptId") + "\"");
  160. }
  161. // 封装请购科室查询条件
  162. if (StringUtil.isNotEmpty(request.getParameter("materialWarehouseId"))) {
  163. queryStr.append(" and material_warehouse_id = \"" + request.getParameter("materialWarehouseId") + "\"");
  164. }
  165. // 封装审批状态查询条件
  166. if (StringUtil.isNotEmpty(request.getParameter("materialApprove"))) {
  167. queryStr.append(" and material_approve = \"" + request.getParameter("materialApprove") + "\"");
  168. }
  169. // 封装休假期间查询条件
  170. if (StringUtil.isNotEmpty(request.getParameter("vacationDate_begin")) && StringUtil.isNotEmpty(request.getParameter("vacationDate_end"))) {
  171. queryStr.append(" and vacation_start_date >= \"" + request.getParameter("vacationDate_begin") + "\"");
  172. queryStr.append(" and vacation_end_date >= \"" + request.getParameter("vacationDate_end") + "\"");
  173. }
  174. // 封装请购日期查询条件
  175. if (StringUtil.isNotEmpty(request.getParameter("materialDate_begin")) && StringUtil.isNotEmpty(request.getParameter("materialDate_end"))) {
  176. queryStr.append(" and material_date between \"" + request.getParameter("materialDate_begin") + "\" and \"" + request.getParameter("materialDate_end") + "\" ");
  177. }
  178. if (StringUtil.isNotEmpty(request.getParameter("datagridType"))) {
  179. StringBuffer typeSqlStr = new StringBuffer();
  180. typeSqlStr.append("select tbm.* from t_b_material tbm RIGHT JOIN (select *,SUM(material_info_no_num) noSumNum from t_b_material_info where material_info_no_num > 0 GROUP BY material_id) tbmi on tbmi.material_id = tbm.id ");
  181. typeSqlStr.append(queryStr);
  182. Integer pageNumber = dataGrid.getPage();
  183. Integer pageSize = dataGrid.getRows();
  184. List<Map<String, Object>> totalDataList = this.systemService.findForJdbc(typeSqlStr.toString());
  185. typeSqlStr.append(" ORDER BY material_date DESC ");
  186. typeSqlStr.append(" LIMIT " + ((pageNumber - 1) * pageSize) + "," + pageSize);
  187. List<Map<String, Object>> dataList = this.systemService.findForJdbc(typeSqlStr.toString());
  188. List<Map<String, Object>> toolDataList = new ArrayList<>();
  189. //下划线转驼峰
  190. for (Map<String, Object> dataItem : dataList) {
  191. Map<String, Object> toolDataItem = new HashMap<>();
  192. for (String mapKey : dataItem.keySet()) {
  193. toolDataItem.put(Tool.lineToHump(mapKey), dataItem.get(mapKey));
  194. }
  195. toolDataList.add(toolDataItem);
  196. }
  197. dataGrid.setTotal(totalDataList.size());
  198. dataGrid.setResults(toolDataList);
  199. TagUtil.datagrid(response, dataGrid);
  200. } else {
  201. List<Map<String, Object>> dataGridList = this.systemService.toDataGridByDataGrid(" (select tbm.* from t_b_material tbm RIGHT JOIN (select *,SUM(material_info_no_num) noSumNum from t_b_material_info where material_info_no_num > 0 GROUP BY material_id) tbmi on tbmi.material_id = tbm.id) ", "create_by", "request_id", "create_date", dataGrid, queryStr.toString());
  202. dataGrid.setResults(dataGridList);
  203. TagUtil.datagrid(response, dataGrid);
  204. }
  205. }
  206. /**
  207. * 生成当前经办人的审批权限集合
  208. *
  209. * @return
  210. * @author刘梦祥
  211. * @Date 2021年11月29日00:42:57
  212. */
  213. public String getUserRuleMap(String ruleType, String agentUserId) {
  214. TSBaseUser tsBaseUser = this.systemService.getEntity(TSBaseUser.class, agentUserId);
  215. if (tsBaseUser != null && tsBaseUser.getDepartid() != null) {
  216. Map<String, String> ruleMap = new HashMap<>();
  217. switch (ruleType) {
  218. // 科室组长(组长)
  219. case "groupLeader":
  220. ruleMap.put("departId", tsBaseUser.getDepartid());
  221. ruleMap.put("inPostid", "ff8080817b760b5d017b805b3b3301de");
  222. break;
  223. // 安全保障科科长(科长)
  224. case "securitySectionChief":
  225. ruleMap.put("departId", "ff8080817b5e7d81017b62bca59a0136");
  226. ruleMap.put("inPostid", "ff8080817b760b5d017b8057b15901c6");
  227. break;
  228. // 人事科科科长(科长)
  229. case "personnelSectionChief":
  230. ruleMap.put("departId", "ff8080817b5e7d81017b62bc58860132");
  231. ruleMap.put("inPostid", "ff8080817b760b5d017b8057b15901c6");
  232. break;
  233. // 科室科长(科长)
  234. case "sectionChief":
  235. ruleMap.put("departId", tsBaseUser.getDepartid());
  236. if("ff8080817b5e7d81017b62bc1cb4012e".equals(tsBaseUser.getDepartid())){
  237. ruleMap.put("inPostid", "ff8080817b760b5d017b805789b201c4");
  238. }else{
  239. ruleMap.put("inPostid", "ff8080817b760b5d017b8057b15901c6");
  240. }
  241. break;
  242. // 分管领导(根据情况确定)
  243. case "inChargeOfTheLeadership":
  244. // 如果是人事科或者办公室科(高总)
  245. if ("ff8080817b5e7d81017b62bc58860132".equals(tsBaseUser.getDepartid()) || "ff8080817b5e7d81017b62bc1cb4012e".equals(tsBaseUser.getDepartid()) || "ff8080817b760b5d017b76ef38ff0018".equals(tsBaseUser.getDepartid())) {
  246. ruleMap.put("userId", "2c9e7297812325a7018141f5f9fb003b");
  247. // 仓库科、保洁科、市场部(周总)
  248. } else if ("ff8080817b5e7d81017b62bcff99013c".equals(tsBaseUser.getDepartid()) || "ff8080817b5e7d81017b62bcc47a0138".equals(tsBaseUser.getDepartid()) || "ff8080817b5e7d81017b62bc74480134".equals(tsBaseUser.getDepartid())) {
  249. ruleMap.put("userId", "2c9e7297812325a7018141e044cc0036");
  250. // 安全保障科、清运科(潘总)
  251. } else if ("ff8080817b5e7d81017b62bca59a0136".equals(tsBaseUser.getDepartid()) || "ff8080817b5e7d81017b62bcea8c013a".equals(tsBaseUser.getDepartid())) {
  252. ruleMap.put("userId", "2c9e7297812325a7018141f5fb120040");
  253. }
  254. // ruleMap.put("inPostid", "ff8080817b760b5d017b8054e09101b9");
  255. break;
  256. // 总经理(田总)
  257. case "generalManager":
  258. ruleMap.put("userId", "2c9e7297812325a7018141e043a30031");
  259. // ruleMap.put("inPostid", "ff8080817b760b5d017b80547e1401b7");
  260. break;
  261. // 指定用户(指定的用户id:userid:xxxxxxxxxxxx)
  262. default:
  263. ruleMap.put("userId", ruleType.substring(7));
  264. break;
  265. }
  266. return JSONObject.toJSONString(ruleMap);
  267. } else {
  268. return null;
  269. }
  270. }
  271. /**
  272. * 物料采购页面数据请求(只查询已通过且未到货的采购信息)
  273. *
  274. * @param tBMaterial
  275. * @param request
  276. * @param response
  277. * @param dataGrid
  278. * @author 刘梦祥
  279. * @Date 2021年11月17日16:15:53
  280. */
  281. @RequestMapping(params = {"materialPurchasingDatagrid"})
  282. public void materialPurchasingDatagrid(TBMaterialEntity tBMaterial, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  283. CriteriaQuery cq = new CriteriaQuery(TBMaterialEntity.class, dataGrid);
  284. HqlGenerateUtil.installHql(cq, tBMaterial, request.getParameterMap());
  285. cq.eq("materialApprove", "已通过");
  286. cq.add();
  287. this.tBMaterialService.getDataGridReturn(cq, true);
  288. List<TBMaterialEntity> list = dataGrid.getResults();
  289. //检查是否到货
  290. List<TBMaterialEntity> resList = new ArrayList<>();
  291. if (list != null && list.size() > 0) {
  292. for (TBMaterialEntity listItem : list) {
  293. //得到采购单id
  294. String id = listItem.getId();
  295. DataGrid dataGrid1 = new DataGrid();
  296. CriteriaQuery cq1 = new CriteriaQuery(TBMaterialArrivalEntity.class, dataGrid1);
  297. cq1.eq("materialId", id);
  298. cq1.add();
  299. this.tbMaterialArrivalService.getDataGridReturn(cq1, true);
  300. List<TBMaterialArrivalEntity> tbMaterialArrival = dataGrid1.getResults();
  301. if (tbMaterialArrival == null || tbMaterialArrival.size() == 0) {
  302. resList.add(listItem);
  303. }
  304. }
  305. }
  306. dataGrid.setResults(resList);
  307. dataGrid.setTotal(resList.size());
  308. TagUtil.datagrid(response, dataGrid);
  309. }
  310. /**
  311. * 物料到货页面数据请求
  312. *
  313. * @param tbMaterialArrivalEntity
  314. * @param request
  315. * @param response
  316. * @param dataGrid
  317. * @author 刘梦祥
  318. * @Date 2021年11月18日14:28:35
  319. */
  320. @RequestMapping(params = {"materialArrivalDatagrid"})
  321. public void materialArrivalDatagrid(TBMaterialArrivalEntity tbMaterialArrivalEntity, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  322. CriteriaQuery cq = new CriteriaQuery(TBMaterialArrivalEntity.class, dataGrid);
  323. HqlGenerateUtil.installHql(cq, tbMaterialArrivalEntity, request.getParameterMap());
  324. cq.addOrder("createTime", SortDirection.desc);
  325. cq.add();
  326. this.tbMaterialArrivalService.getDataGridReturn(cq, true);
  327. List<TBMaterialArrivalEntity> list = dataGrid.getResults();
  328. dataGrid.setResults(list);
  329. dataGrid.setTotal(list.size());
  330. //审批权限查询end
  331. TagUtil.datagrid(response, dataGrid);
  332. }
  333. /**
  334. * 物料到货页面选择采购单
  335. *
  336. * @param request
  337. * @author 刘梦祥
  338. * @Date 2021年11月21日21:33:34
  339. */
  340. @RequestMapping(params = {"doAddArrival"})
  341. @ResponseBody
  342. public AjaxJson doAddArrival(HttpServletRequest request) {
  343. AjaxJson j = new AjaxJson();
  344. try {
  345. HttpSession session = ContextHolderUtils.getSession();
  346. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  347. //直接将货品信息中的请购科室信息和仓库信息写入到物料到货表中
  348. String materialId = request.getParameter("materialId");
  349. String materialDaptId = request.getParameter("materialDaptId");
  350. String materialWarehouseId = request.getParameter("materialWarehouseId");
  351. //物料到货表添加记录
  352. TBMaterialArrivalEntity tbM = new TBMaterialArrivalEntity();
  353. tbM.setId(UUID.randomUUID().toString());
  354. tbM.setMaterialId(materialId);
  355. tbM.setMaterialDaptId(materialDaptId);
  356. tbM.setMaterialWarehouseId(materialWarehouseId);
  357. tbM.setProcurementTime(new Date());
  358. tbM.setCreateTime(new Date());
  359. tbM.setReportStatus("0");
  360. tbM.setRemake("");
  361. tbM.setCreateUser(tuser.getId());
  362. this.tbMaterialArrivalService.save(tbM);
  363. String message = "添加成功";
  364. j.setMsg(message);
  365. } catch (Exception e) {
  366. j.setSuccess(false);
  367. j.setMsg("添加失败" + e.getMessage());
  368. }
  369. return j;
  370. }
  371. /**
  372. * 根据采购单id打开编辑页面
  373. *
  374. * @return void
  375. * @author 刘梦祥
  376. * @Date 2021年11月22日11:14:19
  377. */
  378. @RequestMapping(params = {"goUpdatePurchaseOrderPage"})
  379. @Transactional(rollbackFor = Exception.class)
  380. public ModelAndView goUpdatePurchaseOrderPage(TBMaterialArrivalEntity tbM, HttpServletRequest request) {
  381. // 物料到货表id
  382. String id = request.getParameter("id");
  383. // 根据到货表主键id获取到货信息
  384. tbM = this.systemService.getEntity(TBMaterialArrivalEntity.class, id);
  385. if (tbM != null) {
  386. String materialId = tbM.getMaterialId();
  387. // 仓库信息
  388. String materialWarehouseId = tbM.getMaterialWarehouseId();
  389. // 备注信息
  390. String remake = tbM.getRemake();
  391. // 到货表id
  392. String ArrivalId = tbM.getId();
  393. // 入库时间
  394. if (tbM.getPutTime() != null) {
  395. Date putTime = tbM.getPutTime();
  396. request.setAttribute("putTime", simpleDateFormat.format(putTime));
  397. }
  398. DataGrid dataGrid = new DataGrid();
  399. dataGrid.setRows(99999);
  400. // 根据采购单id获取采购单详情列表
  401. CriteriaQuery cq = new CriteriaQuery(TBMaterialInfoEntity.class, dataGrid);
  402. cq.eq("materialId", materialId);
  403. // cq.gt("materialInfoNoNum", 0);
  404. cq.add();
  405. List<TBMaterialInfoEntity> tbMList = this.tBMaterialService.getListByCriteriaQuery(cq, true);
  406. // 得到暂存的到货数量
  407. List<String> goodsId = JSONObject.parseObject(tbM.getGoodsIds(), ArrayList.class);
  408. List<String> goodsNums = JSONObject.parseObject(tbM.getGoodsNums(), ArrayList.class);
  409. //首先判断是否存在未到货数量
  410. for (TBMaterialInfoEntity item : tbMList) {
  411. // 写入未到货数量
  412. if (item.getMaterialInfoNoNum() == null) {
  413. item.setMaterialInfoNoNum(0);
  414. }
  415. // 写入累计到货数量
  416. item.setCountGoodsNum(item.getMaterialInfoNum() - item.getMaterialInfoNoNum());
  417. // 初始化本次到货数量以及未到货数量
  418. if (goodsId != null && goodsNums != null && goodsId.contains(item.getMaterialInfoGoodsId())) {
  419. int goodsIndex = goodsId.indexOf(item.getMaterialInfoGoodsId());
  420. item.setNowGoodsNum(Integer.parseInt(goodsNums.get(goodsIndex)));
  421. } else {
  422. item.setNowGoodsNum(0);
  423. }
  424. // 获取货品id并得到数据字典中的计量单位
  425. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, item.getMaterialInfoGoodsId());
  426. if (tbGoodsInfoEntity.getBaseUnit() != null) {
  427. // 根据货品的计量单位code到字典表中获取数据
  428. TSType tsType = this.systemService.getType(tbGoodsInfoEntity.getBaseUnit(), "metering_calcu_unit");
  429. item.setBaseUnit(tsType.getTypename());
  430. }
  431. }
  432. // add-刘梦祥-2021年12月15日17:18:15(根据最新需求,需要有删除操作。)(当到货表单已经初始化过goods_ids字段就会变成一个字符串)
  433. if (StringUtil.isNotEmpty(tbM.getGoodsIds())) {
  434. List<String> goodsIds = JSONObject.parseObject(tbM.getGoodsIds(), ArrayList.class);
  435. List<TBMaterialInfoEntity> newTbMList = new ArrayList<>();
  436. if (tbMList != null && tbMList.size() > 0) {
  437. for (TBMaterialInfoEntity item : tbMList) {
  438. if (goodsIds.contains(item.getMaterialInfoGoodsId())) {
  439. newTbMList.add(item);
  440. }
  441. }
  442. }
  443. request.setAttribute("TBMaterialInfoEntity", newTbMList);
  444. } else {
  445. request.setAttribute("TBMaterialInfoEntity", tbMList);
  446. }
  447. String isView = request.getParameter("viewFlag");
  448. request.setAttribute("viewFlag", isView);
  449. // 传参仓库信息
  450. WarehouseEntity warehouseEntity = this.systemService.getEntity(WarehouseEntity.class, materialWarehouseId);
  451. request.setAttribute("materialWarehouseId", warehouseEntity.getWarehouseName());
  452. // 传参备注信息
  453. request.setAttribute("remake", remake);
  454. request.setAttribute("ArrivalId", ArrivalId);
  455. request.setAttribute("materialId", materialId);
  456. request.setAttribute("reportStatus", tbM.getReportStatus());
  457. if (StringUtil.isNotEmpty(request.getParameter("load"))) {
  458. request.setAttribute("load", request.getParameter("load"));
  459. }
  460. }
  461. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialPurchaseOrder-update");
  462. }
  463. /**
  464. * 物料到货确认到货
  465. *
  466. * @return void
  467. * @author 刘梦祥
  468. * @Date 2021年12月14日15:25:18
  469. */
  470. @RequestMapping(params = {"reqortGoodsById"})
  471. @ResponseBody
  472. @Transactional(rollbackFor = Exception.class)
  473. public AjaxJson reqortGoodsById(TBMaterialArrivalEntity tbM, HttpServletRequest request) throws ParseException {
  474. AjaxJson j = new AjaxJson();
  475. try {
  476. HttpSession session = ContextHolderUtils.getSession();
  477. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  478. TBMaterialArrivalEntity tbMselect = this.systemService.getEntity(TBMaterialArrivalEntity.class, tbM.getId());
  479. if ("1".equals(tbMselect.getReportStatus())) {
  480. // 其他用户已经操作到货
  481. j.setMsg("物料到货失败,已经有其他用户操作到货!请刷新后重试!");
  482. j.setSuccess(false);
  483. return j;
  484. }
  485. if (tbMselect != null && StringUtil.isNotEmpty(tbMselect.getGoodsIds()) && StringUtil.isNotEmpty(tbMselect.getGoodsNums()) && StringUtil.isNotEmpty(tbMselect.getMaterialId())) {
  486. tbMselect.setReportStatus("1");
  487. this.systemService.saveOrUpdate(tbMselect);
  488. List<String> goodsId = JSONObject.parseObject(tbMselect.getGoodsIds(), ArrayList.class);
  489. List<String> goodsNums = JSONObject.parseObject(tbMselect.getGoodsNums(), ArrayList.class);
  490. for (int i = 0; i < goodsId.size(); i++) {
  491. DataGrid dataGrid = new DataGrid();
  492. // 采购单详情表
  493. TBMaterialInfoEntity tbMaterialInfo = new TBMaterialInfoEntity();
  494. tbMaterialInfo.setMaterialId(tbMselect.getMaterialId());
  495. tbMaterialInfo.setMaterialInfoGoodsId(goodsId.get(i));
  496. CriteriaQuery cq = new CriteriaQuery(TBMaterialInfoEntity.class, dataGrid);
  497. HqlGenerateUtil.installHql(cq, tbMaterialInfo);
  498. cq.add();
  499. // 查询采购单数据
  500. List<TBMaterialInfoEntity> tbMList = this.tBMaterialService.getListByCriteriaQuery(cq, true);
  501. if (tbMList.size() == 1) {
  502. tbMList.get(0).setMaterialInfoNoNum(tbMList.get(0).getMaterialInfoNoNum() - Integer.parseInt(goodsNums.get(i)));
  503. this.tBMaterialService.saveOrUpdate(tbMList.get(0));
  504. }
  505. // 写入数据到现存量表
  506. DataGrid dataGrid2 = new DataGrid();
  507. // 物料现存量表
  508. TBMaterialStockOnHandEntity tbMaterialStockOnHand = new TBMaterialStockOnHandEntity();
  509. tbMaterialStockOnHand.setGoodsId(goodsId.get(i));
  510. CriteriaQuery cq2 = new CriteriaQuery(TBMaterialStockOnHandEntity.class, dataGrid2);
  511. HqlGenerateUtil.installHql(cq2, tbMaterialStockOnHand);
  512. cq2.add();
  513. // 查询采购单数据
  514. List<TBMaterialStockOnHandEntity> tbMSOH = this.tbMaterialStockOnHandService.getListByCriteriaQuery(cq2, true);
  515. // 判断是否存在
  516. if (tbMSOH.size() == 1) {
  517. // 已存在该采购单的货品
  518. tbMSOH.get(0).setStockOnHand(tbMSOH.get(0).getStockOnHand() + Integer.parseInt(goodsNums.get(i)));
  519. tbMSOH.get(0).setUpdateTime(new Date());
  520. tbMSOH.get(0).setLastPutTime(tbMselect.getPutTime());
  521. tbMSOH.get(0).setUpdateUser(tuser.getId());
  522. this.tbMaterialStockOnHandService.saveOrUpdate(tbMSOH.get(0));
  523. } else {
  524. // 不存在就新增
  525. TBMaterialStockOnHandEntity tbMaterialStockOnHandEntity = new TBMaterialStockOnHandEntity();
  526. tbMaterialStockOnHandEntity.setId(UUID.randomUUID().toString());
  527. tbMaterialStockOnHandEntity.setGoodsId(goodsId.get(i));
  528. tbMaterialStockOnHandEntity.setMaterialDaptId(tbMselect.getMaterialDaptId());
  529. tbMaterialStockOnHandEntity.setMaterialWarehouseId(tbMselect.getMaterialWarehouseId());
  530. tbMaterialStockOnHandEntity.setStockOnHand(Integer.parseInt(goodsNums.get(i)));
  531. tbMaterialStockOnHandEntity.setLastPutTime(tbMselect.getPutTime());
  532. tbMaterialStockOnHandEntity.setCreateUser(tuser.getId());
  533. tbMaterialStockOnHandEntity.setCreateTime(new Date());
  534. this.tbMaterialStockOnHandService.save(tbMaterialStockOnHandEntity);
  535. }
  536. }
  537. } else {
  538. // 未编辑到货信息
  539. j.setMsg("物料到货失败,未编辑到货信息!请编辑后重试!");
  540. j.setSuccess(false);
  541. return j;
  542. }
  543. } catch (Exception e) {
  544. e.printStackTrace();
  545. throw new BusinessException(e.getMessage());
  546. }
  547. return j;
  548. }
  549. /**
  550. * 物料确认出货
  551. *
  552. * @return void
  553. * @author 刘梦祥
  554. * @Date 2021年12月14日20:24:49
  555. */
  556. @RequestMapping(params = {"reqortOutGoodsById"})
  557. @ResponseBody
  558. @Transactional(rollbackFor = Exception.class)
  559. public AjaxJson reqortOutGoodsById(TBMaterialDeliveryEntity tbMd, HttpServletRequest request) throws ParseException {
  560. AjaxJson j = new AjaxJson();
  561. try {
  562. boolean codeStatus = true;
  563. TBMaterialDeliveryEntity tbMselect = this.systemService.getEntity(TBMaterialDeliveryEntity.class, tbMd.getId());
  564. if ("1".equals(tbMselect.getReportStatus())) {
  565. j.setMsg("物料出货失败,已经有其他用户操作出货!请刷新后重试!");
  566. j.setSuccess(false);
  567. return j;
  568. }
  569. HttpSession session = ContextHolderUtils.getSession();
  570. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  571. // 得到到货日志表中对应的详细数据
  572. DataGrid dataGrid1 = new DataGrid();
  573. dataGrid1.setRows(99999);
  574. CriteriaQuery criteriaQuery = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid1);
  575. criteriaQuery.eq("deliveryId", tbMd.getId());
  576. criteriaQuery.add();
  577. List<TBMaterialDeliveryInfoEntity> tbMInfoselect = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  578. HashSet<String> goodsList = new HashSet<>();
  579. if (tbMInfoselect != null && tbMInfoselect.size() > 0) {
  580. for (TBMaterialDeliveryInfoEntity item : tbMInfoselect) {
  581. if (StringUtil.isNotEmpty(item.getReceiverCarId()) && StringUtil.isNotEmpty(item.getGoodsId())) {
  582. goodsList.add(item.getGoodsId());
  583. } else {
  584. codeStatus = false;
  585. if (StringUtil.isEmpty(item.getReceiverCarId())) {
  586. j.setMsg("物料出货失败,出货详情领料车信息异常!请检查后重试!");
  587. } else {
  588. j.setMsg("物料出货失败,出货详情货品信息异常!请检查后重试!");
  589. }
  590. j.setSuccess(false);
  591. return j;
  592. }
  593. }
  594. }
  595. // 根据货品id,仓库id,和领料科室id查询现存量数据(修改现存量的数据)
  596. DataGrid dataGrid = new DataGrid();
  597. CriteriaQuery cq = new CriteriaQuery(TBMaterialStockOnHandEntity.class, dataGrid);
  598. // 封裝仓库id查询条件
  599. cq.eq("materialWarehouseId", tbMselect.getMaterialWarehouseId());
  600. // 封装请购科室id查询条件
  601. cq.eq("materialDaptId", tbMselect.getMaterialDaptId());
  602. // 封装货品id
  603. cq.in("goodsId", goodsList.toArray());
  604. cq.add();
  605. this.tbMaterialStockOnHandService.getDataGridReturn(cq, true);
  606. // 查询得到所有的现存量数据
  607. List<TBMaterialStockOnHandEntity> list = dataGrid.getResults();
  608. // 修改物料现存量
  609. if (list != null && tbMInfoselect != null && tbMInfoselect.size() > 0) {
  610. // 首先遍历现存量数据
  611. for (TBMaterialStockOnHandEntity item : list) {
  612. // 其次遍历出货详细数据
  613. for (TBMaterialDeliveryInfoEntity infoItem : tbMInfoselect) {
  614. // 如果现存量数据中的货品id等于出货详细数据
  615. if (item.getGoodsId().equals(infoItem.getGoodsId())) {
  616. // 那么就更新现存量数据
  617. if (item.getStockOnHand() - infoItem.getOutNum() < 0) {
  618. // 抛出异常
  619. codeStatus = false;
  620. throw new Exception("物料出货失败,物料现存量不足!请检查后重试!");
  621. } else {
  622. item.setStockOnHand(item.getStockOnHand() - infoItem.getOutNum());
  623. // 更新最新出货时间
  624. item.setLastOutTime(tbMselect.getOutTime());
  625. }
  626. }
  627. }
  628. }
  629. for (TBMaterialStockOnHandEntity item : list) {
  630. // 执行更新
  631. this.tbMaterialStockOnHandService.saveOrUpdate(item);
  632. }
  633. if (codeStatus) {
  634. j.setMsg("确认出货成功");
  635. tbMselect.setReportStatus("1");
  636. tbMselect.setUpdateUser(tuser.getId());
  637. tbMselect.setUpdateTime(new Date());
  638. this.systemService.saveOrUpdate(tbMselect);
  639. } else {
  640. j.setSuccess(false);
  641. j.setMsg("物料出货失败,物料现存量不足!");
  642. return j;
  643. }
  644. } else {
  645. j.setSuccess(false);
  646. j.setMsg("现存量数据查询异常");
  647. throw new Exception("物料出货失败,现存量数据查询异常!请检查后重试!");
  648. }
  649. } catch (Exception e) {
  650. e.printStackTrace();
  651. j.setSuccess(false);
  652. j.setMsg(e.getMessage());
  653. return j;
  654. }
  655. return j;
  656. }
  657. /**
  658. * 修改物料到货信息
  659. *
  660. * @return void
  661. * @author 刘梦祥
  662. * @Date 2021年11月22日14:58:47
  663. */
  664. @RequestMapping(params = {"doUpdatePurchaseOrderPage"})
  665. @ResponseBody
  666. @Transactional(rollbackFor = Exception.class)
  667. public AjaxJson doUpdatePurchaseOrderPage(TBMaterialArrivalEntity tbM, HttpServletRequest request) throws ParseException {
  668. AjaxJson j = new AjaxJson();
  669. try {
  670. HttpSession session = ContextHolderUtils.getSession();
  671. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  672. // 采购单id
  673. String materialId = request.getParameter("materialId");
  674. // 获取到货表id
  675. String arrivalId = request.getParameter("ArrivalId");
  676. // 获取到货时间
  677. String putTime = request.getParameter("putTime");
  678. if (putTime.length() == 10) {
  679. putTime += " 00:00:00";
  680. }
  681. // 获取到货备注
  682. String ArrivalIdRemake = request.getParameter("ArrivalIdRemake");
  683. String message = "修改成功";
  684. j.setMsg(message);
  685. // 写入数据到到货表
  686. TBMaterialArrivalEntity tbMselect = this.systemService.getEntity(TBMaterialArrivalEntity.class, arrivalId);
  687. if ("1".equals(tbMselect.getReportStatus())) {
  688. j.setSuccess(false);
  689. j.setMsg("表单已被提交,请刷新后重试!");
  690. return j;
  691. } else {
  692. // 获取采购单关联货品id
  693. Map<String, String[]> parameterMap = request.getParameterMap();
  694. String[] goodsId = parameterMap.get("materialInfoGoodsId");
  695. // 获取当次到货数量
  696. String[] goodsNums = parameterMap.get("nowGoodsNum");
  697. tbMselect.setRemake(ArrivalIdRemake);
  698. Date date = simpleDateFormat.parse(putTime);
  699. tbMselect.setMaterialId(materialId);
  700. tbMselect.setPutTime(date);
  701. tbMselect.setReportStatus("0");
  702. tbMselect.setUpdateUser(tuser.getId());
  703. tbMselect.setUpdateTime(new Date());
  704. tbMselect.setGoodsIds(JSONObject.toJSONString(goodsId));
  705. tbMselect.setGoodsNums(JSONObject.toJSONString(goodsNums));
  706. this.tbMaterialArrivalService.saveOrUpdate(tbMselect);
  707. return j;
  708. }
  709. } catch (Exception e) {
  710. e.printStackTrace();
  711. throw new BusinessException(e.getMessage());
  712. }
  713. }
  714. /**
  715. * 添加或修改物料出货信息
  716. *
  717. * @return void
  718. * @author 刘梦祥
  719. * @Date 2021年11月24日10:27:00
  720. */
  721. @RequestMapping(params = {"doUpdateDelivery"})
  722. @ResponseBody
  723. @Transactional(rollbackFor = Exception.class)
  724. public AjaxJson doUpdateDelivery(TBMaterialDeliveryEntity tbmd, HttpServletRequest request) throws ParseException {
  725. AjaxJson j = new AjaxJson();
  726. try {
  727. HttpSession session = ContextHolderUtils.getSession();
  728. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  729. // 检查是否存在出货id
  730. String TBNDId = tbmd.getId();
  731. // 获取操作人id
  732. String createOrUpdateUserId = tuser.getId();
  733. // 获取出货时间
  734. String outTime = request.getParameter("outTime");
  735. if (outTime.length() == 10) {
  736. outTime += " 00:00:00";
  737. }
  738. tbmd.setOutTime(simpleDateFormat.parse(outTime));
  739. // 获取操作时间
  740. Date createOrUpdateTime = new Date();
  741. // 如果存在出货详情表id(即为编辑操作)
  742. if (StringUtil.isNotEmpty(TBNDId)) {
  743. // 首先根据出货id获取出货信息
  744. TBMaterialDeliveryEntity tbMaterialDelivery = this.systemService.getEntity(TBMaterialDeliveryEntity.class, TBNDId);
  745. tbMaterialDelivery.setUpdateUser(createOrUpdateUserId);
  746. tbMaterialDelivery.setUpdateTime(createOrUpdateTime);
  747. tbMaterialDelivery.setRemake(tbmd.getRemake());
  748. tbMaterialDelivery.setOutTime(tbmd.getOutTime());
  749. // 更新物料出货表数据
  750. this.tbMaterialDeliveryService.saveOrUpdate(tbMaterialDelivery);
  751. // 首先根据出货id获取出货详情信息
  752. DataGrid dataGrid = new DataGrid();
  753. dataGrid.setRows(99999);
  754. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  755. // 封裝出货id查询条件
  756. cq.eq("deliveryId", TBNDId);
  757. cq.add();
  758. this.tbMaterialDeliveryInfoService.getDataGridReturn(cq, true);
  759. // 查询得到所有的现存量数据
  760. List<TBMaterialDeliveryInfoEntity> list = dataGrid.getResults();
  761. Map<String, String[]> requestMap = request.getParameterMap();
  762. if (requestMap.containsKey("infoId")) {
  763. // 得到form表单详细的物料出货详细日志id列表
  764. String[] infoIds = requestMap.get("infoId");
  765. // 先执行删除操作
  766. for (TBMaterialDeliveryInfoEntity tbIteminfo : list) {
  767. // 如果前端返回的form表单中的物料出货日志id不存在数据库中的物料出货的id,就执行删除操作
  768. if (!Arrays.toString(infoIds).contains(tbIteminfo.getId())) {
  769. this.systemService.deleteEntityById(TBMaterialDeliveryInfoEntity.class, tbIteminfo.getId());
  770. }
  771. }
  772. // 执行新增或者更新操作
  773. for (int i = 0; i < infoIds.length; i++) {
  774. TBMaterialDeliveryInfoEntity tbMaterialDeliveryInfo = new TBMaterialDeliveryInfoEntity();
  775. String infoid = infoIds[i];
  776. String deliveryId = TBNDId;
  777. String goodsId = requestMap.get("goodsId")[i];
  778. String receiverCarId = requestMap.get("receiverCarId")[i];
  779. Integer outNum = Integer.parseInt(requestMap.get("outNum")[i]);
  780. String remake = requestMap.get("materialInfoRemarks")[i];
  781. if ("".equals(infoid)) {
  782. // 新增操作
  783. tbMaterialDeliveryInfo.setId(UUID.randomUUID().toString());
  784. tbMaterialDeliveryInfo.setDeliveryId(deliveryId);
  785. tbMaterialDeliveryInfo.setCreateUser(createOrUpdateUserId);
  786. tbMaterialDeliveryInfo.setCreateTime(createOrUpdateTime);
  787. tbMaterialDeliveryInfo.setGoodsId(goodsId);
  788. tbMaterialDeliveryInfo.setReceiverCarId(receiverCarId);
  789. tbMaterialDeliveryInfo.setOutNum(outNum);
  790. tbMaterialDeliveryInfo.setRemake(remake);
  791. } else {
  792. tbMaterialDeliveryInfo = this.systemService.getEntity(TBMaterialDeliveryInfoEntity.class, infoid);
  793. tbMaterialDeliveryInfo.setGoodsId(goodsId);
  794. tbMaterialDeliveryInfo.setDeliveryId(deliveryId);
  795. tbMaterialDeliveryInfo.setReceiverCarId(receiverCarId);
  796. tbMaterialDeliveryInfo.setOutNum(outNum);
  797. tbMaterialDeliveryInfo.setRemake(remake);
  798. // 编辑操作
  799. tbMaterialDeliveryInfo.setUpdateUser(createOrUpdateUserId);
  800. tbMaterialDeliveryInfo.setUpdateTime(createOrUpdateTime);
  801. }
  802. this.tbMaterialDeliveryInfoService.saveOrUpdate(tbMaterialDeliveryInfo);
  803. j.setSuccess(true);
  804. j.setMsg("物料出货编辑成功!");
  805. }
  806. }
  807. } else {
  808. // 如果不存在出货详情表id(即为新增录入操作)
  809. String deliveryId = UUID.randomUUID().toString();
  810. tbmd.setId(deliveryId);
  811. tbmd.setCreateUser(createOrUpdateUserId);
  812. tbmd.setCreateTime(createOrUpdateTime);
  813. tbmd.setReportStatus("0");
  814. this.tbMaterialDeliveryService.save(tbmd);
  815. // 新建出货详情日志
  816. Map<String, String[]> requestMap = request.getParameterMap();
  817. if (requestMap.containsKey("infoId")) {
  818. // 得到form表单详细的物料出货详细日志id列表
  819. String[] infoIds = requestMap.get("infoId");
  820. // 执行新增或者更新操作
  821. for (int i = 0; i < infoIds.length; i++) {
  822. TBMaterialDeliveryInfoEntity tbMaterialDeliveryInfo = new TBMaterialDeliveryInfoEntity();
  823. String goodsId = requestMap.get("goodsId")[i];
  824. String receiverCarId = requestMap.get("receiverCarId")[i];
  825. Integer outNum = Integer.parseInt(requestMap.get("outNum")[i]);
  826. String remake = requestMap.get("materialInfoRemarks")[i];
  827. // 新增操作
  828. tbMaterialDeliveryInfo.setId(UUID.randomUUID().toString());
  829. tbMaterialDeliveryInfo.setCreateUser(createOrUpdateUserId);
  830. tbMaterialDeliveryInfo.setCreateTime(createOrUpdateTime);
  831. tbMaterialDeliveryInfo.setGoodsId(goodsId);
  832. tbMaterialDeliveryInfo.setReceiverCarId(receiverCarId);
  833. tbMaterialDeliveryInfo.setDeliveryId(deliveryId);
  834. tbMaterialDeliveryInfo.setOutNum(outNum);
  835. tbMaterialDeliveryInfo.setRemake(remake);
  836. this.tbMaterialDeliveryInfoService.saveOrUpdate(tbMaterialDeliveryInfo);
  837. }
  838. }
  839. j.setSuccess(true);
  840. j.setMsg("物料出货录入成功!");
  841. }
  842. return j;
  843. } catch (Exception e) {
  844. e.printStackTrace();
  845. throw new BusinessException(e.getMessage());
  846. }
  847. }
  848. /**
  849. * 物料到货页面选择采购单
  850. *
  851. * @param request
  852. * @author 刘梦祥
  853. * @Date 2021年11月21日21:33:34
  854. */
  855. @RequestMapping(params = {"doUpdateArrival"})
  856. @Transactional(rollbackFor = Exception.class)
  857. public AjaxJson doUpdateArrival(TBMaterialArrivalEntity tbM, HttpServletRequest request) {
  858. HttpSession session = ContextHolderUtils.getSession();
  859. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  860. //物料到货表添加修改记录
  861. tbM.setProcurementTime(new Date());
  862. tbM.setReportStatus("1");
  863. tbM.setUpdateUser(tuser.getId());
  864. //现存量表数据根据货品采购单id和货品写入或修改现存量(物料现存量的物品总量需要统计所有货品的现存量)
  865. AjaxJson j = new AjaxJson();
  866. try {
  867. this.tbMaterialArrivalService.saveOrUpdate(tbM);
  868. String message = "修改成功";
  869. j.setMsg(message);
  870. return j;
  871. } catch (Exception e) {
  872. e.printStackTrace();
  873. throw new BusinessException(e.getMessage());
  874. }
  875. }
  876. @RequestMapping(params = {"goAddPurchaseOrderPage"})
  877. public ModelAndView goAddPurchaseOrderPage(HttpServletRequest request) {
  878. if (StringUtil.isNotEmpty(request.getParameter("datagridType"))) {
  879. request.setAttribute("datagridType", request.getParameter("datagridType"));
  880. }
  881. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialPurchaseOrder-add");
  882. }
  883. /**
  884. * 物料出货页面数据请求
  885. *
  886. * @param tbMaterialDeliveryEntity
  887. * @param request
  888. * @param response
  889. * @param dataGrid
  890. * @author 刘梦祥
  891. * @Date 2021年11月23日17:10:34
  892. */
  893. @RequestMapping(params = {"materialDeliveryDatagrid"})
  894. public void materialDeliveryDatagrid(TBMaterialDeliveryEntity tbMaterialDeliveryEntity, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  895. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryEntity.class, dataGrid);
  896. HqlGenerateUtil.installHql(cq, tbMaterialDeliveryEntity, request.getParameterMap());
  897. cq.add();
  898. this.tbMaterialDeliveryService.getDataGridReturn(cq, true);
  899. List<TBMaterialEntity> list = dataGrid.getResults();
  900. dataGrid.setResults(list);
  901. TagUtil.datagrid(response, dataGrid);
  902. }
  903. /**
  904. * 打开所有的物料现存量数据页面
  905. *
  906. * @author 刘梦祥
  907. * @Date 2021年11月23日17:10:30
  908. */
  909. @RequestMapping(params = {"goAddDelivery"})
  910. public ModelAndView goAddDelivery() {
  911. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDeliveryOpenSOHL-window");
  912. }
  913. /**
  914. * 根据指定的货品id,仓库id,请购科室id打开物料出货编辑页面
  915. *
  916. * @param request
  917. * @param dataGrid
  918. * @author 刘梦祥
  919. * @Date 2021年11月23日21:19:14
  920. */
  921. @RequestMapping(params = {"goAddDeliveryInfo"})
  922. public ModelAndView goAddDeliveryInfo(HttpServletRequest request, DataGrid dataGrid) throws ParseException {
  923. // 获取页面类型
  924. String viewFlag = request.getParameter("viewFlag");
  925. // 获取货品id
  926. String goodsId = request.getParameter("goodsId");
  927. // 获取请购科室id
  928. String materialDaptId = request.getParameter("materialDaptId");
  929. // 获取仓库id
  930. String materialWarehouseId = request.getParameter("materialWarehouseId");
  931. CriteriaQuery cq = new CriteriaQuery(TBMaterialStockOnHandEntity.class, dataGrid);
  932. // 封裝仓库id查询条件
  933. if (materialWarehouseId != null && !"".equals(materialWarehouseId)) {
  934. cq.eq("materialWarehouseId", materialWarehouseId);
  935. }
  936. // 封装请购科室id查询条件
  937. if (materialDaptId != null && !"".equals(materialDaptId)) {
  938. cq.eq("materialDaptId", materialDaptId);
  939. }
  940. // 封装货品id
  941. if (goodsId != null && !"".equals(goodsId)) {
  942. cq.eq("goodsId", goodsId);
  943. }
  944. cq.add();
  945. this.tbMaterialStockOnHandService.getDataGridReturn(cq, true);
  946. // 查询得到所有的现存量数据
  947. List<TBMaterialStockOnHandEntity> list = dataGrid.getResults();
  948. List<TBMaterialStockOnHandEntity> resList = new ArrayList<>();
  949. // 将货品id一样的现存量数据现存量累加<货品id,累计现存量>
  950. Map<String, Map<String, Object>> resMap = new HashMap<>();
  951. if (list.size() > 0) {
  952. for (TBMaterialStockOnHandEntity tbmSOHItem : list) {
  953. String mapKeys = tbmSOHItem.getGoodsId() + "," + tbmSOHItem.getMaterialDaptId() + "," + tbmSOHItem.getMaterialWarehouseId();
  954. Map<String, Object> objectMap = new HashMap<>();
  955. objectMap.put("soh", tbmSOHItem.getStockOnHand());
  956. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  957. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  958. objectMap.put("materialDaptId", tbmSOHItem.getMaterialDaptId());
  959. objectMap.put("materialWarehouseId", tbmSOHItem.getMaterialWarehouseId());
  960. if (resMap.containsKey(mapKeys)) {
  961. // 存在该货品id
  962. objectMap.put("soh", Integer.parseInt(String.valueOf(resMap.get(mapKeys).get("soh"))) + tbmSOHItem.getStockOnHand());
  963. // 如果入库时间<存在的入库时间就更新一下这个入库时间(取小值)
  964. if (tbmSOHItem.getLastPutTime() != null) {
  965. if (tbmSOHItem.getLastPutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("putTime")))) < 0) {
  966. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  967. }
  968. }
  969. // 如果出库时间>存在的出库时间就更新一下这个出库时间(取大值)
  970. if (tbmSOHItem.getLastOutTime() != null && resMap.get(mapKeys).get("outTime") != null) {
  971. if (tbmSOHItem.getLastOutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("outTime")))) > 0) {
  972. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  973. }
  974. } else {
  975. objectMap.put("outTime", null);
  976. }
  977. }
  978. // 更新resMap对象
  979. resMap.put(mapKeys, objectMap);
  980. }
  981. }
  982. String returnPutTime = null;
  983. if (resMap.size() > 0) {
  984. for (String mapKeys : resMap.keySet()) {
  985. // 首先根据货品id获取到一个大集合
  986. Map<String, Object> objectMap = resMap.get(mapKeys);
  987. String[] kesList = mapKeys.split(",");
  988. String goodsid = kesList[0];
  989. // 根据货品id查询得到该货品的详细信息
  990. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, goodsid);
  991. // 创建返回实体
  992. TBMaterialStockOnHandEntity resTbmItem = new TBMaterialStockOnHandEntity();
  993. resTbmItem.setGoodsId(goodsid);
  994. resTbmItem.setMaterialDaptId(String.valueOf(objectMap.get("materialDaptId")));
  995. resTbmItem.setMaterialWarehouseId(String.valueOf(objectMap.get("materialWarehouseId")));
  996. resTbmItem.setStockOnHand(Integer.parseInt(String.valueOf(objectMap.get("soh"))));
  997. returnPutTime = String.valueOf(objectMap.get("putTime"));
  998. resTbmItem.setLastPutTime(objectMap.get("putTime") != null ? simpleDateFormat.parse(String.valueOf(objectMap.get("putTime"))) : null);
  999. resTbmItem.setLastOutTime(objectMap.get("outTime") != null ? simpleDateFormat.parse(String.valueOf(objectMap.get("outTime"))) : null);
  1000. resTbmItem.setGoodsName(tbGoodsInfoEntity.getGoodsName());
  1001. resTbmItem.setSpecification(tbGoodsInfoEntity.getSpecification());
  1002. resTbmItem.setBaseUnit(tbGoodsInfoEntity.getBaseUnit());
  1003. resTbmItem.setSalesUnit(tbGoodsInfoEntity.getSalesUnit());
  1004. // 整理的数据写入返回实体集合
  1005. resList.add(resTbmItem);
  1006. }
  1007. }
  1008. if (materialWarehouseId != null) {
  1009. WarehouseEntity warehouseEntity = this.systemService.getEntity(WarehouseEntity.class, materialWarehouseId);
  1010. request.setAttribute("materialWarehouseName", warehouseEntity.getWarehouseName());
  1011. }
  1012. // 添加返回仓库名称
  1013. request.setAttribute("materialWarehouseId", materialWarehouseId);
  1014. request.setAttribute("TBMaterialStockOnHandList", resList);
  1015. request.setAttribute("viewFlag", viewFlag);
  1016. request.setAttribute("putTime", returnPutTime);
  1017. request.setAttribute("materialDaptId", materialDaptId);
  1018. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDelivery-update");
  1019. }
  1020. /**
  1021. * 根据指定的货品id,仓库id,请购科室id打开物料出货编辑页面
  1022. *
  1023. * @param request
  1024. * @author 刘梦祥
  1025. * @Date 2021年11月24日15:20:35
  1026. */
  1027. @RequestMapping(params = {"goUpdateDelivery"})
  1028. public ModelAndView goUpdateDelivery(HttpServletRequest request) throws ParseException {
  1029. // 获取页面类型
  1030. String viewFlag = request.getParameter("viewFlag");
  1031. // 获取出货id
  1032. String deliveryId = request.getParameter("id");
  1033. // 根据出货id获取出货信息
  1034. TBMaterialDeliveryEntity tbMaterialDelivery = this.tbMaterialDeliveryService.getEntity(TBMaterialDeliveryEntity.class, deliveryId);
  1035. if (tbMaterialDelivery != null) {
  1036. // 获取请购科室id
  1037. String materialDaptId = tbMaterialDelivery.getMaterialDaptId();
  1038. // 获取仓库id
  1039. String materialWarehouseId = tbMaterialDelivery.getMaterialWarehouseId();
  1040. // 查询出货日志详细信息
  1041. DataGrid dataGrids = new DataGrid();
  1042. CriteriaQuery cqs = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrids);
  1043. // 封裝仓库id查询条件
  1044. cqs.eq("deliveryId", deliveryId);
  1045. cqs.add();
  1046. this.tbMaterialDeliveryInfoService.getDataGridReturn(cqs, true);
  1047. // 得到详细出货日志信息
  1048. List<TBMaterialDeliveryInfoEntity> lists = dataGrids.getResults();
  1049. // 根据货品id,仓库id,请购科室id查询数据
  1050. if (lists != null) {
  1051. // 统计现存量结束
  1052. String returnPutTime = null;
  1053. String returnOutTime = null;
  1054. List<TBMaterialStockOnHandEntity> resList = new ArrayList<>();
  1055. for (TBMaterialDeliveryInfoEntity tbmdinfo : lists) {
  1056. String goodsId = tbmdinfo.getGoodsId();
  1057. DataGrid dataGrid = new DataGrid();
  1058. CriteriaQuery cq = new CriteriaQuery(TBMaterialStockOnHandEntity.class, dataGrid);
  1059. // 封裝仓库id查询条件
  1060. if (materialWarehouseId != null && !"".equals(materialWarehouseId)) {
  1061. cq.eq("materialWarehouseId", materialWarehouseId);
  1062. }
  1063. // 封装请购科室id查询条件
  1064. if (materialDaptId != null && !"".equals(materialDaptId)) {
  1065. cq.eq("materialDaptId", materialDaptId);
  1066. }
  1067. // 封装货品id
  1068. if (goodsId != null && !"".equals(goodsId)) {
  1069. cq.eq("goodsId", goodsId);
  1070. }
  1071. cq.add();
  1072. this.tbMaterialStockOnHandService.getDataGridReturn(cq, true);
  1073. // 查询得到所有的现存量数据
  1074. List<TBMaterialStockOnHandEntity> list = dataGrid.getResults();
  1075. // 将货品id一样的现存量数据现存量累加<货品id,累计现存量>
  1076. Map<String, Map<String, Object>> resMap = new HashMap<>();
  1077. if (list.size() > 0) {
  1078. for (TBMaterialStockOnHandEntity tbmSOHItem : list) {
  1079. String mapKeys = tbmSOHItem.getGoodsId() + "," + tbmSOHItem.getMaterialDaptId() + "," + tbmSOHItem.getMaterialWarehouseId();
  1080. Map<String, Object> objectMap = new HashMap<>();
  1081. objectMap.put("soh", tbmSOHItem.getStockOnHand());
  1082. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  1083. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  1084. objectMap.put("materialDaptId", tbmSOHItem.getMaterialDaptId());
  1085. objectMap.put("materialWarehouseId", tbmSOHItem.getMaterialWarehouseId());
  1086. if (resMap.containsKey(mapKeys)) {
  1087. // 存在该货品id
  1088. objectMap.put("soh", Integer.parseInt(String.valueOf(resMap.get(mapKeys).get("soh"))) + tbmSOHItem.getStockOnHand());
  1089. // 如果入库时间<存在的入库时间就更新一下这个入库时间(取大值)
  1090. if (tbmSOHItem.getLastPutTime() != null) {
  1091. if (tbmSOHItem.getLastPutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("putTime")))) > 0) {
  1092. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  1093. }
  1094. }
  1095. // 如果出库时间>存在的出库时间就更新一下这个出库时间(取大值)
  1096. if (tbmSOHItem.getLastOutTime() != null && resMap.get(mapKeys).get("outTime") != null) {
  1097. if (tbmSOHItem.getLastOutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("outTime")))) > 0) {
  1098. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  1099. }
  1100. } else {
  1101. objectMap.put("outTime", null);
  1102. }
  1103. }
  1104. // 更新resMap对象
  1105. resMap.put(mapKeys, objectMap);
  1106. }
  1107. }
  1108. if (resMap.size() > 0) {
  1109. for (String mapKeys : resMap.keySet()) {
  1110. // 首先根据货品id获取到一个大集合
  1111. Map<String, Object> objectMap = resMap.get(mapKeys);
  1112. String[] kesList = mapKeys.split(",");
  1113. String goodsid = kesList[0];
  1114. // 根据货品id查询得到该货品的详细信息
  1115. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, goodsid);
  1116. // 创建返回实体
  1117. TBMaterialStockOnHandEntity resTbmItem = new TBMaterialStockOnHandEntity();
  1118. // 写入出货详细数据
  1119. resTbmItem.setId(tbmdinfo.getId());
  1120. resTbmItem.setReceiverCarId(tbmdinfo.getReceiverCarId());
  1121. if (tbmdinfo.getReceiverCarId() != null) {
  1122. CarEntity tbCar = this.systemService.getEntity(CarEntity.class, tbmdinfo.getReceiverCarId());
  1123. if(tbCar != null){
  1124. resTbmItem.setReceiverCarName(tbCar.getPlate());
  1125. }else{
  1126. resTbmItem.setReceiverCarName("");
  1127. }
  1128. }
  1129. resTbmItem.setOutNum(tbmdinfo.getOutNum());
  1130. resTbmItem.setMaterialInfoRemarks(tbmdinfo.getRemake());
  1131. // 写入货品信息
  1132. resTbmItem.setGoodsId(goodsid);
  1133. resTbmItem.setMaterialDaptId(String.valueOf(objectMap.get("materialDaptId") == null ? null : objectMap.get("materialDaptId")));
  1134. resTbmItem.setMaterialWarehouseId(String.valueOf(objectMap.get("materialWarehouseId") == null ? null : objectMap.get("materialWarehouseId")));
  1135. resTbmItem.setStockOnHand(Integer.parseInt(String.valueOf(objectMap.get("soh") == null ? null : objectMap.get("soh") )));
  1136. returnPutTime = String.valueOf(objectMap.get("putTime") == null ? "" : objectMap.get("putTime"));
  1137. if(tbMaterialDelivery.getOutTime() != null){
  1138. returnOutTime = simpleDateFormat.format(tbMaterialDelivery.getOutTime());
  1139. }
  1140. if(tbMaterialDelivery.getOutTime() != null){
  1141. resTbmItem.setLastOutTime(tbMaterialDelivery.getOutTime());
  1142. }
  1143. resTbmItem.setGoodsName(tbGoodsInfoEntity.getGoodsName());
  1144. resTbmItem.setSpecification(tbGoodsInfoEntity.getSpecification());
  1145. resTbmItem.setBaseUnit(tbGoodsInfoEntity.getBaseUnit());
  1146. resTbmItem.setSalesUnit(tbGoodsInfoEntity.getSalesUnit());
  1147. // 整理的数据写入返回实体集合
  1148. resList.add(resTbmItem);
  1149. }
  1150. }
  1151. if (materialWarehouseId != null) {
  1152. WarehouseEntity warehouseEntity = this.systemService.getEntity(WarehouseEntity.class, materialWarehouseId);
  1153. request.setAttribute("materialWarehouseName", warehouseEntity.getWarehouseName());
  1154. }
  1155. }
  1156. // 添加返回仓库名称
  1157. request.setAttribute("materialWarehouseId", materialWarehouseId);
  1158. request.setAttribute("TBMaterialStockOnHandList", resList);
  1159. request.setAttribute("viewFlag", viewFlag);
  1160. request.setAttribute("putTime", returnPutTime);
  1161. request.setAttribute("materialDaptId", materialDaptId);
  1162. request.setAttribute("remake", tbMaterialDelivery.getRemake());
  1163. // 返回主要信息(出货日志id、出库时间)
  1164. request.setAttribute("id", deliveryId);
  1165. request.setAttribute("outTime", returnOutTime);
  1166. }
  1167. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDelivery-update");
  1168. } else {
  1169. return null;
  1170. }
  1171. }
  1172. /**
  1173. * 根据指定的出货id打开物料出货编辑页面
  1174. *
  1175. * @param request
  1176. * @author 刘梦祥
  1177. * @Date 2021年11月24日13:41:26
  1178. */
  1179. @RequestMapping(params = {"goUpdateDeliveryInfo"})
  1180. public ModelAndView goUpdateDeliveryInfo(HttpServletRequest request) throws ParseException {
  1181. // 获取页面类型
  1182. String viewFlag = request.getParameter("viewFlag");
  1183. String id = request.getParameter("id");
  1184. // 根据id获取物料出货信息
  1185. TBMaterialDeliveryEntity tbMaterialDeliveryEntity = this.tbMaterialDeliveryService.getEntity(TBMaterialDeliveryEntity.class, id);
  1186. if (tbMaterialDeliveryEntity != null) {
  1187. // 根据物料出货id查询物料出货详情信息
  1188. DataGrid dataGrid = new DataGrid();
  1189. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  1190. }
  1191. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDelivery-update");
  1192. }
  1193. /**
  1194. * 物料现存量页面数据请求
  1195. *
  1196. * @param tbMaterialStockOnHandEntity
  1197. * @param request
  1198. * @param response
  1199. * @param dataGrid
  1200. * @author 刘梦祥
  1201. * @Date 2021年11月18日14:29:44
  1202. */
  1203. @RequestMapping(params = {"materialStockOnHandDatagrid"})
  1204. public void materialStockOnHandDatagrid(TBMaterialStockOnHandEntity tbMaterialStockOnHandEntity, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) throws ParseException {
  1205. // 根据货品名称进行模糊查询得到货品id
  1206. List<TBGoodsInfoEntity> tbGoodsInfoEntityList = new ArrayList<>();
  1207. boolean goodsNameQueryState = false;
  1208. if (tbMaterialStockOnHandEntity.getGoodsName() != null && !"".equals(tbMaterialStockOnHandEntity.getGoodsName())) {
  1209. goodsNameQueryState = true;
  1210. DataGrid dataGridGoods = new DataGrid();
  1211. dataGridGoods.setRows(99999);
  1212. CriteriaQuery cqgoods = new CriteriaQuery(TBGoodsInfoEntity.class, dataGridGoods);
  1213. cqgoods.like("goodsName", "%" + tbMaterialStockOnHandEntity.getGoodsName() + "%");
  1214. cqgoods.add();
  1215. tbGoodsInfoEntityList = this.tBGoodsInfoService.getListByCriteriaQuery(cqgoods, true);
  1216. }
  1217. CriteriaQuery cq = new CriteriaQuery(TBMaterialStockOnHandEntity.class, dataGrid);
  1218. // 封裝仓库id查询条件
  1219. if (tbMaterialStockOnHandEntity.getMaterialWarehouseId() != null && !"".equals(tbMaterialStockOnHandEntity.getMaterialWarehouseId())) {
  1220. cq.eq("materialWarehouseId", tbMaterialStockOnHandEntity.getMaterialWarehouseId());
  1221. }
  1222. // 封装请购科室id查询条件
  1223. if (tbMaterialStockOnHandEntity.getMaterialDaptId() != null && !"".equals(tbMaterialStockOnHandEntity.getMaterialDaptId())) {
  1224. cq.eq("materialDaptId", tbMaterialStockOnHandEntity.getMaterialDaptId());
  1225. }
  1226. List<TBMaterialStockOnHandEntity> list = new ArrayList<>();
  1227. if (goodsNameQueryState) {
  1228. if(tbGoodsInfoEntityList.size() > 0){
  1229. List<String> list2 = new ArrayList<>();
  1230. for (TBGoodsInfoEntity tbGoodsInfoEntityItem : tbGoodsInfoEntityList) {
  1231. list2.add(tbGoodsInfoEntityItem.getId());
  1232. }
  1233. String[] goodsId = list2.toArray(new String[list2.size()]);
  1234. cq.in("goodsId", goodsId);
  1235. cq.add();
  1236. // 查询得到所有的现存量数据
  1237. this.tbMaterialStockOnHandService.getDataGridReturn(cq, true);
  1238. list = dataGrid.getResults();
  1239. }
  1240. }else{
  1241. cq.add();
  1242. // 查询得到所有的现存量数据
  1243. this.tbMaterialStockOnHandService.getDataGridReturn(cq, true);
  1244. list = dataGrid.getResults();
  1245. }
  1246. List<TBMaterialStockOnHandEntity> resList = new ArrayList<>();
  1247. // 将货品id一样的现存量数据现存量累加<货品id,累计现存量>
  1248. Map<String, Map<String, Object>> resMap = new HashMap<>();
  1249. if (list.size() > 0) {
  1250. for (TBMaterialStockOnHandEntity tbmSOHItem : list) {
  1251. String mapKeys = tbmSOHItem.getGoodsId() + "," + tbmSOHItem.getMaterialDaptId() + "," + tbmSOHItem.getMaterialWarehouseId();
  1252. Map<String, Object> objectMap = new HashMap<>();
  1253. objectMap.put("soh", tbmSOHItem.getStockOnHand());
  1254. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  1255. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  1256. objectMap.put("materialDaptId", tbmSOHItem.getMaterialDaptId());
  1257. objectMap.put("materialWarehouseId", tbmSOHItem.getMaterialWarehouseId());
  1258. if (resMap.containsKey(mapKeys)) {
  1259. // 存在该货品id
  1260. objectMap.put("soh", Integer.parseInt(String.valueOf(resMap.get(mapKeys).get("soh"))) + tbmSOHItem.getStockOnHand());
  1261. // 如果入库时间<存在的入库时间就更新一下这个入库时间(取小值)
  1262. if (tbmSOHItem.getLastPutTime() != null) {
  1263. if (tbmSOHItem.getLastPutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("putTime")))) < 0) {
  1264. objectMap.put("putTime", tbmSOHItem.getLastPutTime());
  1265. }
  1266. }
  1267. // 如果出库时间>存在的出库时间就更新一下这个出库时间(取大值)
  1268. if (tbmSOHItem.getLastOutTime() != null && resMap.get(mapKeys).get("outTime") != null) {
  1269. if (tbmSOHItem.getLastOutTime().compareTo(simpleDateFormat.parse(String.valueOf(resMap.get(mapKeys).get("outTime")))) > 0) {
  1270. objectMap.put("outTime", tbmSOHItem.getLastOutTime());
  1271. }
  1272. } else {
  1273. objectMap.put("outTime", null);
  1274. }
  1275. }
  1276. // 更新resMap对象
  1277. resMap.put(mapKeys, objectMap);
  1278. }
  1279. }
  1280. if (resMap.size() > 0) {
  1281. for (String mapKeys : resMap.keySet()) {
  1282. // 首先根据货品id获取到一个大集合
  1283. Map<String, Object> objectMap = resMap.get(mapKeys);
  1284. String[] kesList = mapKeys.split(",");
  1285. String goodsid = kesList[0];
  1286. // 根据货品id查询得到该货品的详细信息
  1287. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, goodsid);
  1288. // 创建返回实体
  1289. TBMaterialStockOnHandEntity resTbmItem = new TBMaterialStockOnHandEntity();
  1290. resTbmItem.setId(UUID.randomUUID().toString());
  1291. resTbmItem.setGoodsId(goodsid);
  1292. resTbmItem.setMaterialDaptId(String.valueOf(objectMap.get("materialDaptId")));
  1293. resTbmItem.setMaterialWarehouseId(String.valueOf(objectMap.get("materialWarehouseId")));
  1294. resTbmItem.setStockOnHand(Integer.parseInt(String.valueOf(objectMap.get("soh"))));
  1295. resTbmItem.setLastPutTime(objectMap.get("putTime") != null ? simpleDateFormat.parse(String.valueOf(objectMap.get("putTime"))) : null);
  1296. resTbmItem.setLastOutTime(objectMap.get("outTime") != null ? simpleDateFormat.parse(String.valueOf(objectMap.get("outTime"))) : null);
  1297. resTbmItem.setGoodsName(tbGoodsInfoEntity.getGoodsName());
  1298. resTbmItem.setSpecification(tbGoodsInfoEntity.getSpecification());
  1299. resTbmItem.setBaseUnit(tbGoodsInfoEntity.getBaseUnit());
  1300. resTbmItem.setSalesUnit(tbGoodsInfoEntity.getSalesUnit());
  1301. resList.add(resTbmItem);
  1302. // 整理的数据写入返回实体集合delete-刘梦祥-2021年12月17日16:28:10(根据需求:物料现存量为0的也要显示)
  1303. /*if (resTbmItem.getStockOnHand() != null && resTbmItem.getStockOnHand() > 0) {
  1304. resList.add(resTbmItem);
  1305. }*/
  1306. }
  1307. }
  1308. dataGrid.setResults(resList);
  1309. dataGrid.setTotal(resList.size());
  1310. //审批权限查询end
  1311. TagUtil.datagrid(response, dataGrid);
  1312. }
  1313. @RequestMapping(params = {"selectWarehouse"})
  1314. public ModelAndView goWarehouse(WarehouseEntity warehouse, HttpServletRequest req) {
  1315. return new ModelAndView("cn/com/lzt/sign/tbmaterial/warehouseList");
  1316. }
  1317. /**
  1318. * 仓库管理初始化查询
  1319. *
  1320. * @param warehouse
  1321. * @param request
  1322. * @param response
  1323. * @param dataGrid
  1324. */
  1325. @RequestMapping(params = {"warehouseInfo"})
  1326. public void warehouseInfo(WarehouseEntity warehouse, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  1327. CriteriaQuery cq = new CriteriaQuery(WarehouseEntity.class, dataGrid);
  1328. warehouse.setStatus("0");
  1329. warehouse.setDeleteFlag("0");
  1330. // add-刘梦祥-2021年12月2日11:02:02-(根据用户科室添加条件)
  1331. HttpSession session = ContextHolderUtils.getSession();
  1332. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1333. warehouse.setProjectId(tuser.getDepartid());
  1334. HqlGenerateUtil.installHql(cq, warehouse, request.getParameterMap());
  1335. cq.add();
  1336. this.warehouseService.getDataGridReturn(cq, true);
  1337. Collections.sort(dataGrid.getResults());
  1338. TagUtil.datagrid(response, dataGrid);
  1339. }
  1340. // 打开仓库档案页面
  1341. @RequestMapping(params = {"goAdd"})
  1342. public ModelAndView goAdd(HttpServletRequest request) {
  1343. // add-刘梦祥-2021年11月24日21:41:59-(打开仓库档案页面根据需求文档修改:自动获取经办人信息)
  1344. HttpSession session = ContextHolderUtils.getSession();
  1345. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1346. String materialDaptId = request.getParameter("materialDaptId");
  1347. String materialWarehouseId = request.getParameter("materialWarehouseId");
  1348. String materialWarehouse = request.getParameter("materialWarehouse");
  1349. String maintenanceStatus = request.getParameter("maintenanceStatus");
  1350. request.setAttribute("materialDaptId", materialDaptId);
  1351. request.setAttribute("materialWarehouseId", materialWarehouseId);
  1352. request.setAttribute("materialWarehouse", materialWarehouse);
  1353. request.setAttribute("maintenanceStatus", maintenanceStatus);
  1354. request.setAttribute("materialUsername", tuser.getId());
  1355. request.setAttribute("materialUserShowName", tuser.getRealName());
  1356. if (StringUtil.isNotEmpty(request.getParameter("maintenanceType"))) {
  1357. request.setAttribute("maintenanceType", request.getParameter("maintenanceType"));
  1358. }
  1359. if (StringUtil.isNotEmpty(request.getParameter("pageType"))) {
  1360. request.setAttribute("pageType", request.getParameter("pageType"));
  1361. }
  1362. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialList-add");
  1363. }
  1364. @RequestMapping(params = {"tBMaterialSonList"})
  1365. public ModelAndView tBMaterialSonList(HttpServletRequest request) {
  1366. String id0 = request.getParameter("materialId");
  1367. String viewFlag = request.getParameter("viewFlag");
  1368. String maintenanceStatus = request.getParameter("maintenanceStatus");
  1369. if (StringUtil.isNotEmpty(id0)) {
  1370. DataGrid dataGrid = new DataGrid();
  1371. CriteriaQuery cq = new CriteriaQuery(TBMaterialInfoEntity.class, dataGrid);
  1372. cq.eq("materialId", id0);
  1373. cq.add();
  1374. this.tBMaterialService.getDataGridReturn(cq, true);
  1375. List<TBMaterialInfoEntity> tbMaterialInfoEntityList = dataGrid.getResults();
  1376. List<DictEntity> dictEntities = this.systemService.queryDict("t_b_goods_category","category_code","category_name");
  1377. Map<String, String> dictEntitiesMap = dictEntities.stream().collect(Collectors.toMap(DictEntity::getTypecode, DictEntity::getTypename));
  1378. List<DictEntity> unitList = this.systemService.queryDict("","metering_calcu_unit","");
  1379. Map<String, String> unitListMap = unitList.stream().collect(Collectors.toMap(DictEntity::getTypecode, DictEntity::getTypename));
  1380. for (TBMaterialInfoEntity tbmItem : tbMaterialInfoEntityList) {
  1381. if (tbmItem.getMaterialInfoGoodsId() != null) {
  1382. // 首先获取货品信息
  1383. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, tbmItem.getMaterialInfoGoodsId());
  1384. if (tbGoodsInfoEntity != null) {
  1385. // 计量单位
  1386. tbmItem.setMaterialInfoModelShowName(unitListMap.getOrDefault(tbGoodsInfoEntity.getBaseUnit(),"未知货品单位"));
  1387. // 货品类型
  1388. tbmItem.setMaterialInfoGoodtypeShowName(dictEntitiesMap.getOrDefault(tbGoodsInfoEntity.getBelongCategory(),"未知货品类型"));
  1389. // 规格类型
  1390. tbmItem.setMaterialInfoMeasure(tbGoodsInfoEntity.getSpecification());
  1391. // 写入货品单价
  1392. tbmItem.setGoodsMoney(tbGoodsInfoEntity.getDefaultProvider());
  1393. // 请购货品总金额
  1394. tbmItem.setGoodsTotalMoney(String.valueOf(Double.parseDouble(tbGoodsInfoEntity.getDefaultProvider()) * tbmItem.getMaterialInfoNum()));
  1395. }
  1396. }
  1397. }
  1398. request.setAttribute("TBMaterialInfoList", dataGrid.getResults());
  1399. request.setAttribute("viewFlag", viewFlag);
  1400. request.setAttribute("maintenanceStatus", maintenanceStatus);
  1401. }
  1402. if (StringUtil.isNotEmpty(request.getParameter("pageType"))) {
  1403. request.setAttribute("pageType", request.getParameter("pageType"));
  1404. }
  1405. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialSonList");
  1406. }
  1407. /**
  1408. * 根据采购单id返回货品列表
  1409. *
  1410. * @return void
  1411. * @author 刘梦祥
  1412. * @Date 2021年11月21日14:20:06
  1413. */
  1414. @RequestMapping(params = {"tBMaterialSonByIdToList"})
  1415. public void tBMaterialSonByIdToList(HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  1416. String id0 = request.getParameter("materialId");
  1417. String viewFlag = request.getParameter("viewFlag");
  1418. if (StringUtil.isNotEmpty(id0)) {
  1419. CriteriaQuery cq = new CriteriaQuery(TBMaterialInfoEntity.class, dataGrid);
  1420. try {
  1421. cq.eq("materialId", id0);
  1422. cq.gt("materialInfoNoNum", 0);
  1423. } catch (Exception e) {
  1424. throw new BusinessException(e.getMessage());
  1425. }
  1426. cq.add();
  1427. this.tBMaterialService.getDataGridReturn(cq, true);
  1428. //add-刘梦祥-2021年11月21日17:49:01(循环获取货品信息并写入计量单位)
  1429. List<TBMaterialInfoEntity> list = dataGrid.getResults();
  1430. for (TBMaterialInfoEntity tb : list) {
  1431. if (tb.getMaterialInfoGoodsId() != null) {
  1432. TBGoodsInfoEntity tbg = this.systemService.getEntity(TBGoodsInfoEntity.class, tb.getMaterialInfoGoodsId());
  1433. if (tbg != null) {
  1434. tb.setBaseUnit(tbg.getBaseUnit());
  1435. tb.setMaterialInfoMeasure(tbg.getSpecification());
  1436. tb.setMaterialInfoModel(tbg.getSalesUnit());
  1437. }
  1438. }
  1439. }
  1440. request.setAttribute("TBMaterialInfoList", list);
  1441. request.setAttribute("viewFlag", viewFlag);
  1442. //审批权限查询end
  1443. TagUtil.datagrid(response, dataGrid);
  1444. }
  1445. }
  1446. @RequestMapping(params = {"goUpdate"})
  1447. public ModelAndView goUpdate(TBMaterialEntity tBMaterial, HttpServletRequest request) {
  1448. String id = tBMaterial.getId();
  1449. tBMaterial = this.tBMaterialService.getEntity(TBMaterialEntity.class, id);
  1450. SimpleDateFormat simpleDateFormatYMD = new SimpleDateFormat("yyyy-MM-dd");
  1451. if(tBMaterial.getMaterialDate() != null){
  1452. tBMaterial.setMaterialDateStr(simpleDateFormatYMD.format(tBMaterial.getMaterialDate()));
  1453. }
  1454. // 根据经办人id获取经办人姓名
  1455. String userId = tBMaterial.getMaterialUsername();
  1456. if (userId != null && !"".equals(userId)) {
  1457. TSBaseUser tsBaseUser = this.systemService.getEntity(TSBaseUser.class, userId);
  1458. request.setAttribute("materialUser", tsBaseUser.getRealName());
  1459. }
  1460. request.setAttribute("tBMaterial", tBMaterial);
  1461. String isView = request.getParameter("viewFlag");
  1462. request.setAttribute("viewFlag", isView);
  1463. if (StringUtil.isNotEmpty(request.getParameter("pageType"))) {
  1464. request.setAttribute("pageType", request.getParameter("pageType"));
  1465. }
  1466. return new ModelAndView("cn/com/lzt/sign/tbmaterial/tBMaterialList-update");
  1467. }
  1468. @RequestMapping(params = {"doUpdate"})
  1469. @ResponseBody
  1470. public AjaxJson doUpdate(TBMaterialEntity tBMaterial, TBMaterialPage tBMaterialPage, HttpServletRequest request) {
  1471. HttpSession session = ContextHolderUtils.getSession();
  1472. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1473. String departid = request.getParameter("materialDaptId");
  1474. String materialUsername = request.getParameter("materialUsername");
  1475. //审批用的
  1476. tBMaterial.setMaterialSpareTwo(tuser.getId());
  1477. tBMaterial.setMaterialApprove("待提交");
  1478. tBMaterial.setMaterialDaptId(departid);
  1479. tBMaterial.setMaterialUsername(materialUsername);
  1480. tBMaterial.setUpdateBy(tuser.getId());
  1481. tBMaterial.setUpdateDate(new Date());
  1482. tBMaterial.setUpdateName(tuser.getRealName());
  1483. AjaxJson j = new AjaxJson();
  1484. String message = "修改成功";
  1485. // 修改申购信息的详情信息
  1486. List<TBMaterialInfoEntity> tbMaterialInfoEntityList = tBMaterialPage.getTBMaterialInfoList();
  1487. for (TBMaterialInfoEntity tbMaterialInfoEntity : tbMaterialInfoEntityList) {
  1488. tbMaterialInfoEntity.setUpdateBy(tuser.getId());
  1489. tbMaterialInfoEntity.setUpdateDate(new Date());
  1490. tbMaterialInfoEntity.setUpdateName(tuser.getRealName());
  1491. tbMaterialInfoEntity.setMaterialInfoNoNum(tbMaterialInfoEntity.getMaterialInfoNum());
  1492. }
  1493. tBMaterialPage.setTBMaterialInfoList(null);
  1494. tBMaterialPage.setTBMaterialInfoList(tbMaterialInfoEntityList);
  1495. try {
  1496. this.tBMaterialService.updateMain(tBMaterial, tBMaterialPage.getTBMaterialInfoList());
  1497. } catch (Exception e) {
  1498. e.printStackTrace();
  1499. message = "修改失败";
  1500. throw new BusinessException(e.getMessage());
  1501. }
  1502. j.setMsg(message);
  1503. return j;
  1504. }
  1505. @RequestMapping(params = {"toTBGoods"})
  1506. public ModelAndView toTBGoods(HttpServletRequest request) {
  1507. String row = request.getParameter("row");
  1508. String maintenanceStatus = request.getParameter("maintenanceStatus");
  1509. request.setAttribute("row", row);
  1510. request.setAttribute("maintenanceStatus", maintenanceStatus);
  1511. return new ModelAndView("cn/com/lzt/sign/tbmaterial/toTBGoods");
  1512. }
  1513. /**
  1514. * 删除物料申购记录
  1515. *
  1516. * @return
  1517. */
  1518. @RequestMapping(params = "doDel")
  1519. @ResponseBody
  1520. public AjaxJson doDel(TBMaterialEntity tbMaterialEntity, HttpServletRequest request) {
  1521. AjaxJson j = new AjaxJson();
  1522. String message = "物料申购记录删除成功";
  1523. try {
  1524. // 首先根据id查询得到物料申购的单个记录
  1525. TBMaterialEntity tbMaterialEntity1 = this.systemService.getEntity(TBMaterialEntity.class, tbMaterialEntity.getId());
  1526. if (tbMaterialEntity1 != null && StringUtil.isNotEmpty(tbMaterialEntity1.getId())) {
  1527. // 定义查询条件
  1528. CriteriaQuery criteriaQuery = new CriteriaQuery(TBMaterialInfoEntity.class, new DataGrid());
  1529. criteriaQuery.eq("materialId", tbMaterialEntity1.getId());
  1530. criteriaQuery.add();
  1531. List<TBMaterialInfoEntity> tbMaterialInfoEntityList = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  1532. if (tbMaterialInfoEntityList != null && tbMaterialInfoEntityList.size() > 0) {
  1533. for (TBMaterialInfoEntity tb : tbMaterialInfoEntityList) {
  1534. this.TBMaterialInfoService.deleteEntityById(TBMaterialInfoEntity.class, tb.getId());
  1535. }
  1536. }
  1537. }
  1538. this.tBMaterialService.deleteEntityById(TBMaterialEntity.class, tbMaterialEntity.getId());
  1539. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  1540. } catch (Exception e) {
  1541. e.printStackTrace();
  1542. j.setSuccess(false);
  1543. message = "物料申购删除失败";
  1544. throw new BusinessException(e.getMessage());
  1545. }
  1546. j.setMsg(message);
  1547. return j;
  1548. }
  1549. /**
  1550. * 删除物料到货记录
  1551. *
  1552. * @return
  1553. */
  1554. @RequestMapping(params = "doArrivalDel")
  1555. @ResponseBody
  1556. public AjaxJson doArrivalDel(TBMaterialArrivalEntity tbMaterialArrivalEntity, HttpServletRequest request) {
  1557. AjaxJson j = new AjaxJson();
  1558. try {
  1559. // 删除之前首先判断是否已经有其他人有提交操作
  1560. tbMaterialArrivalEntity = this.systemService.getEntity(TBMaterialArrivalEntity.class, tbMaterialArrivalEntity.getId());
  1561. if (tbMaterialArrivalEntity != null) {
  1562. if ("1".equals(tbMaterialArrivalEntity.getReportStatus())) {
  1563. j.setSuccess(false);
  1564. j.setMsg("物料到货记录已提交,请刷新后重试!");
  1565. } else {
  1566. // 首先根据id查询得到物料到货的单个记录
  1567. this.tBMaterialService.deleteEntityById(TBMaterialArrivalEntity.class, tbMaterialArrivalEntity.getId());
  1568. systemService.addLog("物料到货记录删除成功", Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  1569. j.setMsg("物料到货记录删除成功");
  1570. }
  1571. } else {
  1572. j.setSuccess(false);
  1573. j.setMsg("物料到货记录不存在,请刷新后重试!");
  1574. }
  1575. } catch (Exception e) {
  1576. e.printStackTrace();
  1577. j.setSuccess(false);
  1578. j.setMsg("物料到货记录删除失败");
  1579. throw new BusinessException(e.getMessage());
  1580. }
  1581. return j;
  1582. }
  1583. /**
  1584. * 删除物料到货记录
  1585. *
  1586. * @return
  1587. */
  1588. @RequestMapping(params = "doDeliveryDel")
  1589. @ResponseBody
  1590. public AjaxJson doDeliveryDel(TBMaterialDeliveryEntity tbMaterial, HttpServletRequest request) {
  1591. AjaxJson j = new AjaxJson();
  1592. try {
  1593. // 首先根据id查询得到物料出货日志表的详细记录
  1594. tbMaterial = this.systemService.getEntity(TBMaterialDeliveryEntity.class, tbMaterial.getId());
  1595. if (tbMaterial != null) {
  1596. if ("1".equals(tbMaterial.getReportStatus())) {
  1597. j.setSuccess(false);
  1598. j.setMsg("物料出货记录已提交,请刷新后重试!");
  1599. } else {
  1600. DataGrid dataGrid = new DataGrid();
  1601. dataGrid.setRows(999);
  1602. CriteriaQuery criteriaQuery = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  1603. criteriaQuery.eq("deliveryId", tbMaterial.getId());
  1604. criteriaQuery.add();
  1605. List<TBMaterialDeliveryInfoEntity> tbMaterialDeliveryInfoEntityList = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  1606. if (tbMaterialDeliveryInfoEntityList != null && tbMaterialDeliveryInfoEntityList.size() > 0) {
  1607. for (TBMaterialDeliveryInfoEntity tbmItem : tbMaterialDeliveryInfoEntityList) {
  1608. this.systemService.deleteEntityById(TBMaterialDeliveryInfoEntity.class, tbmItem.getId());
  1609. }
  1610. }
  1611. this.tBMaterialService.deleteEntityById(TBMaterialDeliveryEntity.class, tbMaterial.getId());
  1612. systemService.addLog("物料出货记录删除成功", Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  1613. j.setMsg("物料出货记录删除成功");
  1614. }
  1615. } else {
  1616. j.setSuccess(false);
  1617. j.setMsg("物料出货记录不存在,请刷新后重试!");
  1618. }
  1619. } catch (Exception e) {
  1620. e.printStackTrace();
  1621. j.setSuccess(false);
  1622. j.setMsg("物料出货记录删除失败");
  1623. throw new BusinessException(e.getMessage());
  1624. }
  1625. return j;
  1626. }
  1627. /**
  1628. * 物料申购录入请求
  1629. *
  1630. * @param tBMaterial
  1631. * @param tBMaterialPage
  1632. * @param request
  1633. * @return
  1634. */
  1635. @RequestMapping(params = {"doAdd"})
  1636. @ResponseBody
  1637. public AjaxJson doAdd(TBMaterialEntity tBMaterial, TBMaterialPage tBMaterialPage, HttpServletRequest request) {
  1638. HttpSession session = ContextHolderUtils.getSession();
  1639. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1640. String departid = request.getParameter("materialDaptId");
  1641. // 获取货品请购金额总金额
  1642. String goodsTotalMoney = request.getParameter("goodsTotalMoney");
  1643. tBMaterial.setMaterialUsername(tuser.getId());
  1644. //审批用的
  1645. tBMaterial.setMaterialSpareTwo(tuser.getId());
  1646. tBMaterial.setMaterialApprove("待提交");
  1647. tBMaterial.setMaterialDaptId(departid);
  1648. tBMaterial.setCreateBy(tuser.getId());
  1649. tBMaterial.setCreateName(tuser.getRealName());
  1650. tBMaterial.setGoodsTotalMoney(goodsTotalMoney);
  1651. AjaxJson j = new AjaxJson();
  1652. String message = "添加成功";
  1653. try {
  1654. // add-刘梦祥-2021年11月24日20:54:22(BUG修复:添加未到货总数)
  1655. List<TBMaterialInfoEntity> tbMaterialInfoEntityList = tBMaterialPage.getTBMaterialInfoList();
  1656. if (tbMaterialInfoEntityList != null && tbMaterialInfoEntityList.size() > 0) {
  1657. for (TBMaterialInfoEntity item : tbMaterialInfoEntityList) {
  1658. item.setMaterialInfoNoNum(item.getMaterialInfoNum());
  1659. item.setCreateBy(tuser.getId());
  1660. item.setCreateName(tuser.getRealName());
  1661. }
  1662. }
  1663. tBMaterialPage.setTBMaterialInfoList(null);
  1664. tBMaterialPage.setTBMaterialInfoList(tbMaterialInfoEntityList);
  1665. this.tBMaterialService.addMain(tBMaterial, tBMaterialPage.getTBMaterialInfoList());
  1666. } catch (Exception e) {
  1667. e.printStackTrace();
  1668. message = "添加失败";
  1669. throw new BusinessException(e.getMessage());
  1670. }
  1671. j.setMsg(message);
  1672. return j;
  1673. }
  1674. @RequestMapping(params = {"goodsdatagrid"})
  1675. public void goodsdatagrid(TBGoodsInfoEntity tBGoodsInfo, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  1676. // 判断是否是维修请求
  1677. String maintenanceStatus = request.getParameter("maintenanceStatus");
  1678. CriteriaQuery cq = new CriteriaQuery(TBGoodsInfoEntity.class, dataGrid);
  1679. // 首先根据货品名称模糊查询所有的物品分类表数据
  1680. CriteriaQuery cq2 = new CriteriaQuery(TBGoodsCategoryEntity.class, new DataGrid());
  1681. cq2.like("categoryName", "%车辆%");
  1682. cq2.add();
  1683. // 得到集合
  1684. List<TBGoodsCategoryEntity> tbGoodsCategoryEntityList = this.systemService.getListByCriteriaQuery(cq2, true);
  1685. // 判断非空
  1686. // 定义模糊查询的集合
  1687. List<String> GoodsCode = new ArrayList<>();
  1688. if (tbGoodsCategoryEntityList != null && tbGoodsCategoryEntityList.size() > 0) {
  1689. for (TBGoodsCategoryEntity tbItem : tbGoodsCategoryEntityList) {
  1690. GoodsCode.add(tbItem.getCategoryCode());
  1691. }
  1692. }
  1693. if (GoodsCode.size() > 0) {
  1694. if ("ture".equals(maintenanceStatus)) {
  1695. cq.in("belongCategory", GoodsCode.toArray());
  1696. } else {
  1697. cq.notin("belongCategory", GoodsCode.toArray());
  1698. }
  1699. }
  1700. cq.eq("status","0");
  1701. cq.eq("deleteFlag","0");
  1702. cq.add();
  1703. this.tBGoodsInfoService.getDataGridReturn(cq, true);
  1704. TagUtil.datagrid(response, dataGrid);
  1705. }
  1706. @RequestMapping(params = {"exportXlsOrder"})
  1707. public void exportXlsOrder(String id, HttpServletRequest request, HttpServletResponse response, ModelMap map) throws IOException {
  1708. // 权限标识
  1709. int butRule = 0;
  1710. String requestUserTag = "false";
  1711. if (StringUtil.isNotEmpty(request.getParameter("butRule"))) {
  1712. butRule = Integer.parseInt(request.getParameter("butRule"));
  1713. }
  1714. // 审批流程用户标识
  1715. if (StringUtil.isNotEmpty(request.getParameter("requestUserTag"))) {
  1716. requestUserTag = request.getParameter("requestUserTag");
  1717. }
  1718. id = request.getParameter("id");
  1719. // 根据id获取科室信息
  1720. TBMaterialEntity t = this.systemService.getEntity(TBMaterialEntity.class, id);
  1721. String materialDaptStr = "";
  1722. if (StringUtil.isNotEmpty(t.getMaterialDaptId())) {
  1723. TSDepart tsDepart = this.systemService.getEntity(TSDepart.class, t.getMaterialDaptId());
  1724. materialDaptStr = tsDepart.getDepartname();
  1725. } else {
  1726. materialDaptStr = "科室信息获取异常";
  1727. }
  1728. // 获取申购月份
  1729. if(t.getMaterialDate() != null){
  1730. materialDaptStr += "-" + simpleDateFormat.format(t.getMaterialDate()).substring(5, 7);
  1731. }else if(t.getCreateDate() != null){
  1732. materialDaptStr += "-" + simpleDateFormat.format(t.getCreateDate()).substring(5, 7);
  1733. }
  1734. // 文件名称
  1735. String fileName = materialDaptStr + "月份-申购表";
  1736. if (StringUtil.isNotEmpty(request.getParameter("requestType"))) {
  1737. fileName = materialDaptStr + "月份-采购表";
  1738. }
  1739. DataGrid dataGrid = new DataGrid();
  1740. TBMaterialInfoEntity tBMaterialInfoEntityA = new TBMaterialInfoEntity();
  1741. tBMaterialInfoEntityA.setMaterialId(id);
  1742. CriteriaQuery cq = new CriteriaQuery(TBMaterialInfoEntity.class, dataGrid);
  1743. HqlGenerateUtil.installHql(cq, tBMaterialInfoEntityA, request.getParameterMap());
  1744. this.TBMaterialInfoService.getDataGridReturn(cq, true);
  1745. List<TBMaterialInfoEntity> details = dataGrid.getResults();
  1746. HSSFWorkbook wb = new HSSFWorkbook();
  1747. HSSFSheet sheet = wb.createSheet(fileName);
  1748. HSSFRow row1 = sheet.createRow(0);
  1749. HSSFCell cell = row1.createCell(0);
  1750. cell.setCellValue(fileName);
  1751. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));
  1752. HSSFRow row2 = sheet.createRow(1);
  1753. row2.createCell(0).setCellValue("货品名称");
  1754. row2.createCell(1).setCellValue("计量单位");
  1755. row2.createCell(2).setCellValue("规格型号");
  1756. row2.createCell(3).setCellValue("货品分类");
  1757. row2.createCell(4).setCellValue("数量");
  1758. row2.createCell(5).setCellValue("备注");
  1759. // 暂存货品请购总金额
  1760. Integer totalGoodsMoney = 0;
  1761. for (int i = 2; i < details.size() + 2; i++) {
  1762. HSSFRow row3 = sheet.createRow(i);
  1763. TBMaterialInfoEntity tBMaterialInfoEntity = details.get(i - 2);
  1764. // 根据请购货品详情表中的货品id得到详细的货品信息
  1765. if (StringUtil.isNotEmpty(tBMaterialInfoEntity.getMaterialInfoGoodsId())) {
  1766. TBGoodsInfoEntity TBGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, tBMaterialInfoEntity.getMaterialInfoGoodsId());
  1767. row3.createCell(0).setCellValue(TBGoodsInfoEntity != null ? TBGoodsInfoEntity.getGoodsName() : "货品不存在");
  1768. // 计量单位需要中文转义
  1769. row3.createCell(1).setCellValue(TBGoodsInfoEntity != null ? this.systemService.getType(TBGoodsInfoEntity.getBaseUnit(), "metering_calcu_unit").getTypename() : "货品不存在");
  1770. row3.createCell(2).setCellValue(TBGoodsInfoEntity != null ? TBGoodsInfoEntity.getSpecification() : "货品不存在");
  1771. // 货品分类需要中文转义
  1772. List<DictEntity> dictEntities = this.systemService.queryDict("t_b_goods_category","category_code","category_name");
  1773. Map<String, String> dictEntitiesMap = dictEntities.stream().collect(Collectors.toMap(DictEntity::getTypecode, DictEntity::getTypename));
  1774. row3.createCell(3).setCellValue(TBGoodsInfoEntity != null ? dictEntitiesMap.getOrDefault(TBGoodsInfoEntity.getBelongCategory(),"货品分类查询失败") : "货品不存在");
  1775. row3.createCell(4).setCellValue(tBMaterialInfoEntity.getMaterialInfoNum());
  1776. row3.createCell(5).setCellValue(tBMaterialInfoEntity.getMaterialInfoRemarks());
  1777. totalGoodsMoney += Integer.parseInt(TBGoodsInfoEntity != null ? TBGoodsInfoEntity.getDefaultProvider() : "0") * tBMaterialInfoEntity.getMaterialInfoNum();
  1778. } else {
  1779. row3.createCell(0).setCellValue("货品查询失败");
  1780. row3.createCell(1).setCellValue("货品查询失败");
  1781. row3.createCell(2).setCellValue("货品查询失败");
  1782. row3.createCell(3).setCellValue("货品查询失败");
  1783. row3.createCell(4).setCellValue("货品查询失败");
  1784. row3.createCell(5).setCellValue("货品查询失败");
  1785. }
  1786. }
  1787. HSSFRow totalRow = sheet.createRow(details.size() + 3);
  1788. totalRow.createCell(0).setCellValue("经办人");
  1789. totalRow.createCell(1).setCellValue(t.getCreateName());
  1790. totalRow.createCell(2).setCellValue("");
  1791. totalRow.createCell(3).setCellValue("");
  1792. // 只有审批人下载文件时才显示总金额
  1793. if (butRule == 2 || butRule == 3 || butRule == 6 || butRule == 7 || "true".equals(requestUserTag)) {
  1794. totalRow.createCell(4).setCellValue("请购货品总金额");
  1795. totalRow.createCell(5).setCellValue(totalGoodsMoney);
  1796. }
  1797. ServletOutputStream servletOutputStream = response.getOutputStream();
  1798. response.reset();
  1799. fileName = URLEncoder.encode(fileName, "utf-8");
  1800. response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls;filename*=utf-8''" + fileName + ".xls");
  1801. response.setContentType("application/msexcel");
  1802. wb.write((OutputStream) servletOutputStream);
  1803. servletOutputStream.close();
  1804. }
  1805. /**
  1806. * 物料出货打印页面跳转
  1807. * @author 刘梦祥
  1808. * @date 2022年8月12日15:05:48
  1809. * @param request
  1810. * @return
  1811. */
  1812. @RequestMapping(params = {"goPrint"})
  1813. public ModelAndView goPrint(HttpServletRequest request) {
  1814. String id = request.getParameter("id");
  1815. HttpSession session = ContextHolderUtils.getSession();
  1816. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1817. if(tuser != null && tuser.getRealName() != null){
  1818. String userName = tuser.getRealName();
  1819. request.setAttribute("userName",userName);
  1820. }
  1821. String departName = "科室信息获取失败!";
  1822. // 获取导出时间(时间格式暂定为年月日)
  1823. String materialDaptStr = simpleDateFormat.format(new Date()).substring(0, 10);
  1824. request.setAttribute("materialDaptStr",materialDaptStr);
  1825. // 首先根据id查询物料出货表列表
  1826. DataGrid dataGrid1 = new DataGrid();
  1827. dataGrid1.setRows(99999);
  1828. CriteriaQuery criteriaQuery = new CriteriaQuery(TBMaterialDeliveryEntity.class, dataGrid1);
  1829. criteriaQuery.eq("id", id);
  1830. criteriaQuery.eq("reportStatus", "1");
  1831. criteriaQuery.add();
  1832. List<TBMaterialDeliveryEntity> tbMaterialDeliveryEntities = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  1833. // 返回对象
  1834. List<Map<String,String>> printInfos = new ArrayList<>();
  1835. // 合计[单价、数量、合计]
  1836. double providerSum = 0.00;
  1837. int outNumSum = 0;
  1838. double providerSums = 0.00;
  1839. if (tbMaterialDeliveryEntities != null && tbMaterialDeliveryEntities.size() > 0) {
  1840. if (tbMaterialDeliveryEntities.size() == 1) {
  1841. // 根据出货id得到出货详细数据
  1842. DataGrid dataGrid = new DataGrid();
  1843. dataGrid.setRows(999);
  1844. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  1845. // update-刘梦祥-2021年12月17日16:33:33(需要查询出所有的已确认出货的记录)
  1846. cq.eq("deliveryId", tbMaterialDeliveryEntities.get(0).getId());
  1847. cq.add();
  1848. List<TBMaterialDeliveryInfoEntity> tbMaterialDeliveryInfoEntityList = this.TBMaterialInfoService.getListByCriteriaQuery(cq, true);
  1849. if(tbMaterialDeliveryInfoEntityList != null && tbMaterialDeliveryInfoEntityList.size() > 0){
  1850. for (TBMaterialDeliveryInfoEntity item: tbMaterialDeliveryInfoEntityList){
  1851. Map<String,String> printInfo = new HashMap<>();
  1852. // 转换为科室(根据详细出货日志得到出货日志表信息)
  1853. if("科室信息获取失败!".equals(departName)){
  1854. TBMaterialDeliveryEntity tbMaterialDelivery = this.systemService.getEntity(TBMaterialDeliveryEntity.class, item.getDeliveryId());
  1855. if (tbMaterialDelivery != null && StringUtil.isNotEmpty(tbMaterialDelivery.getMaterialDaptId())) {
  1856. departName = this.systemService.getType(tbMaterialDelivery.getMaterialDaptId(), "departName").getTypename();
  1857. }
  1858. }
  1859. // 转换货品名称(根据货品id,得到货品名称)
  1860. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, item.getGoodsId());
  1861. if (tbGoodsInfoEntity != null && StringUtil.isNotEmpty(tbGoodsInfoEntity.getGoodsName())) {
  1862. printInfo.put("goodsName",tbGoodsInfoEntity.getGoodsName());
  1863. printInfo.put("defaultProvider",tbGoodsInfoEntity.getDefaultProvider());
  1864. printInfo.put("defaultProviderSum",String.valueOf(item.getOutNum()*Integer.parseInt(tbGoodsInfoEntity.getDefaultProvider())));
  1865. providerSum += Double.parseDouble(tbGoodsInfoEntity.getDefaultProvider());
  1866. providerSums += Double.parseDouble(String.valueOf(item.getOutNum()*Integer.parseInt(tbGoodsInfoEntity.getDefaultProvider())));
  1867. } else {
  1868. printInfo.put("goodsName","货品名称加载失败!");
  1869. printInfo.put("defaultProvider","货品单价加载失败!");
  1870. printInfo.put("defaultProviderSum","货品总价计算失败!");
  1871. }
  1872. outNumSum += item.getOutNum();
  1873. printInfo.put("outNum",String.valueOf(item.getOutNum()));
  1874. // 根据领用车id得到领用车号
  1875. if (item.getReceiverCarId() != null) {
  1876. CarEntity tbCar = this.systemService.getEntity(CarEntity.class, item.getReceiverCarId());
  1877. if(tbCar != null){
  1878. printInfo.put("plate",tbCar.getPlate());
  1879. }else{
  1880. printInfo.put("plate","");
  1881. }
  1882. } else {
  1883. printInfo.put("plate","领用车信息查询失败!");
  1884. }
  1885. printInfos.add(printInfo);
  1886. }
  1887. }
  1888. }
  1889. }
  1890. request.setAttribute("providerSum",providerSum);
  1891. request.setAttribute("outNumSum",outNumSum);
  1892. request.setAttribute("providerSums",providerSums);
  1893. request.setAttribute("departName",departName);
  1894. request.setAttribute("printInfos",printInfos);
  1895. return new ModelAndView("cn/com/lzt/sign/tbmaterial/materialDelivery-print");
  1896. }
  1897. /**
  1898. * 物料出货导出
  1899. *
  1900. * @param id
  1901. * @param request
  1902. * @param response
  1903. * @param map
  1904. * @throws IOException
  1905. */
  1906. @RequestMapping(params = {"exportDelivery"})
  1907. public void exportDelivery(String id, HttpServletRequest request, HttpServletResponse response, ModelMap map) throws IOException {
  1908. // 权限标识
  1909. String[] ids = request.getParameter("ids").split(",");
  1910. HttpSession session = ContextHolderUtils.getSession();
  1911. TSUser tuser = (TSUser) session.getAttribute("LOCAL_CLINET_USER");
  1912. // 获取导出时间(时间格式暂定为年月日)
  1913. String materialDaptStr = simpleDateFormat.format(new Date()).substring(0, 10);
  1914. // 首先根据id查询物料出货表列表
  1915. DataGrid dataGrid1 = new DataGrid();
  1916. dataGrid1.setRows(99999);
  1917. CriteriaQuery criteriaQuery = new CriteriaQuery(TBMaterialDeliveryEntity.class, dataGrid1);
  1918. criteriaQuery.in("id", ids);
  1919. criteriaQuery.eq("reportStatus", "1");
  1920. criteriaQuery.add();
  1921. List<TBMaterialDeliveryEntity> tbMaterialDeliveryEntities = this.systemService.getListByCriteriaQuery(criteriaQuery, true);
  1922. if (tbMaterialDeliveryEntities != null && tbMaterialDeliveryEntities.size() > 0) {
  1923. if (tbMaterialDeliveryEntities.size() == 1) {
  1924. // 文件名称
  1925. String fileName = "出库单";
  1926. // 根据出货id得到出货详细数据
  1927. DataGrid dataGrid = new DataGrid();
  1928. dataGrid.setRows(999);
  1929. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  1930. // update-刘梦祥-2021年12月17日16:33:33(需要查询出所有的已确认出货的记录)
  1931. cq.eq("deliveryId", tbMaterialDeliveryEntities.get(0).getId());
  1932. cq.add();
  1933. List<TBMaterialDeliveryInfoEntity> tbMaterialDeliveryInfoEntityList = this.TBMaterialInfoService.getListByCriteriaQuery(cq, true);
  1934. HSSFWorkbook wb = new HSSFWorkbook();
  1935. HSSFSheet sheet = wb.createSheet(fileName);
  1936. HSSFRow row1 = sheet.createRow(0);
  1937. HSSFCell cell = row1.createCell(0);
  1938. cell.setCellValue(fileName);
  1939. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
  1940. HSSFRow totalRow = sheet.createRow(1);
  1941. totalRow.createCell(0).setCellValue("导出日期:");
  1942. totalRow.createCell(1).setCellValue(materialDaptStr);
  1943. totalRow.createCell(2).setCellValue("");
  1944. totalRow.createCell(3).setCellValue("");
  1945. totalRow.createCell(4).setCellValue("");
  1946. totalRow.createCell(5).setCellValue("");
  1947. totalRow.createCell(6).setCellValue("导出人:");
  1948. totalRow.createCell(7).setCellValue(tuser.getRealName());
  1949. HSSFRow row2 = sheet.createRow(2);
  1950. row2.createCell(0).setCellValue("序号");
  1951. row2.createCell(1).setCellValue("科室");
  1952. row2.createCell(2).setCellValue("货品名称");
  1953. row2.createCell(3).setCellValue("数量");
  1954. // add-刘梦祥-2022年8月12日14:08:46(新增单价和总价两个字段)
  1955. row2.createCell(4).setCellValue("单价");
  1956. row2.createCell(5).setCellValue("总价");
  1957. row2.createCell(6).setCellValue("领用车号");
  1958. row2.createCell(7).setCellValue("领用人签字");
  1959. // 暂存货品请购总金额
  1960. for (int i = 3; i < tbMaterialDeliveryInfoEntityList.size() + 3; i++) {
  1961. HSSFRow row3 = sheet.createRow(i);
  1962. TBMaterialDeliveryInfoEntity item = tbMaterialDeliveryInfoEntityList.get(i - 3);
  1963. row3.createCell(0).setCellValue(i - 2);
  1964. // 转换为科室(根据详细出货日志得到出货日志表信息)
  1965. TBMaterialDeliveryEntity tbMaterialDelivery = this.systemService.getEntity(TBMaterialDeliveryEntity.class, item.getDeliveryId());
  1966. if (tbMaterialDelivery != null && StringUtil.isNotEmpty(tbMaterialDelivery.getMaterialDaptId())) {
  1967. row3.createCell(1).setCellValue(this.systemService.getType(tbMaterialDelivery.getMaterialDaptId(), "departName").getTypename());
  1968. } else {
  1969. row3.createCell(1).setCellValue("科室信息获取失败!");
  1970. }
  1971. // 转换货品名称(根据货品id,得到货品名称)
  1972. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, item.getGoodsId());
  1973. if (tbGoodsInfoEntity != null && StringUtil.isNotEmpty(tbGoodsInfoEntity.getGoodsName())) {
  1974. row3.createCell(2).setCellValue(tbGoodsInfoEntity.getGoodsName());
  1975. row3.createCell(4).setCellValue(tbGoodsInfoEntity.getDefaultProvider());
  1976. row3.createCell(5).setCellValue(item.getOutNum()*Integer.parseInt(tbGoodsInfoEntity.getDefaultProvider()));
  1977. } else {
  1978. row3.createCell(2).setCellValue("货品名称加载失败!");
  1979. row3.createCell(4).setCellValue("货品单价加载失败!");
  1980. row3.createCell(5).setCellValue("货品总价计算失败!");
  1981. }
  1982. row3.createCell(3).setCellValue(item.getOutNum());
  1983. // 根据领用车id得到领用车号
  1984. if (item.getReceiverCarId() != null) {
  1985. CarEntity tbCar = this.systemService.getEntity(CarEntity.class, item.getReceiverCarId());
  1986. if(tbCar != null){
  1987. row3.createCell(6).setCellValue(tbCar.getPlate());
  1988. }else{
  1989. row3.createCell(6).setCellValue("");
  1990. }
  1991. } else {
  1992. row3.createCell(6).setCellValue("领用车信息查询失败!");
  1993. }
  1994. row3.createCell(7).setCellValue("");
  1995. }
  1996. ServletOutputStream servletOutputStream = response.getOutputStream();
  1997. response.reset();
  1998. fileName = URLEncoder.encode(fileName, "utf-8");
  1999. response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls;filename*=utf-8''" + fileName + ".xls");
  2000. response.setContentType("application/msexcel");
  2001. wb.write((OutputStream) servletOutputStream);
  2002. servletOutputStream.close();
  2003. } else {
  2004. Map<String, byte[]> fileBytes = new HashMap<>();
  2005. String nowTime = simpleDateFormat.format(new Date());
  2006. String nowTimeMStr = nowTime.substring(5, 7);
  2007. // 如果有多个的话
  2008. for (TBMaterialDeliveryEntity tbMds : tbMaterialDeliveryEntities) {
  2009. // 详细文件名称
  2010. String fileName = nowTimeMStr + "月份出库单";
  2011. // 科室名称
  2012. String departName = "";
  2013. // 根据出货id得到出货详细数据
  2014. DataGrid dataGrid = new DataGrid();
  2015. dataGrid.setRows(999);
  2016. CriteriaQuery cq = new CriteriaQuery(TBMaterialDeliveryInfoEntity.class, dataGrid);
  2017. // update-刘梦祥-2021年12月17日16:33:33(需要查询出所有的已确认出货的记录)
  2018. cq.eq("deliveryId", tbMds.getId());
  2019. cq.add();
  2020. List<TBMaterialDeliveryInfoEntity> tbMaterialDeliveryInfoEntityList = this.TBMaterialInfoService.getListByCriteriaQuery(cq, true);
  2021. HSSFWorkbook wb = new HSSFWorkbook();
  2022. HSSFSheet sheet = wb.createSheet(fileName);
  2023. HSSFRow row1 = sheet.createRow(0);
  2024. HSSFCell cell = row1.createCell(0);
  2025. cell.setCellValue(fileName);
  2026. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
  2027. HSSFRow totalRow = sheet.createRow(1);
  2028. totalRow.createCell(0).setCellValue("导出日期:");
  2029. totalRow.createCell(1).setCellValue(materialDaptStr);
  2030. totalRow.createCell(2).setCellValue("");
  2031. totalRow.createCell(3).setCellValue("");
  2032. totalRow.createCell(4).setCellValue("");
  2033. totalRow.createCell(5).setCellValue("");
  2034. totalRow.createCell(6).setCellValue("导出人:");
  2035. totalRow.createCell(7).setCellValue(tuser.getRealName());
  2036. HSSFRow row2 = sheet.createRow(2);
  2037. row2.createCell(0).setCellValue("序号");
  2038. row2.createCell(1).setCellValue("科室");
  2039. row2.createCell(2).setCellValue("货品名称");
  2040. row2.createCell(3).setCellValue("数量");
  2041. // add-刘梦祥-2022年8月12日14:08:46(新增单价和总价两个字段)
  2042. row2.createCell(4).setCellValue("单价");
  2043. row2.createCell(5).setCellValue("总价");
  2044. row2.createCell(6).setCellValue("领用车号");
  2045. row2.createCell(7).setCellValue("领用人签字");
  2046. // 暂存货品请购总金额
  2047. for (int i = 3; i < tbMaterialDeliveryInfoEntityList.size() + 3; i++) {
  2048. HSSFRow row3 = sheet.createRow(i);
  2049. TBMaterialDeliveryInfoEntity item = tbMaterialDeliveryInfoEntityList.get(i - 3);
  2050. row3.createCell(0).setCellValue(i - 2);
  2051. // 转换为科室(根据详细出货日志得到出货日志表信息)
  2052. TBMaterialDeliveryEntity tbMaterialDelivery = this.systemService.getEntity(TBMaterialDeliveryEntity.class, item.getDeliveryId());
  2053. if (tbMaterialDelivery != null && StringUtil.isNotEmpty(tbMaterialDelivery.getMaterialDaptId())) {
  2054. row3.createCell(1).setCellValue(this.systemService.getType(tbMaterialDelivery.getMaterialDaptId(), "departName").getTypename());
  2055. if ("".equals(departName)) {
  2056. departName = this.systemService.getType(tbMaterialDelivery.getMaterialDaptId(), "departName").getTypename();
  2057. }
  2058. } else {
  2059. row3.createCell(1).setCellValue("科室信息获取失败!");
  2060. }
  2061. // 转换货品名称(根据货品id,得到货品名称)
  2062. TBGoodsInfoEntity tbGoodsInfoEntity = this.systemService.getEntity(TBGoodsInfoEntity.class, item.getGoodsId());
  2063. if (tbGoodsInfoEntity != null && StringUtil.isNotEmpty(tbGoodsInfoEntity.getGoodsName())) {
  2064. row3.createCell(2).setCellValue(tbGoodsInfoEntity.getGoodsName());
  2065. row3.createCell(4).setCellValue(tbGoodsInfoEntity.getDefaultProvider());
  2066. row3.createCell(5).setCellValue(item.getOutNum()*Integer.parseInt(tbGoodsInfoEntity.getDefaultProvider()));
  2067. } else {
  2068. row3.createCell(2).setCellValue("货品名称加载失败!");
  2069. row3.createCell(4).setCellValue("货品单价加载失败!");
  2070. row3.createCell(5).setCellValue("货品总价计算失败!");
  2071. }
  2072. row3.createCell(3).setCellValue(item.getOutNum());
  2073. // 根据领用车id得到领用车号
  2074. if (item.getReceiverCarId() != null) {
  2075. CarEntity tbCar = this.systemService.getEntity(CarEntity.class, item.getReceiverCarId());
  2076. if(tbCar != null){
  2077. row3.createCell(6).setCellValue(tbCar.getPlate());
  2078. }else{
  2079. row3.createCell(6).setCellValue("");
  2080. }
  2081. } else {
  2082. row3.createCell(6).setCellValue("领用车信息查询失败!");
  2083. }
  2084. row3.createCell(7).setCellValue("");
  2085. }
  2086. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  2087. try {
  2088. wb.write(bos);
  2089. } finally {
  2090. bos.close();
  2091. }
  2092. byte[] bytes = bos.toByteArray();
  2093. if (fileBytes.containsKey(departName + fileName)) {
  2094. int fileIndex = 1;
  2095. String fileNameExcel = departName + fileName;
  2096. while (fileBytes.containsKey(fileNameExcel)) {
  2097. fileNameExcel = departName + fileName + "(" + fileIndex + ")";
  2098. fileIndex++;
  2099. }
  2100. fileBytes.put(fileNameExcel, bytes);
  2101. } else {
  2102. fileBytes.put(departName + fileName, bytes);
  2103. }
  2104. }
  2105. String ls_filename = URLEncoder.encode("出库单.zip", "utf-8");// 创建文件
  2106. String destFileDir = ResourceUtil.getSystempPath() + File.separator + "出库单.zip";
  2107. File zipFile = new File(destFileDir);
  2108. if (!zipFile.exists()) {
  2109. zipFile.createNewFile();
  2110. }
  2111. FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
  2112. ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
  2113. fileBytes.forEach((k, v) -> {
  2114. //写入一个条目,我们需要给这个条目起个名字,相当于起一个文件名称
  2115. try {
  2116. zipOutputStream.putNextEntry(new ZipEntry(k + ".xls"));
  2117. zipOutputStream.write(v);
  2118. } catch (IOException e) {
  2119. e.printStackTrace();
  2120. System.err.print("写入文件失败");
  2121. }
  2122. });
  2123. zipOutputStream.closeEntry();
  2124. zipOutputStream.close();
  2125. // 清空response
  2126. response.reset();
  2127. InputStream fis = new BufferedInputStream(new FileInputStream(destFileDir));
  2128. // 设置response的Header
  2129. response.setContentType("text/html;charset=utf-8");
  2130. request.setCharacterEncoding("UTF-8");
  2131. response.addHeader("Content-Length", "" + zipFile.length());
  2132. OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
  2133. response.setContentType("application/octet-stream");
  2134. response.setHeader("Content-disposition", "attachment;filename="
  2135. + new String(ls_filename.getBytes("utf-8"), "ISO8859-1"));
  2136. int bytesRead = 0;
  2137. byte[] buffer = new byte[8192];
  2138. while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
  2139. toClient.write(buffer, 0, bytesRead);
  2140. }
  2141. toClient.write(buffer);
  2142. toClient.flush();
  2143. toClient.close();
  2144. fis.close();
  2145. }
  2146. }
  2147. }
  2148. /**
  2149. * @param byteList 文件字节码Map,k:fileName,v:byte[]
  2150. */
  2151. public void zipFile(String destFileDir, Map<String, byte[]> byteList) {
  2152. try {
  2153. File zipFile = new File(destFileDir);
  2154. if (!zipFile.exists()) {
  2155. zipFile.createNewFile();
  2156. }
  2157. FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
  2158. ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
  2159. byteList.forEach((k, v) -> {
  2160. //写入一个条目,我们需要给这个条目起个名字,相当于起一个文件名称
  2161. try {
  2162. zipOutputStream.putNextEntry(new ZipEntry(k + ".xlsx"));
  2163. zipOutputStream.write(v);
  2164. } catch (IOException e) {
  2165. e.printStackTrace();
  2166. System.err.print("写入文件失败");
  2167. }
  2168. });
  2169. //关闭条目
  2170. zipOutputStream.closeEntry();
  2171. zipOutputStream.close();
  2172. } catch (IOException e) {
  2173. e.printStackTrace();
  2174. System.err.print("压缩文件失败");
  2175. }
  2176. }
  2177. }