WmsPickController.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package com.jeesite.modules.wms.web;
  2. import java.util.List;
  3. import java.util.Map;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import com.jeesite.common.collect.ListUtils;
  7. import com.jeesite.common.collect.MapUtils;
  8. import com.jeesite.common.lang.ObjectUtils;
  9. import com.jeesite.common.lang.StringUtils;
  10. import com.jeesite.modules.file.entity.FileUpload;
  11. import com.jeesite.modules.file.service.FileUploadService;
  12. import com.jeesite.modules.mes.entity.MesProduct;
  13. import com.jeesite.modules.mes.entity.MesProductOrder;
  14. import com.jeesite.modules.mes.entity.MesProductPlan;
  15. import com.jeesite.modules.mes.resp.CommonResp;
  16. import com.jeesite.modules.mes.service.MesProductOrderService;
  17. import com.jeesite.modules.mes.service.MesProductPlanService;
  18. import com.jeesite.modules.wms.entity.*;
  19. import com.jeesite.modules.wms.service.WmsBomMaterialService;
  20. import com.jeesite.modules.wms.service.WmsMaterialService;
  21. import com.jeesite.modules.wms.service.WmsPickMaterialService;
  22. import org.apache.shiro.authz.annotation.Logical;
  23. import org.apache.shiro.authz.annotation.RequiresPermissions;
  24. import org.apache.shiro.authz.annotation.Logical;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Controller;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.ui.Model;
  29. import org.springframework.validation.annotation.Validated;
  30. import org.springframework.web.bind.annotation.ModelAttribute;
  31. import org.springframework.web.bind.annotation.PostMapping;
  32. import org.springframework.web.bind.annotation.RequestMapping;
  33. import org.springframework.web.bind.annotation.ResponseBody;
  34. import com.jeesite.common.config.Global;
  35. import com.jeesite.common.entity.Page;
  36. import com.jeesite.common.web.BaseController;
  37. import com.jeesite.modules.wms.service.WmsPickService;
  38. /**
  39. * 物料领料单Controller
  40. * @author hzd
  41. * @version 2026-03-15
  42. */
  43. @Controller
  44. @RequestMapping(value = "${adminPath}/wms/wmsPick")
  45. public class WmsPickController extends BaseController {
  46. @Autowired
  47. private WmsPickService wmsPickService;
  48. @Autowired
  49. private MesProductPlanService mesProductPlanService;
  50. @Autowired
  51. private MesProductOrderService mesProductOrderService;
  52. @Autowired
  53. private WmsBomMaterialService wmsBomMaterialService;
  54. @Autowired
  55. private WmsPickMaterialService wmsPickMaterialService;
  56. @Autowired
  57. private FileUploadService fileUploadService;
  58. @Autowired
  59. private WmsMaterialService wmsMaterialService;
  60. /**
  61. * 获取数据
  62. */
  63. @ModelAttribute
  64. public WmsPick get(String id, boolean isNewRecord) {
  65. return wmsPickService.get(id, isNewRecord);
  66. }
  67. /**
  68. * 查询列表
  69. */
  70. @RequiresPermissions("wms:wmsPick:view")
  71. @RequestMapping(value = {"list", ""})
  72. public String list(WmsPick wmsPick, Model model) {
  73. model.addAttribute("wmsPick", wmsPick);
  74. return "modules/wms/wmsPickList";
  75. }
  76. /**
  77. * 查询列表数据
  78. */
  79. @RequiresPermissions(value={"wms:wmsPick:view", "mes:mesProductOrder:view"}, logical=Logical.OR)
  80. @RequestMapping(value = "listData")
  81. @ResponseBody
  82. public Page<WmsPick> listData(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) {
  83. wmsPick.setPage(new Page<>(request, response));
  84. Page<WmsPick> page = wmsPickService.findPage(wmsPick);
  85. // 兼容不同 MyBatis 驼峰映射配置,确保列表始终返回生产订单编号。
  86. for (WmsPick pick : page.getList()) {
  87. if (StringUtils.isEmpty(pick.getOrderSn()) && !StringUtils.isEmpty(pick.getOrderId())) {
  88. MesProductOrder order = mesProductOrderService.get(pick.getOrderId());
  89. if (order != null) pick.setOrderSn(order.getSn());
  90. }
  91. }
  92. return page;
  93. }
  94. /**
  95. * 查看编辑表单
  96. */
  97. @RequiresPermissions("wms:wmsPick:view")
  98. @RequestMapping(value = "form")
  99. public String form(WmsPick wmsPick, Model model) {
  100. model.addAttribute("wmsPick", wmsPick);
  101. return "modules/wms/wmsPickForm";
  102. }
  103. /**
  104. * 保存数据
  105. */
  106. @RequiresPermissions("wms:wmsPick:edit")
  107. @PostMapping(value = "save")
  108. @ResponseBody
  109. public String save(@Validated WmsPick wmsPick) {
  110. MesProductOrder mesProductOrder = mesProductOrderService.get(wmsPick.getOrderId());
  111. WmsBomMaterial query = new WmsBomMaterial();
  112. query.setBomId(mesProductOrder.getBomId());
  113. query.setStatus("0");
  114. List<WmsBomMaterial> bomItems = wmsBomMaterialService.findList(query);
  115. if (bomItems.isEmpty())
  116. return renderResult(Global.FALSE, text("订单BOM未配置有效物料!"));
  117. wmsPickService.save(wmsPick);
  118. for (WmsBomMaterial bomItem : bomItems)
  119. {
  120. WmsPickMaterial item = new WmsPickMaterial();
  121. item.setPickId(wmsPick.getId());
  122. item.setMaterialId(bomItem.getMaterialId());
  123. item.setPlanNums(Integer.valueOf(bomItem.getNums()) * wmsPick.getOrderNums());
  124. item.setPickNums(0);
  125. item.setState("0");
  126. item.setStatus("0");
  127. wmsPickMaterialService.save(item);
  128. }
  129. return renderResult(Global.TRUE, text("保存物料领料单成功!"));
  130. }
  131. @RequestMapping(value = "add")
  132. @Transactional
  133. @ResponseBody
  134. public String add(HttpServletRequest request) {
  135. String planId = request.getParameter("planId");
  136. if(StringUtils.isEmpty(planId)) {
  137. return renderResult(Global.FALSE, text("参数错误!"));
  138. }
  139. MesProductPlan mesProductPlan = mesProductPlanService.get(planId);
  140. if(ObjectUtils.isEmpty(mesProductPlan)) {
  141. return renderResult(Global.FALSE, text("参数错误!"));
  142. }
  143. if(mesProductPlan.getIsPick().equals("1")){
  144. return renderResult(Global.FALSE, text("已生成过领料单!"));
  145. }
  146. MesProductOrder mesProductOrder = mesProductOrderService.get(mesProductPlan.getOrderId());
  147. if (ObjectUtils.isEmpty(mesProductOrder)) {
  148. return renderResult(Global.FALSE, text("参数错误!"));
  149. }
  150. if (!"1".equals(mesProductOrder.getState())) {
  151. return renderResult(Global.FALSE, text("生产订单下发后才能生成领料单!"));
  152. }
  153. WmsBomMaterial wmsBomMaterial = new WmsBomMaterial();
  154. wmsBomMaterial.setStatus("0");
  155. wmsBomMaterial.setBomId(mesProductOrder.getBomId());
  156. List<WmsBomMaterial> lists = wmsBomMaterialService.findList(wmsBomMaterial);
  157. if (ListUtils.isEmpty(lists)) {
  158. return renderResult(Global.FALSE, text("BOM物料未设置!"));
  159. }
  160. WmsPick wmsPick = new WmsPick();
  161. wmsPick.setPlanId(planId);
  162. wmsPick.setOrderId(mesProductOrder.getId());
  163. wmsPick.setState("0");
  164. wmsPickService.save(wmsPick);
  165. mesProductPlan.setIsPick("1");
  166. mesProductPlanService.save(mesProductPlan);
  167. for (WmsBomMaterial wmsMaterial: lists) {
  168. WmsPickMaterial wmsPickMaterial = new WmsPickMaterial();
  169. wmsPickMaterial.setState("0");
  170. wmsPickMaterial.setStatus("0");
  171. wmsPickMaterial.setPickId(wmsPick.getId());
  172. wmsPickMaterial.setMaterialId(wmsMaterial.getMaterialId());
  173. int plan_nums = mesProductPlan.getNums() * Integer.valueOf(wmsMaterial.getNums());
  174. wmsPickMaterial.setPlanNums(plan_nums);
  175. wmsPickMaterial.setPickNums(0);
  176. wmsPickMaterialService.save(wmsPickMaterial);
  177. }
  178. return renderResult(Global.TRUE, text("操作成功!"));
  179. }
  180. /**
  181. * 删除数据
  182. */
  183. @RequiresPermissions("wms:wmsPick:edit")
  184. @RequestMapping(value = "delete")
  185. @ResponseBody
  186. public String delete(WmsPick wmsPick) {
  187. wmsPickService.delete(wmsPick);
  188. return renderResult(Global.TRUE, text("删除物料领料单成功!"));
  189. }
  190. @RequiresPermissions(value={"wms:wmsPick:view", "mes:mesProductOrder:view"}, logical=Logical.OR)
  191. @RequestMapping(value = "detail")
  192. public String detail(WmsPick wmsPick, Model model) {
  193. model.addAttribute("wmsPick", wmsPick);
  194. MesProductOrder order = wmsPick.getOrderId() == null ? null : mesProductOrderService.get(wmsPick.getOrderId());
  195. model.addAttribute("mesProductOrder", order);
  196. WmsPickMaterial wmsPickMaterial = new WmsPickMaterial();
  197. wmsPickMaterial.setStatus("0");
  198. wmsPickMaterial.setPickId(wmsPick.getId());
  199. List<WmsPickMaterial> lists = wmsPickMaterialService.findList(wmsPickMaterial);
  200. for (WmsPickMaterial item : lists) {
  201. WmsMaterial material = wmsMaterialService.get(new WmsMaterial(item.getMaterialId()));
  202. if (material != null) item.setMaterialTitle(material.getTitle());
  203. }
  204. model.addAttribute("lists", lists);
  205. model.addAttribute("hasPickItems", !lists.isEmpty());
  206. return "modules/wms/wmsPickInfo";
  207. }
  208. // @RequiresPermissions("wms:wmsPick:api")
  209. @RequestMapping(value = "lists")
  210. @ResponseBody
  211. public CommonResp lists(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) {
  212. CommonResp<Page> resp = new CommonResp<>();
  213. wmsPick.setPage(new Page<>(request, response));
  214. Page<WmsPick> page = wmsPickService.findPage(wmsPick);
  215. resp.setData(page);
  216. resp.setResult(Global.TRUE);
  217. return resp;
  218. }
  219. // @RequiresPermissions("wms:wmsPick:api")
  220. @RequestMapping(value = "info")
  221. @ResponseBody
  222. public CommonResp info(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) {
  223. CommonResp<WmsPick> resp = new CommonResp<>();
  224. String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/js";
  225. FileUpload fu = new FileUpload();
  226. fu.setBizKey(wmsPick.getId());
  227. fu.setBizType("wmsPick_image");
  228. List<FileUpload> finfo = fileUploadService.findList(fu);
  229. List imgList = ListUtils.newArrayList();
  230. for (FileUpload fi:finfo){
  231. Map<String, Object> map1 = MapUtils.newHashMap();
  232. map1.put("id",fi.getFileEntity().getFileId());
  233. map1.put("url",host + fi.getFileUrl());
  234. map1.put("name",fi.getFileName());
  235. map1.put("size",fi.getFileEntity().getFileSize());
  236. imgList.add(map1);
  237. }
  238. wmsPick.setImgList(imgList);
  239. WmsPickMaterial wmsPickMaterial = new WmsPickMaterial();
  240. wmsPickMaterial.setStatus("0");
  241. wmsPickMaterial.setPickId(wmsPick.getId());
  242. List<WmsPickMaterial> lists = wmsPickMaterialService.findList(wmsPickMaterial);
  243. for (WmsPickMaterial wmsMaterial: lists) {
  244. WmsMaterial wmsMaterial1 = wmsMaterialService.get(wmsMaterial.getMaterialId());
  245. wmsMaterial.setMaterialTitle(wmsMaterial1.getTitle());
  246. }
  247. wmsPick.setMaterialList(lists);
  248. resp.setData(wmsPick);
  249. resp.setResult(Global.TRUE);
  250. return resp;
  251. }
  252. }