diff --git a/src/main/java/com/glxp/api/constant/ConstantStatus.java b/src/main/java/com/glxp/api/constant/ConstantStatus.java index 77f8aad0a..f6ee07396 100644 --- a/src/main/java/com/glxp/api/constant/ConstantStatus.java +++ b/src/main/java/com/glxp/api/constant/ConstantStatus.java @@ -168,6 +168,7 @@ public class ConstantStatus { public static final int FROM_CHANGE = 6; //单据流转 public static final int FROM_UDISP = 7; //供应商平台 public static final int FROM_PEACE_CHANGE = 8; //平衡补单 + public static final int FROM_REVIEW = 9; //单据验收直接补单 public static final int FROM_COPY = 10; //单据复制 public static final int FROM_COUNT = 11; //盘点单据转单 public static final int FROM_PLAN = 12; //申购计划转单 diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java index b7849a652..03158120a 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderReviewController.java @@ -1,5 +1,6 @@ package com.glxp.api.controller.inout; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; @@ -11,17 +12,24 @@ import com.glxp.api.constant.Constant; import com.glxp.api.constant.ConstantStatus; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.auth.AuthAdmin; +import com.glxp.api.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.basic.EntrustReceEntity; -import com.glxp.api.entity.inout.IoCodeEntity; -import com.glxp.api.entity.inout.IoOrderDetailBizEntity; -import com.glxp.api.entity.inout.IoOrderDetailCodeEntity; -import com.glxp.api.entity.inout.IoOrderEntity; +import com.glxp.api.entity.inout.*; +import com.glxp.api.entity.system.SystemParamConfigEntity; import com.glxp.api.req.inout.FilterOrderDetailResultRequest; import com.glxp.api.req.inout.ReviewFinishRequest; +import com.glxp.api.req.inout.UpdateExportStatusRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.inout.AcceptOrderResponse; import com.glxp.api.res.inout.IoOrderDetailResultResponse; +import com.glxp.api.service.auth.AuthAdminService; +import com.glxp.api.service.basic.EntrustReceService; +import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.inout.*; +import com.glxp.api.service.system.SystemParamConfigService; +import com.glxp.api.util.CustomUtil; +import com.glxp.api.util.GennerOrderUtils; +import com.glxp.api.util.OrderNoTypeBean; import com.glxp.api.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; @@ -31,6 +39,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; @@ -87,11 +96,13 @@ public class IoOrderReviewController extends BaseController { if (orderEntity == null) { return ResultVOUtils.error(500, "未找到该业务单据"); } - return updateReview(orderEntity); + return updateReview(getUser(), orderEntity); } @Resource IoCodeService codeService; + @Resource + IoCodeTempService codeTempService; //前端扫码验收 @AuthRuleAnnotation("") @@ -151,6 +162,110 @@ public class IoOrderReviewController extends BaseController { } + @Resource + AuthAdminService authAdminService; + @Resource + EntrustReceService entrustReceService; + + + //手持终端验收完成后,更新订单状态 + @AuthRuleAnnotation("") + @PostMapping("/spms/inout/order/check/updateStatus") + public BaseResponse updateStatus(@RequestBody UpdateExportStatusRequest updateExportStatusRequest, + BindingResult bindingResult) { + AuthAdmin authAdmin = null; + if (StrUtil.isNotEmpty(updateExportStatusRequest.getWmsUserId())) { + authAdmin = authAdminService.findById(Long.parseLong(updateExportStatusRequest.getWmsUserId())); + } else + authAdmin = getUser(); + IoOrderEntity orderEntity = orderService.findByBillNo(updateExportStatusRequest.getOrderId()); + if (orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_AUDITED) { + return ResultVOUtils.error(500, "单据已验收!"); + } + if (updateExportStatusRequest.isEntrust() && updateExportStatusRequest.getEntrustId() != null) { + EntrustReceEntity entrustReceEntity = entrustReceService.findById(updateExportStatusRequest.getEntrustId()); + if (entrustReceEntity == null) { + return ResultVOUtils.error(500, "无验收权限!"); + } else { + + if (orderEntity.getFromType().intValue() != ConstantStatus.FROM_CHANGE && orderEntity.getFromType().intValue() != ConstantStatus.FROM_PEACE_CHANGE) { + if (StrUtil.isNotEmpty(entrustReceEntity.getEntrustAction())) { + transferOrder(orderEntity, entrustReceEntity); + } + } + if (!entrustReceEntity.getFinishRece()) { + redisUtil.del(ConstantStatus.REDIS_BILLNO + orderEntity.getBillNo()); + redisUtil.del(ConstantStatus.REDIS_BILLNO_CODES + orderEntity.getBillNo()); + return ResultVOUtils.success("验收成功!"); + } else + + return updateReview(authAdmin, orderEntity); + } + } else + return updateReview(authAdmin, orderEntity); + } + + @Resource + IBasicBussinessTypeService basicBussinessTypeService; + @Resource + GennerOrderUtils gennerOrderUtils; + @Resource + SystemParamConfigService systemParamConfigService; + + public void transferOrder(IoOrderEntity orderEntity, EntrustReceEntity entrustReceEntity) { + List warehouseEntities = codeService.findByOrderId(orderEntity.getBillNo()); + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(entrustReceEntity.getEntrustAction()); + IoOrderEntity supplementOrder = new IoOrderEntity(); + BeanUtil.copyProperties(orderEntity, supplementOrder); + //生成补单单号 + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); + String supplementOrderNo = orderNo; + supplementOrder.setOriginUllageSupNo(orderEntity.getBillNo()); + supplementOrder.setBillNo(supplementOrderNo); + + SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("additional_auto_submit"); + if ("1".equals(systemParamConfigEntity.getParamValue())) { + supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); //设置状态为补录单据 + } else { + supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_ADDITIONAL); //设置状态为补录单据 + } + + + supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); //设置导出状态为未导出 + supplementOrder.setCorpOrderId(CustomUtil.getId() + "x"); + //修改往来单位及当前库存号 + supplementOrder.setFromDeptCode(orderEntity.getDeptCode()); + supplementOrder.setFromInvCode(orderEntity.getInvCode()); + supplementOrder.setDeptCode(entrustReceEntity.getEntrustDept()); + supplementOrder.setInvCode(entrustReceEntity.getEntrustInv()); + supplementOrder.setFromType(ConstantStatus.FROM_REVIEW); + supplementOrder.setMainAction(bussinessTypeEntity.getMainAction()); + supplementOrder.setAction(bussinessTypeEntity.getAction()); + //复制码表 + List supplementCodes = new ArrayList<>(); + warehouseEntities.forEach( + code -> { + IoCodeTempEntity supplementCode = new IoCodeTempEntity(); + BeanUtil.copyProperties(code, supplementCode); + supplementCode.setInvCode(supplementOrder.getInvCode()); + supplementCode.setDeptCode(supplementOrder.getDeptCode()); + supplementCode.setOrderId(supplementOrderNo); + //查询补单设置 + supplementCode.setAction(bussinessTypeEntity.getSupplementOrderType()); + supplementCode.setMainAction(bussinessTypeEntity.getMainAction()); + supplementCode.setId(null); + supplementCodes.add(supplementCode); + + } + ); + //更新数据 + orderService.insertOrder(supplementOrder); + orderEntity.setUllageSupNo(supplementOrder.getBillNo()); + orderService.update(orderEntity); + codeTempService.insertBatch(supplementCodes); + } + + public int checkCodeExit(String code, List codesList) { if (StrUtil.isNotEmpty(code)) { code = code.replace("\r\n", ""); @@ -215,8 +330,7 @@ public class IoOrderReviewController extends BaseController { } - public BaseResponse updateReview(IoOrderEntity orderEntity) { - AuthAdmin authAdmin = getUser(); + public BaseResponse updateReview(AuthAdmin authAdmin, IoOrderEntity orderEntity) { orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED); orderEntity.setReviewUser(authAdmin.getId() + ""); orderEntity.setUpdateTime(new Date()); @@ -230,5 +344,4 @@ public class IoOrderReviewController extends BaseController { } - } diff --git a/src/main/java/com/glxp/api/controller/inv/UdiTraceController.java b/src/main/java/com/glxp/api/controller/inv/UdiTraceController.java new file mode 100644 index 000000000..5fbe2e51e --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/UdiTraceController.java @@ -0,0 +1,135 @@ +package com.glxp.api.controller.inv; + +import cn.hutool.core.util.StrUtil; +import com.github.pagehelper.PageInfo; +import com.glxp.api.annotation.AuthRuleAnnotation; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.entity.basic.UdiEntity; +import com.glxp.api.entity.basic.UdiProductEntity; +import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.req.basic.FilterUdiInfoRequest; +import com.glxp.api.req.basic.FilterUdiRelRequest; +import com.glxp.api.req.inout.FilterOrderRequest; +import com.glxp.api.req.inv.FilterCodeTraceRequest; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.basic.UdiRelevanceResponse; +import com.glxp.api.res.inout.IoOrderResponse; +import com.glxp.api.res.inv.UdiTraceResponse; +import com.glxp.api.service.basic.UdiProductService; +import com.glxp.api.service.basic.UdiRelevanceService; +import com.glxp.api.service.inout.IoOrderService; +import com.glxp.api.service.inv.InvProductDetailService; +import com.glxp.api.util.DateUtil; +import com.glxp.api.util.udi.FilterUdiUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@RestController +public class UdiTraceController { + + + @Resource + UdiRelevanceService udiRelevanceService; + @Resource + UdiProductService udiProductService; + @Resource + InvProductDetailService invProductDetailService; + @Resource + IoOrderService orderService; + + @AuthRuleAnnotation("") + @GetMapping("udiwarehouse/trace/filter") + public BaseResponse list(FilterCodeTraceRequest filterCodeTraceRequest) { + if (StrUtil.isEmpty(filterCodeTraceRequest.getCode())) { + return ResultVOUtils.error(500, "UDI码不能为空"); + } + UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeTraceRequest.getCode()); + if (udiEntity == null) { + return ResultVOUtils.error(500, "无效条码"); + } + UdiRelevanceResponse udiInfoBean = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + if (udiInfoBean == null) { + return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + } + List udiInfoEntities = udiProductService.findByUuids(udiInfoBean.getUuid()); + FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); + if (udiInfoEntities != null && udiInfoEntities.size() > 1) { + filterInvProductDetailRequest.setRelId(udiInfoBean.getId() + ""); + filterInvProductDetailRequest.setBatchNo(udiEntity.getBatchNo()); + } else { + filterInvProductDetailRequest.setCode(filterCodeTraceRequest.getCode()); + } + + + filterInvProductDetailRequest.setSupId(filterCodeTraceRequest.getSupId()); + List invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); + if (invProductDetailEntities.size() > 0) { + Map filterMap = new HashMap<>(); + + for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { + filterMap.put(invProductDetailEntity.getOrderId(), invProductDetailEntity.getOrderId()); + } + List orderIds = new ArrayList<>(); + for (String key : filterMap.keySet()) { + orderIds.add(key); + } + FilterOrderRequest filterOrderRequest = new FilterOrderRequest(); + filterOrderRequest.setOrderIds(orderIds); + List orderEntities = orderService.filterList(filterOrderRequest); + + + FilterUdiRelRequest filterUdiInfoRequest = new FilterUdiRelRequest(); + filterUdiInfoRequest.setNameCode(udiEntity.getUdi()); + List udiRelevanceResponses = udiRelevanceService.filterUdiGp(filterUdiInfoRequest); + UdiRelevanceResponse udiRelevance = null; + if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0) { + udiRelevance = udiRelevanceResponses.get(0); + } + + UdiRelevanceResponse finalUdiRelevance = udiRelevance; + List udiTraceResponseList = orderEntities.stream().map(item -> + { + UdiTraceResponse udiTraceResponse = new UdiTraceResponse(); + + udiTraceResponse.setOrderId(item.getBillNo()); + udiTraceResponse.setBillTypeName(item.getBillTypeName()); + udiTraceResponse.setFromCorp(item.getFromName()); + udiTraceResponse.setActDate(DateUtil.formatDate(item.getCreateTime())); + if (finalUdiRelevance != null) { + udiTraceResponse.setYlqxzcrbarmc(finalUdiRelevance.getYlqxzcrbarmc()); + udiTraceResponse.setCpmctymc(finalUdiRelevance.getCpmctymc()); + udiTraceResponse.setGgxh(finalUdiRelevance.getGgxh()); + InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); + udiTraceResponse.setBatchNo(invProductDetailEntity.getBatchNo()); + udiTraceResponse.setProduceDate(invProductDetailEntity.getProduceDate()); + udiTraceResponse.setExpireDate(invProductDetailEntity.getExpireDate()); + udiTraceResponse.setCount(invProductDetailEntity.getCount()); + } + return udiTraceResponse; + }).collect(Collectors.toList()); + + + PageInfo pageInfo; + pageInfo = new PageInfo<>(udiTraceResponseList); + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(udiTraceResponseList); + return ResultVOUtils.success(pageSimpleResponse); + } else { + return ResultVOUtils.error(500, "未查询到数据!"); + } + + } + + +} diff --git a/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java b/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java index 83032c839..c74f3747a 100644 --- a/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java +++ b/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java @@ -141,4 +141,7 @@ public class FilterOrderRequest extends ListPageRequest { */ private List dealStatuses; + + private List orderIds; + } diff --git a/src/main/java/com/glxp/api/req/inout/UpdateExportStatusRequest.java b/src/main/java/com/glxp/api/req/inout/UpdateExportStatusRequest.java new file mode 100644 index 000000000..952e16313 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inout/UpdateExportStatusRequest.java @@ -0,0 +1,16 @@ +package com.glxp.api.req.inout; + +import lombok.Data; + +@Data +public class UpdateExportStatusRequest { + + private String orderId; + private Integer exportStatus; + private Integer checkStatus; + private String stockOrderId; + private Integer entrustId; + private boolean entrust; + private String wmsUserId; + private String wmsUserName; +} diff --git a/src/main/java/com/glxp/api/req/inv/FilterCodeTraceRequest.java b/src/main/java/com/glxp/api/req/inv/FilterCodeTraceRequest.java new file mode 100644 index 000000000..6943e91d3 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterCodeTraceRequest.java @@ -0,0 +1,9 @@ +package com.glxp.api.req.inv; + +import lombok.Data; + +@Data +public class FilterCodeTraceRequest { + private String code; + private String supId; +} diff --git a/src/main/java/com/glxp/api/res/inv/UdiTraceResponse.java b/src/main/java/com/glxp/api/res/inv/UdiTraceResponse.java new file mode 100644 index 000000000..f59ac1845 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/UdiTraceResponse.java @@ -0,0 +1,22 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +@Data +public class UdiTraceResponse { + + private String orderId; + private String actDate; + private String mainAction; + private String action; + private String actionName; + private String fromCorp; + private Integer count; + private String cpmctymc; + private String ylqxzcrbarmc; + private String ggxh; + private String batchNo; + private String produceDate; + private String expireDate; + private String billTypeName; +} diff --git a/src/main/java/com/glxp/api/service/inout/IoOrderService.java b/src/main/java/com/glxp/api/service/inout/IoOrderService.java index b6cca5562..e11167587 100644 --- a/src/main/java/com/glxp/api/service/inout/IoOrderService.java +++ b/src/main/java/com/glxp/api/service/inout/IoOrderService.java @@ -31,6 +31,7 @@ public interface IoOrderService { int deleteByBillNo(String billNo); + /** * 查询单据列表 * diff --git a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml index e7a100be7..2fd6b77d3 100644 --- a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml +++ b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml @@ -59,6 +59,12 @@ #{item} + + AND io.billNo in + + #{item} + + AND status = #{status}