package com.ruoyi.api.controller; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.ruoyi.api.domain.ErpProduct; import com.ruoyi.api.domain.ReMaterialParam; import com.ruoyi.api.domain.RequestEnter; import com.ruoyi.api.domain.WmsJobRequest; import com.ruoyi.api.service.IToWmsService; import com.ruoyi.bas.BasCustomer.domain.BasCustomer; import com.ruoyi.bas.BasCustomer.service.IBasCustomerService; import com.ruoyi.bas.BasProduct.domain.BasProduct; import com.ruoyi.bas.BasProduct.service.IBasProductService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.log.domain.RequestLog; import com.ruoyi.log.service.IRequestLogService; import com.ruoyi.out.outStockout.domain.OutStockout; import com.ruoyi.out.outStockout.domain.OutStockoutVo; import com.ruoyi.out.outStockout.service.IOutStockoutService; import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * 作业统计 Controller */ @RestController @RequestMapping("/api2wms") public class ToWmsApiController { @Autowired private IToWmsService toWmsService; @Autowired private IRequestLogService requestLogService; @Autowired private IOutStockoutService outStockoutService; @Autowired private IBasProductService basProductService; @Autowired private IBasCustomerService basCustomerService; /** * 入库请求生成作业 */ @PostMapping("/requestEnterByTrayCode") public AjaxResult requestEnterByTrayCode(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.requestEnterByTrayCode(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "入库任务创建请求", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 请求补码作业 */ @RequestMapping("/requestByNoTrayCode") public AjaxResult requestByNoTrayCode(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.selectMydoJobByEntranceId(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "请求补码作业", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 获取入库作业 */ @RequestMapping("/requestEnterByTrayCodeAndEntranceId") public AjaxResult requestEnterByTrayCodeAndEntranceId(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.requestEnterByTrayCodeAndEntranceId(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "获取入库作业", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 入库、出库 任务完成回传 * Map * "wmsType": "任务类型" 1-入库 2-出库 3-agv搬运, * taskNo:出库 入库任务号 * trayCode:托盘码 * positionCode1:起点 * positionCode2:终点 * containerCode:容器编码 */ @PostMapping("/jobFinish") public AjaxResult jobFinish(@RequestBody WmsJobRequest wmsJobRequest) { AjaxResult ajaxResult = toWmsService.jobFinish(wmsJobRequest); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(wmsJobRequest), "jobFinish", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 放货有货,重新分配货位 */ @PostMapping("/reAssign") public AjaxResult reAssign(@RequestBody ReMaterialParam reMaterialParam) { AjaxResult ajaxResult = toWmsService.reAssign(reMaterialParam); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(reMaterialParam), "reAssign", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 取货无货,重新分配物料 */ @PostMapping("/reMaterial") public AjaxResult reMaterial(@RequestBody ReMaterialParam reMaterialParam) { AjaxResult ajaxResult = toWmsService.reMaterial(reMaterialParam); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(reMaterialParam), "reMaterial", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 出库单据保存 * * @param json * @return */ //@Log(title = "出库主单保存", businessType = BusinessType.OTHER) @PostMapping("/saveOutBill") @ResponseBody public AjaxResult saveBill(@RequestBody String json) { JSONObject jsonObject = JSONUtil.parseObj(json); Object codeObj = jsonObject.get("std_data"); JSONObject obj = JSONUtil.parseObj(codeObj.toString()); String doc = JSONUtil.parseObj(obj.get("parameter").toString()).get("data").toString(); JSONObject param = JSONUtil.parseObj(doc); OutStockoutVo outStockoutVo = new OutStockoutVo(); OutStockout outStockout = new OutStockout(); List list = new ArrayList<>(); outStockout.setStockoutId(param.get("doc_no").toString()); List outStockout1 = outStockoutService.selectOutStockoutList(outStockout); if (outStockout1.size() > 0) { return AjaxResult.error("单据已推送!"); } outStockout.setStockoutGuid(UUID.randomUUID().toString()); outStockout.setOutType("1"); outStockout.setCreateDate(DateUtil.formatDateTime(new Date())); outStockout.setCreateManId(param.get("create_user_name").toString()); outStockout.setCustomerNo(param.get("customer_no").toString()); BasCustomer customer = basCustomerService.selectBasCustomerByNo(param.get("customer_no").toString()); if (customer == null) { BasCustomer basCustomer = new BasCustomer(); basCustomer.setId(UUID.randomUUID().toString()); basCustomer.setCustomerNo(param.get("customer_no").toString()); basCustomer.setCustomerName(param.get("customer_name").toString()); basCustomer.setUseable("1"); basCustomerService.insertBasCustomer(basCustomer); } outStockout.setStatus("1"); outStockout.setStockoutSource("1"); outStockout.setWarehouseId("01"); JSONArray erpList = JSONUtil.parseArray(param.get("sales_issue_detail").toString()); if (erpList.size() > 0) { for (int i = 0; i < erpList.size(); i++) { JSONObject msg = (JSONObject) erpList.get(i); OutStockoutDetail detail = new OutStockoutDetail(); detail.setStockoutDetailId(msg.get("sales_delivery_no").toString()); detail.setStockoutGuid(outStockout.getStockoutGuid()); detail.setStockoutId(outStockout.getStockoutId()); detail.setProductId(msg.get("item_no").toString()); detail.setProductName(msg.get("item_name").toString()); detail.setSpec(msg.get("item_spec").toString()); detail.setQuantity(new BigDecimal(msg.get("business_qty").toString())); detail.setAllotQuantity(BigDecimal.ZERO); detail.setAssignNum(BigDecimal.ZERO); detail.setRemark(msg.get("udf021").toString()); list.add(detail); } } outStockoutVo.setOutStockout(outStockout); outStockoutVo.setDetailList(list); String stockOutId = outStockoutService.saveBillErp(outStockoutVo); AjaxResult ajaxResult = AjaxResult.success(stockOutId); RequestLog requestLog = requestLogService.getRequestLog(json, "出库单据保存", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 接收物料 */ //@Log(title = "接收物料", businessType = BusinessType.INSERT) @PutMapping("/receiveProduct") public AjaxResult receiveProduct(@RequestBody String json) { JSONObject jsonObject = JSONUtil.parseObj(json); Object codeObj = jsonObject.get("std_data"); JSONObject obj = JSONUtil.parseObj(codeObj.toString()); String doc = JSONUtil.parseObj(obj.get("parameter").toString()).get("data").toString(); JSONObject param = JSONUtil.parseObj(doc); BasProduct basProduct = new BasProduct(); basProduct.setProductGuid(param.get("item_no").toString()); basProduct.setProductId(param.get("item_no").toString()); basProduct.setProductName(param.get("item_name").toString()); basProduct.setPrice(param.get("item_desc").toString()); basProduct.setSpec(param.get("item_spec").toString()); basProduct.setUnit(param.get("inv_unit_no").toString()); AjaxResult ajaxResult = toWmsService.receiveProduct(basProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(basProduct), "接收物料", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 修改物料管理 */ //@Log(title = "修改物料管理", businessType = BusinessType.UPDATE) @PutMapping("/updateProduct") public AjaxResult updateProduct(@RequestBody ErpProduct erpProduct) { AjaxResult ajaxResult = toWmsService.updateProduct(erpProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(erpProduct), "修改物料管理", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 作废物料 */ //@Log(title = "作废物料", businessType = BusinessType.UPDATE) @PutMapping("/InvalidProduct") public AjaxResult InvalidProduct(@RequestBody String json) { JSONObject jsonObject = JSONUtil.parseObj(json); Object codeObj = jsonObject.get("std_data"); JSONObject obj = JSONUtil.parseObj(codeObj.toString()); String doc = JSONUtil.parseObj(obj.get("parameter").toString()).get("data").toString(); JSONObject param = JSONUtil.parseObj(doc); BasProduct basProduct = new BasProduct(); basProduct.setProductGuid(param.get("item_no").toString()); basProduct.setProductId(param.get("item_no").toString()); basProduct.setProductName(param.get("item_name").toString()); basProduct.setPrice(param.get("item_desc").toString()); basProduct.setSpec(param.get("item_spec").toString()); basProduct.setUnit(param.get("inv_unit_no").toString()); AjaxResult ajaxResult = toWmsService.InvalidProduct(basProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(basProduct), "作废物料", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } }