package com.jeesite.modules.mes.web; import com.jeesite.common.config.Global; import com.jeesite.common.entity.Page; import com.jeesite.common.lang.StringUtils; import com.jeesite.common.web.BaseController; import com.jeesite.modules.mes.erp.ErpPrdInStock; import com.jeesite.modules.mes.erp.ErpPrdInStockService; import com.jeesite.modules.mes.erp.ErpProductionOrder; import com.jeesite.modules.mes.erp.ErpProductionOrderService; import com.jeesite.modules.mes.erp.ErpStockLocOption; import com.jeesite.modules.mes.erp.ErpStockLocService; import com.jeesite.modules.mes.erp.ErpStockOption; import com.jeesite.modules.mes.erp.ErpStockService; import com.jeesite.modules.mes.erp.ErpTransferDirect; import com.jeesite.modules.mes.erp.ErpTransferDirectResult; import com.jeesite.modules.mes.erp.ErpTransferDirectSaveService; import com.jeesite.modules.mes.erp.ErpTransferDirectService; import com.jeesite.modules.mes.erp.ErpTransferDirectSubmitRequest; import com.jeesite.modules.mes.erp.KingdeeErpProperties; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * ERP 直接调拨单查询与新增。 */ @Controller @RequestMapping(value = "${adminPath}/mes/erpTransferDirect") public class ErpTransferDirectController extends BaseController { private final ErpTransferDirectService erpTransferDirectService; private final ErpTransferDirectSaveService erpTransferDirectSaveService; private final ErpProductionOrderService erpProductionOrderService; private final ErpPrdInStockService erpPrdInStockService; private final ErpStockService erpStockService; private final ErpStockLocService erpStockLocService; private final KingdeeErpProperties erpProperties; public ErpTransferDirectController(ErpTransferDirectService erpTransferDirectService, ErpTransferDirectSaveService erpTransferDirectSaveService, ErpProductionOrderService erpProductionOrderService, ErpPrdInStockService erpPrdInStockService, ErpStockService erpStockService, ErpStockLocService erpStockLocService, KingdeeErpProperties erpProperties) { this.erpTransferDirectService = erpTransferDirectService; this.erpTransferDirectSaveService = erpTransferDirectSaveService; this.erpProductionOrderService = erpProductionOrderService; this.erpPrdInStockService = erpPrdInStockService; this.erpStockService = erpStockService; this.erpStockLocService = erpStockLocService; this.erpProperties = erpProperties; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = {"list", ""}) public String list(ErpTransferDirect erpTransferDirect, Model model) { model.addAttribute("erpTransferDirect", erpTransferDirect); return "modules/mes/erpTransferDirectList"; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "listData") @ResponseBody public Page listData(ErpTransferDirect erpTransferDirect, HttpServletRequest request, HttpServletResponse response) { Page page = new Page<>(request, response); int pageSize = page.getPageSize() > 0 ? page.getPageSize() : 20; int pageNo = page.getPageNo() > 0 ? page.getPageNo() : 1; int startRow = (pageNo - 1) * pageSize; List list = erpTransferDirectService.findPageList(erpTransferDirect, startRow, pageSize); page.setList(list); page.setCount(startRow + list.size() + (list.size() == pageSize ? 1 : 0)); return page; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "detail") public String detail(ErpTransferDirect erpTransferDirect, Model model) { model.addAttribute("erpTransferDirect", erpTransferDirect); return "modules/mes/erpTransferDirectDetail"; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "detailData") @ResponseBody public Page detailData(ErpTransferDirect erpTransferDirect, HttpServletRequest request, HttpServletResponse response) { Page page = new Page<>(request, response); List list = erpTransferDirectService.findDetailList(erpTransferDirect.getBillNo()); page.setList(list); page.setCount(list.size()); return page; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "selectOrder") public String selectOrder(ErpProductionOrder erpProductionOrder, Model model) { model.addAttribute("erpProductionOrder", erpProductionOrder); return "modules/mes/erpTransferDirectSelectOrder"; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "selectOrderData") @ResponseBody public Page selectOrderData(ErpProductionOrder erpProductionOrder, HttpServletRequest request, HttpServletResponse response) { Page page = new Page<>(request, response); int pageSize = page.getPageSize() > 0 ? page.getPageSize() : 20; int pageNo = page.getPageNo() > 0 ? page.getPageNo() : 1; int startRow = (pageNo - 1) * pageSize; // 与生产入库一致:仅展示配置 HEV/115 物料(.10)的生产订单 List list = erpProductionOrderService.findPrdInStockOrderPageList( erpProductionOrder.getBillNo(), startRow, pageSize); page.setList(list); page.setCount(startRow + list.size() + (list.size() == pageSize ? 1 : 0)); return page; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "form") public String form(String moBillNo, Model model) { String billNo = StringUtils.trim(moBillNo); List sourceList = erpPrdInStockService.findTransferSourceByMoBillNo(billNo); List stockList = erpStockService.findUsableStockList(); model.addAttribute("moBillNo", billNo); model.addAttribute("sourceList", sourceList); model.addAttribute("stockList", stockList); model.addAttribute("defaultSrcStockNumber", erpStockService.resolveDefaultStockNumber(stockList)); model.addAttribute("defaultDestStockNumber", StringUtils.trim(erpProperties.getTransferDirectDefaultDestStockNumber())); if (sourceList.isEmpty()) { model.addAttribute("message", "该生产订单暂无 HEV/115 生产入库行,请先完成生产入库"); } return "modules/mes/erpTransferDirectForm"; } /** * PDA/前端:入库仓库列表。 */ @RequiresPermissions("mes:erpTransferDirect:view") @GetMapping(value = "stockList") @ResponseBody public Map stockList() { List stocks = erpStockService.findUsableStockList(); Map result = new HashMap<>(4); result.put("stockList", stocks); result.put("defaultStockNumber", erpStockService.resolveDefaultStockNumber(stocks)); result.put("defaultDestStockNumber", StringUtils.trim(erpProperties.getTransferDirectDefaultDestStockNumber())); result.put("stockHint", stocks.isEmpty() ? "未能从 ERP 加载仓库列表" : "共 " + stocks.size() + " 个可用仓库"); return result; } /** * PDA/前端:新增调拨页初始化(生产入库源行 + 仓库)。 */ @RequiresPermissions("mes:erpTransferDirect:view") @GetMapping(value = "formInit") @ResponseBody public Map formInit(String moBillNo) { Map result = new HashMap<>(10); String billNo = StringUtils.trim(moBillNo); result.put("moBillNo", billNo); if (StringUtils.isBlank(billNo)) { result.put("result", Global.FALSE); result.put("message", "生产订单号不能为空"); result.put("sourceList", Collections.emptyList()); return result; } List sourceList = erpPrdInStockService.findTransferSourceByMoBillNo(billNo); result.put("result", Global.TRUE); result.put("sourceList", sourceList); if (sourceList.isEmpty()) { result.put("message", "该生产订单暂无 HEV/115 生产入库行,请先完成生产入库"); } else { result.put("message", ""); } List stocks = erpStockService.findUsableStockList(); result.put("stockList", stocks); result.put("defaultSrcStockNumber", erpStockService.resolveDefaultStockNumber(stocks)); result.put("defaultDestStockNumber", StringUtils.trim(erpProperties.getTransferDirectDefaultDestStockNumber())); return result; } @RequiresPermissions("mes:erpTransferDirect:view") @RequestMapping(value = "instockSourceData") @ResponseBody public Page instockSourceData(String moBillNo, HttpServletRequest request, HttpServletResponse response) { Page page = new Page<>(request, response); List list = erpPrdInStockService.findTransferSourceByMoBillNo(moBillNo); page.setList(list); page.setCount(list.size()); return page; } @RequiresPermissions("mes:erpTransferDirect:view") @GetMapping(value = "stockLocOptions") @ResponseBody public Map stockLocOptions(String stockNumber) { List locations = erpStockLocService.findLocationsByStock(stockNumber); Map result = new HashMap<>(4); boolean required = !locations.isEmpty(); result.put("required", required); result.put("locations", locations); result.put("defaultLocNumber", erpStockLocService.resolveDefaultLocNumber(stockNumber, locations)); if (locations.isEmpty()) { result.put("locHint", "该仓库未启用仓位或未配置仓位值集"); } else { result.put("locHint", "共 " + locations.size() + " 个仓位"); } return result; } @RequiresPermissions("mes:erpTransferDirect:view") @PostMapping(value = "submit") @ResponseBody public String submit(@RequestBody ErpTransferDirectSubmitRequest request) { ErpTransferDirectResult result = erpTransferDirectSaveService.submit(request); if (result.isSuccess()) { return renderResult(Global.TRUE, text("直接调拨单保存成功,单号:{0}", result.getBillNo())); } return renderResult(Global.FALSE, result.getMessage()); } }