diff --git a/src/main/java/com/glxp/api/constant/Constant.java b/src/main/java/com/glxp/api/constant/Constant.java index 139dfb3fe..edcad22f7 100644 --- a/src/main/java/com/glxp/api/constant/Constant.java +++ b/src/main/java/com/glxp/api/constant/Constant.java @@ -156,6 +156,17 @@ public class Constant { //-------------前端页面查询单据列表标识类型------------------ + + /** + * 单据--新增扫码单据标识 + */ + public static final String ORDER_STATUS_SCAN_CODEE = "scan_code"; + + /** + * 单据--新增扫码单据标识 + */ + public static final String ORDER_STATUS_NEW_BIZ = "new_biz"; + /** * 单据-草稿标识 */ diff --git a/src/main/java/com/glxp/api/constant/ConstantStatus.java b/src/main/java/com/glxp/api/constant/ConstantStatus.java index c0d2d2f40..77f8aad0a 100644 --- a/src/main/java/com/glxp/api/constant/ConstantStatus.java +++ b/src/main/java/com/glxp/api/constant/ConstantStatus.java @@ -54,10 +54,10 @@ public class ConstantStatus { /** - * 单据创建类型 1.新增扫码单据,2、新增业务单据,3、正常单据处理 + * 单据创建类型 2.新增扫码单据,1、新增业务单据,3、正常单据处理 */ - public static final Integer ORDER_TYPE_SCAN = 1; - public static final Integer ORDER_TYPE_BIZ = 2; + public static final Integer ORDER_TYPE_BIZ = 1; + public static final Integer ORDER_TYPE_SCAN = 2; public static final Integer ORDER_TYPE_NORMAL = 3; diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index 189a27888..0671dc0cc 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -584,6 +584,7 @@ public class IoCodeTempController extends BaseController { orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); orderEntity.setDeptCode(invWarehouseEntity.getParentId()); orderEntity.setInvCode(addOrderRequest.getInvCode()); + orderEntity.setOrderType(addOrderRequest.getOrderType()); orderService.insertOrder(orderEntity); } diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java index 9968376ab..2c72695e6 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -6,6 +6,8 @@ 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.constant.ConstantStatus; +import com.glxp.api.controller.BaseController; import com.glxp.api.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.inout.IoCodeTempEntity; import com.glxp.api.entity.inout.IoOrderDetailBizEntity; @@ -25,12 +27,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.Date; import java.util.List; @Slf4j @RestController -public class IoOrderController { +public class IoOrderController extends BaseController { @Resource private IoOrderService orderService; @@ -49,7 +52,6 @@ public class IoOrderController { * 查询单据列表 * * @param filterOrderRequest - * @param bindingResult * @return */ @GetMapping("/udiwms/inout/order/filter") @@ -101,8 +103,63 @@ public class IoOrderController { @Resource IoAddInoutService ioAddInoutService; + @Resource + IoCheckInoutService ioCheckInoutService; + + + //新增业务单据提交 + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/submitBiz") + public BaseResponse submitBiz(@RequestBody AddOrderRequest addOrderRequest) { + + //校验单据是否已完成 + List orderDetailBizEntities = orderDetailBizService.findByOrderId(addOrderRequest.getBillNo()); + + if (CollUtil.isEmpty(orderDetailBizEntities)) { + return ResultVOUtils.error(500, "请先录入产品!"); + } + for (IoOrderDetailBizEntity orderDetailBizEntity : orderDetailBizEntities) { + + if (orderDetailBizEntity.getBindRlFk() == null) { + return ResultVOUtils.error(500, orderDetailBizEntity.getCoName() + "该产品未指定唯一耗材编码!"); + } + + if (StrUtil.isEmpty(orderDetailBizEntity.getSupId())) { + return ResultVOUtils.error(500, orderDetailBizEntity.getCoName() + "该产品未指定供应商!"); + } + } + IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo()); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK); + orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_POST); + orderEntity.setUpdateTime(new Date()); + orderEntity.setUpdateUser(getUserId() + ""); + orderService.update(orderEntity); + return ResultVOUtils.success("提交成功!"); + } - //单据提交 + //新增扫码单据提交 + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/submitCodes") + public BaseResponse submitCodes(@RequestBody AddOrderRequest addOrderRequest) { + + //校验单据是否已完成 + List orderDetailCodeEntities = orderDetailCodeService.findByOrderId(addOrderRequest.getBillNo()); + + if (CollUtil.isEmpty(orderDetailCodeEntities)) { + return ResultVOUtils.error(500, "单据还未扫码!"); + } + IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo()); + ioAddInoutService.dealProcess(orderEntity); + + //不需要手动校验,则走正常单据校验处理流程 + if (!ioCheckInoutService.checkManual(orderEntity.getBillNo())) { + ioCheckInoutService.check(orderEntity.getBillNo()); + } + return ResultVOUtils.success("提交成功,等待处理!"); + } + + + //处理后单据提交 @AuthRuleAnnotation("") @PostMapping("warehouse/inout/submitOrderWeb") public BaseResponse submitOrderWeb(@RequestBody AddOrderRequest addOrderRequest) { @@ -115,19 +172,24 @@ public class IoOrderController { return ResultVOUtils.error(500, "单据还未扫码!"); } - if (CollUtil.isNotEmpty(orderDetailBizEntities)) { - String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities); - if (StrUtil.isNotEmpty(errMsg)) { - return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!"); + if (checkInoutService.checkManual(addOrderRequest.getBillNo())) { + if (CollUtil.isNotEmpty(orderDetailBizEntities)) { + String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities); + if (StrUtil.isNotEmpty(errMsg)) { + return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!"); + } + saveOrderWeb(addOrderRequest); + checkInoutService.check(addOrderRequest.getBillNo()); + } else { + return ResultVOUtils.error(500, "单据未校验完成,请先录入业务单据!"); } - saveOrderWeb(addOrderRequest); - checkInoutService.check(addOrderRequest.getBillNo()); } else { IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo()); ioAddInoutService.dealProcess(orderEntity); + checkInoutService.check(addOrderRequest.getBillNo()); + return ResultVOUtils.success("提交成功!"); } - return ResultVOUtils.success("提交成功!"); } diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderDetailCodeController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderDetailCodeController.java index aab09deb9..3eeec2dd7 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderDetailCodeController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderDetailCodeController.java @@ -5,10 +5,13 @@ import com.glxp.api.annotation.AuthRuleAnnotation; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.dao.inout.IoOrderDetailCodeDao; +import com.glxp.api.entity.inout.IoOrderDetailBizEntity; import com.glxp.api.entity.inout.IoOrderDetailCodeEntity; import com.glxp.api.req.inout.FilterOrderDetailCodeRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.inout.IoOrderDetailCodeResponse; +import com.glxp.api.service.inout.IoCheckInoutService; +import com.glxp.api.service.inout.IoOrderDetailBizService; import com.glxp.api.service.inout.IoOrderDetailCodeService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -22,12 +25,12 @@ import java.util.List; @RestController public class IoOrderDetailCodeController { - - @Resource - IoOrderDetailCodeDao ioOrderDetailCodeDao; - @Resource private IoOrderDetailCodeService ioOrderDetailCodeService; + @Resource + private IoCheckInoutService ioCheckInoutService; + @Resource + private IoOrderDetailBizService orderDetailBizService; //获取新增扫码单据详情---临时接口查询 @@ -50,6 +53,8 @@ public class IoOrderDetailCodeController { @GetMapping("udiwms/inout/codeDetail/filterList") public BaseResponse filterList(FilterOrderDetailCodeRequest detailCodeRequest) { List list = ioOrderDetailCodeService.filterList(detailCodeRequest); + List orderDetailBizEntities = orderDetailBizService.findByOrderId(detailCodeRequest.getOrderIdFk()); + ioCheckInoutService.codeOrderCheck2(list, orderDetailBizEntities); PageInfo pageInfo = new PageInfo<>(list); return ResultVOUtils.page(pageInfo); } 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 f563969dd..7a575e2dc 100644 --- a/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java +++ b/src/main/java/com/glxp/api/req/inout/FilterOrderRequest.java @@ -119,15 +119,18 @@ public class FilterOrderRequest extends ListPageRequest { /** * 单据状态类型标识 - * 草稿:draft - * 处理异常:processedError - * 未校验:unCheck - * 校验异常:checkedError - * 已校验:checkSuccess - * 已审核:audited + * 草稿:draft + * 处理异常:processedError + * 未校验:unCheck + * 校验异常:checkedError + * 已校验:checkSuccess + * 已审核:audited */ private String statusType; + private Integer orderType; + + /** * 单据状态集合 */ diff --git a/src/main/java/com/glxp/api/res/inout/IoOrderDetailCodeResponse.java b/src/main/java/com/glxp/api/res/inout/IoOrderDetailCodeResponse.java index 7b6c49ec1..c13de37a2 100644 --- a/src/main/java/com/glxp/api/res/inout/IoOrderDetailCodeResponse.java +++ b/src/main/java/com/glxp/api/res/inout/IoOrderDetailCodeResponse.java @@ -1,5 +1,6 @@ package com.glxp.api.res.inout; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.math.BigDecimal; @@ -159,4 +160,6 @@ public class IoOrderDetailCodeResponse { */ private String supName; + private Integer orderCount; + } diff --git a/src/main/java/com/glxp/api/res/inout/IoOrderResponse.java b/src/main/java/com/glxp/api/res/inout/IoOrderResponse.java index c7a6d3540..08434accb 100644 --- a/src/main/java/com/glxp/api/res/inout/IoOrderResponse.java +++ b/src/main/java/com/glxp/api/res/inout/IoOrderResponse.java @@ -1,6 +1,7 @@ package com.glxp.api.res.inout; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.util.Date; @@ -199,7 +200,10 @@ public class IoOrderResponse { * 往来名称 */ private String fromName; - + /** + * 单据类型:1.业务单据,2:扫码单据,3.正常处理单据 只有草稿,异常,待处理 + */ + private Integer orderType; //是否可以补单 private boolean enableSupplementOrder; diff --git a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java index acf403b37..d410c4fb3 100644 --- a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java @@ -213,8 +213,15 @@ public class IoAddInoutService { genOrderDetailCode(orderEntity, codeTempEntity); } } - //进行单据校验 - ioCheckInoutService.check(orderEntity.getBillNo()); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK); + orderEntity.setUpdateTime(new Date()); + orderEntity.setRemark(""); + orderService.update(orderEntity); + } else { + orderEntity.setStatus(ConstantStatus.ORDER_STATS_ERROR); + orderEntity.setUpdateTime(new Date()); + orderEntity.setRemark("未添加UDI码"); + orderService.update(orderEntity); } } @@ -301,6 +308,9 @@ public class IoAddInoutService { orderService.update(order); codeTempService.insertBatch(supplementCodes); dealProcess(supplementOrder); + if (!ioCheckInoutService.checkManual(order.getBillNo())) { + ioCheckInoutService.check(order.getBillNo()); + } return ResultVOUtils.success(); } diff --git a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java index 17d32d8e1..77490162c 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -7,6 +7,7 @@ import com.glxp.api.constant.ConstantType; import com.glxp.api.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.inout.*; import com.glxp.api.entity.inv.InvPreinDetailEntity; +import com.glxp.api.res.inout.IoOrderDetailCodeResponse; import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.inv.InvPreinDetailService; import com.glxp.api.service.inv.InvPreinOrderService; @@ -46,8 +47,60 @@ public class IoCheckInoutService { @Resource IoGenInvService genInvService; + //判断是否需要手动校验 + public boolean checkManual(String billNo) { + IoOrderEntity orderEntity = orderService.findByBillNo(billNo); + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); + if (!bussinessTypeEntity.isCheckEnable()) { + return false; + } else { + if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) { + if (!bussinessTypeEntity.isCheckUdims()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) { + if (!bussinessTypeEntity.isCheckWebNew()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) { + if (!bussinessTypeEntity.isCheckPdaEd()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) { + if (!bussinessTypeEntity.isCheckPdaUn()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) { + if (!bussinessTypeEntity.isCheckPc()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) { + if (!bussinessTypeEntity.isCheckChange()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) { + if (!bussinessTypeEntity.isCheckBalance()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) { + if (!bussinessTypeEntity.isCheckSp()) { + return false; + } + } else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) { + if (!bussinessTypeEntity.isCheckCopy()) { + return false; + } + } + return true; + } + } + + //校验流程 public void check(String orderId) { IoOrderEntity orderEntity = orderService.findByBillNo(orderId); + //过滤非未校验或校验异常 + if (orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK && orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK_FAIL) + return; BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); if (!bussinessTypeEntity.isCheckEnable()) { unCheckFirstFinish(orderEntity); @@ -324,6 +377,8 @@ public class IoCheckInoutService { codeEntity.setOrderCount(bizEntity.getCount()); } break; + } else { + codeEntity.setCheckSuccess(false); } } } @@ -337,6 +392,34 @@ public class IoCheckInoutService { return errMsg; } + public void codeOrderCheck2(List orderDetailCodeEntities, List orderDetailBizEntities) { + for (IoOrderDetailCodeResponse codeResponse : orderDetailCodeEntities) { + IoOrderDetailCodeEntity codeEntity = new IoOrderDetailCodeEntity(); + BeanUtils.copyProperties(codeResponse, codeEntity); + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null + && checkBatchNo(bizEntity, codeEntity) == null + && checkProductDate(bizEntity, codeEntity) == null + && checkExpireDate(bizEntity, codeEntity) == null + ) { + + if (checkCount(bizEntity, codeEntity) == null) { + bizEntity.setCheckSuccess(true); + codeResponse.setCheckSuccess(true); + codeResponse.setOrderCount(bizEntity.getCount()); + } else { + codeResponse.setCheckSuccess(false); + codeResponse.setOrderCount(bizEntity.getCount()); + } + break; + } else { + codeResponse.setCheckSuccess(false); + } + } + } + } + + //二次校验 public void checkSecond(IoOrderEntity orderEntity) { BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); diff --git a/src/main/java/com/glxp/api/service/inout/IoGenInvService.java b/src/main/java/com/glxp/api/service/inout/IoGenInvService.java index 27a618102..dfe4e3dd7 100644 --- a/src/main/java/com/glxp/api/service/inout/IoGenInvService.java +++ b/src/main/java/com/glxp/api/service/inout/IoGenInvService.java @@ -275,11 +275,16 @@ public class IoGenInvService { } codeTempService.insertBatch(codeTempEntities); addInoutService.dealProcess(outOrder); + if (!ioCheckInoutService.checkManual(outOrder.getBillNo())) { + ioCheckInoutService.check(outOrder.getBillNo()); + } } } @Resource IoAddInoutService addInoutService; + @Resource + IoCheckInoutService ioCheckInoutService; //计算当前库存数量 diff --git a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java index 07494bd12..5e5c2669b 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java @@ -154,6 +154,18 @@ public class IoOrderServiceImpl implements IoOrderService { @Override public void setFilterStatus(FilterOrderRequest filterOrderRequest) { switch (filterOrderRequest.getStatusType()) { + + + case Constant.ORDER_STATUS_SCAN_CODEE: + filterOrderRequest.setOrderType(ConstantStatus.ORDER_TYPE_SCAN); + filterOrderRequest.setStatuses(Arrays.asList(ConstantStatus.ORDER_STATUS_TEMP_SAVE, ConstantStatus.ORDER_STATUS_PROCESS, ConstantStatus.ORDER_STATS_ERROR)); + break; + + case Constant.ORDER_STATUS_NEW_BIZ: + filterOrderRequest.setOrderType(ConstantStatus.ORDER_TYPE_BIZ); + filterOrderRequest.setStatuses(Arrays.asList(ConstantStatus.ORDER_STATUS_TEMP_SAVE, ConstantStatus.ORDER_STATUS_PROCESS, ConstantStatus.ORDER_STATS_ERROR)); + break; + case Constant.ORDER_STATUS_DRAFT: filterOrderRequest.setStatuses(Arrays.asList(1, 2)); filterOrderRequest.setDealStatuses(Arrays.asList(1)); @@ -163,7 +175,7 @@ public class IoOrderServiceImpl implements IoOrderService { filterOrderRequest.setDealStatuses(Arrays.asList(2)); break; case Constant.ORDER_STATUS_NEW_ORDER: - filterOrderRequest.setStatuses(Arrays.asList(1, 2, 4)); + filterOrderRequest.setStatuses(Arrays.asList(1, 2, 3, 4, 6)); filterOrderRequest.setDealStatuses(Arrays.asList(1, 2)); break; case Constant.ORDER_STATUS_UN_CHECK: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index afaae9e7a..833ca2c7f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev + active: pro jmx: enabled: true diff --git a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml index 665b574d3..e7a100be7 100644 --- a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml +++ b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml @@ -62,6 +62,9 @@ AND status = #{status} + + AND orderType = #{orderType} + @@ -122,4 +125,4 @@ OR supplementOrderType != '') - \ No newline at end of file +