package com.jeesite.modules.wms.web; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jeesite.common.collect.ListUtils; import com.jeesite.common.collect.MapUtils; import com.jeesite.common.lang.ObjectUtils; import com.jeesite.common.lang.StringUtils; import com.jeesite.modules.file.entity.FileUpload; import com.jeesite.modules.file.service.FileUploadService; import com.jeesite.modules.mes.entity.MesProduct; import com.jeesite.modules.mes.entity.MesProductOrder; import com.jeesite.modules.mes.entity.MesProductPlan; import com.jeesite.modules.mes.resp.CommonResp; import com.jeesite.modules.mes.service.MesProductOrderService; import com.jeesite.modules.mes.service.MesProductPlanService; import com.jeesite.modules.wms.entity.*; import com.jeesite.modules.wms.service.WmsBomMaterialService; import com.jeesite.modules.wms.service.WmsMaterialService; import com.jeesite.modules.wms.service.WmsPickMaterialService; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.Logical; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.jeesite.common.config.Global; import com.jeesite.common.entity.Page; import com.jeesite.common.web.BaseController; import com.jeesite.modules.wms.service.WmsPickService; /** * 物料领料单Controller * @author hzd * @version 2026-03-15 */ @Controller @RequestMapping(value = "${adminPath}/wms/wmsPick") public class WmsPickController extends BaseController { @Autowired private WmsPickService wmsPickService; @Autowired private MesProductPlanService mesProductPlanService; @Autowired private MesProductOrderService mesProductOrderService; @Autowired private WmsBomMaterialService wmsBomMaterialService; @Autowired private WmsPickMaterialService wmsPickMaterialService; @Autowired private FileUploadService fileUploadService; @Autowired private WmsMaterialService wmsMaterialService; /** * 获取数据 */ @ModelAttribute public WmsPick get(String id, boolean isNewRecord) { return wmsPickService.get(id, isNewRecord); } /** * 查询列表 */ @RequiresPermissions("wms:wmsPick:view") @RequestMapping(value = {"list", ""}) public String list(WmsPick wmsPick, Model model) { model.addAttribute("wmsPick", wmsPick); return "modules/wms/wmsPickList"; } /** * 查询列表数据 */ @RequiresPermissions(value={"wms:wmsPick:view", "mes:mesProductOrder:view"}, logical=Logical.OR) @RequestMapping(value = "listData") @ResponseBody public Page listData(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) { wmsPick.setPage(new Page<>(request, response)); Page page = wmsPickService.findPage(wmsPick); // 兼容不同 MyBatis 驼峰映射配置,确保列表始终返回生产订单编号。 for (WmsPick pick : page.getList()) { if (StringUtils.isEmpty(pick.getOrderSn()) && !StringUtils.isEmpty(pick.getOrderId())) { MesProductOrder order = mesProductOrderService.get(pick.getOrderId()); if (order != null) pick.setOrderSn(order.getSn()); } } return page; } /** * 查看编辑表单 */ @RequiresPermissions("wms:wmsPick:view") @RequestMapping(value = "form") public String form(WmsPick wmsPick, Model model) { model.addAttribute("wmsPick", wmsPick); return "modules/wms/wmsPickForm"; } /** * 保存数据 */ @RequiresPermissions("wms:wmsPick:edit") @PostMapping(value = "save") @ResponseBody public String save(@Validated WmsPick wmsPick) { MesProductOrder mesProductOrder = mesProductOrderService.get(wmsPick.getOrderId()); WmsBomMaterial query = new WmsBomMaterial(); query.setBomId(mesProductOrder.getBomId()); query.setStatus("0"); List bomItems = wmsBomMaterialService.findList(query); if (bomItems.isEmpty()) return renderResult(Global.FALSE, text("订单BOM未配置有效物料!")); wmsPickService.save(wmsPick); for (WmsBomMaterial bomItem : bomItems) { WmsPickMaterial item = new WmsPickMaterial(); item.setPickId(wmsPick.getId()); item.setMaterialId(bomItem.getMaterialId()); item.setPlanNums(Integer.valueOf(bomItem.getNums()) * wmsPick.getOrderNums()); item.setPickNums(0); item.setState("0"); item.setStatus("0"); wmsPickMaterialService.save(item); } return renderResult(Global.TRUE, text("保存物料领料单成功!")); } @RequestMapping(value = "add") @Transactional @ResponseBody public String add(HttpServletRequest request) { String planId = request.getParameter("planId"); if(StringUtils.isEmpty(planId)) { return renderResult(Global.FALSE, text("参数错误!")); } MesProductPlan mesProductPlan = mesProductPlanService.get(planId); if(ObjectUtils.isEmpty(mesProductPlan)) { return renderResult(Global.FALSE, text("参数错误!")); } if(mesProductPlan.getIsPick().equals("1")){ return renderResult(Global.FALSE, text("已生成过领料单!")); } MesProductOrder mesProductOrder = mesProductOrderService.get(mesProductPlan.getOrderId()); if (ObjectUtils.isEmpty(mesProductOrder)) { return renderResult(Global.FALSE, text("参数错误!")); } if (!"1".equals(mesProductOrder.getState())) { return renderResult(Global.FALSE, text("生产订单下发后才能生成领料单!")); } WmsBomMaterial wmsBomMaterial = new WmsBomMaterial(); wmsBomMaterial.setStatus("0"); wmsBomMaterial.setBomId(mesProductOrder.getBomId()); List lists = wmsBomMaterialService.findList(wmsBomMaterial); if (ListUtils.isEmpty(lists)) { return renderResult(Global.FALSE, text("BOM物料未设置!")); } WmsPick wmsPick = new WmsPick(); wmsPick.setPlanId(planId); wmsPick.setOrderId(mesProductOrder.getId()); wmsPick.setState("0"); wmsPickService.save(wmsPick); mesProductPlan.setIsPick("1"); mesProductPlanService.save(mesProductPlan); for (WmsBomMaterial wmsMaterial: lists) { WmsPickMaterial wmsPickMaterial = new WmsPickMaterial(); wmsPickMaterial.setState("0"); wmsPickMaterial.setStatus("0"); wmsPickMaterial.setPickId(wmsPick.getId()); wmsPickMaterial.setMaterialId(wmsMaterial.getMaterialId()); int plan_nums = mesProductPlan.getNums() * Integer.valueOf(wmsMaterial.getNums()); wmsPickMaterial.setPlanNums(plan_nums); wmsPickMaterial.setPickNums(0); wmsPickMaterialService.save(wmsPickMaterial); } return renderResult(Global.TRUE, text("操作成功!")); } /** * 删除数据 */ @RequiresPermissions("wms:wmsPick:edit") @RequestMapping(value = "delete") @ResponseBody public String delete(WmsPick wmsPick) { wmsPickService.delete(wmsPick); return renderResult(Global.TRUE, text("删除物料领料单成功!")); } @RequiresPermissions(value={"wms:wmsPick:view", "mes:mesProductOrder:view"}, logical=Logical.OR) @RequestMapping(value = "detail") public String detail(WmsPick wmsPick, Model model) { model.addAttribute("wmsPick", wmsPick); MesProductOrder order = wmsPick.getOrderId() == null ? null : mesProductOrderService.get(wmsPick.getOrderId()); model.addAttribute("mesProductOrder", order); WmsPickMaterial wmsPickMaterial = new WmsPickMaterial(); wmsPickMaterial.setStatus("0"); wmsPickMaterial.setPickId(wmsPick.getId()); List lists = wmsPickMaterialService.findList(wmsPickMaterial); for (WmsPickMaterial item : lists) { WmsMaterial material = wmsMaterialService.get(new WmsMaterial(item.getMaterialId())); if (material != null) item.setMaterialTitle(material.getTitle()); } model.addAttribute("lists", lists); model.addAttribute("hasPickItems", !lists.isEmpty()); return "modules/wms/wmsPickInfo"; } // @RequiresPermissions("wms:wmsPick:api") @RequestMapping(value = "lists") @ResponseBody public CommonResp lists(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) { CommonResp resp = new CommonResp<>(); wmsPick.setPage(new Page<>(request, response)); Page page = wmsPickService.findPage(wmsPick); resp.setData(page); resp.setResult(Global.TRUE); return resp; } // @RequiresPermissions("wms:wmsPick:api") @RequestMapping(value = "info") @ResponseBody public CommonResp info(WmsPick wmsPick, HttpServletRequest request, HttpServletResponse response) { CommonResp resp = new CommonResp<>(); String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/js"; FileUpload fu = new FileUpload(); fu.setBizKey(wmsPick.getId()); fu.setBizType("wmsPick_image"); List finfo = fileUploadService.findList(fu); List imgList = ListUtils.newArrayList(); for (FileUpload fi:finfo){ Map map1 = MapUtils.newHashMap(); map1.put("id",fi.getFileEntity().getFileId()); map1.put("url",host + fi.getFileUrl()); map1.put("name",fi.getFileName()); map1.put("size",fi.getFileEntity().getFileSize()); imgList.add(map1); } wmsPick.setImgList(imgList); WmsPickMaterial wmsPickMaterial = new WmsPickMaterial(); wmsPickMaterial.setStatus("0"); wmsPickMaterial.setPickId(wmsPick.getId()); List lists = wmsPickMaterialService.findList(wmsPickMaterial); for (WmsPickMaterial wmsMaterial: lists) { WmsMaterial wmsMaterial1 = wmsMaterialService.get(wmsMaterial.getMaterialId()); wmsMaterial.setMaterialTitle(wmsMaterial1.getTitle()); } wmsPick.setMaterialList(lists); resp.setData(wmsPick); resp.setResult(Global.TRUE); return resp; } }