package com.glxp.api.controller.inout; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.annotation.AuthRuleAnnotation; import com.glxp.api.common.enums.ResultEnum; 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.auth.InvBusUserEntity; import com.glxp.api.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.basic.EntrustReceEntity; import com.glxp.api.entity.inout.IoCodeTempEntity; 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.req.auth.FilterInvBusUserRequest; import com.glxp.api.req.basic.BasicEntrustRecRequest; import com.glxp.api.req.inout.AddOrderRequest; import com.glxp.api.req.inout.FilterOrderDetailBizRequest; import com.glxp.api.req.inout.FilterOrderRequest; import com.glxp.api.req.inout.OrderEditRequest; import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.inout.IoOrderDetailBizResponse; import com.glxp.api.res.inout.IoOrderResponse; import com.glxp.api.res.inout.PdaBusOrderResponse; import com.glxp.api.service.auth.InvBusUserService; import com.glxp.api.service.basic.EntrustReceService; import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.inout.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.validation.BindingResult; 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.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @RestController public class IoOrderController extends BaseController { @Resource private IoOrderService orderService; @Resource private IBasicBussinessTypeService basicBussinessTypeService; @Resource private IoCodeTempService codeTempService; @Resource private IoCheckInoutService checkInoutService; @Resource IoOrderDetailBizService orderDetailBizService; @Resource IoOrderDetailCodeService orderDetailCodeService; /** * 查询单据列表 * * @param filterOrderRequest * @return */ @GetMapping("/udiwms/inout/order/filter") public BaseResponse filterOrder(FilterOrderRequest filterOrderRequest) { if (StrUtil.isNotBlank(filterOrderRequest.getStatusType())) { orderService.setFilterStatus(filterOrderRequest); } List list = orderService.filterList(filterOrderRequest); PageInfo pageInfo = new PageInfo<>(list); return ResultVOUtils.page(pageInfo); } @AuthRuleAnnotation("") @GetMapping("udiwms/inout/order/draft") public BaseResponse getDrafts() { List orderEntityList = orderService.selectAll(); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(Long.valueOf(orderEntityList.size())); pageSimpleResponse.setList(orderEntityList); return ResultVOUtils.success(pageSimpleResponse); } //处理单据提交,草稿保存 @AuthRuleAnnotation("") @PostMapping("warehouse/inout/saveOrderWeb") public BaseResponse saveOrderWeb(@RequestBody AddOrderRequest addOrderRequest) { IoOrderEntity orderEntity = new IoOrderEntity(); if (StrUtil.isEmpty(addOrderRequest.getAction())) return ResultVOUtils.error(500, "单据类型不能为空"); orderEntity.setAction(addOrderRequest.getAction()); BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); orderEntity.setFromCorp(addOrderRequest.getFromCorp()); orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); orderEntity.setDeptCode(addOrderRequest.getDeptCode()); orderEntity.setInvCode(addOrderRequest.getInvCode()); orderService.updateByBillNo(orderEntity); IoCodeTempEntity warehouseEntity = new IoCodeTempEntity(); warehouseEntity.setOrderId(orderEntity.getBillNo()); warehouseEntity.setAction(orderEntity.getAction()); warehouseEntity.setMainAction(orderEntity.getMainAction()); warehouseEntity.setDeptCode(orderEntity.getDeptCode()); warehouseEntity.setInvCode(orderEntity.getInvCode()); codeTempService.updateByOrderId(warehouseEntity); return ResultVOUtils.success("保存成功!"); } @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) { //校验单据是否已完成 List orderDetailBizEntities = orderDetailBizService.findByOrderId(addOrderRequest.getBillNo()); List orderDetailCodeEntities = orderDetailCodeService.findByOrderId(addOrderRequest.getBillNo()); if (CollUtil.isEmpty(orderDetailCodeEntities)) { 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, "单据未校验完成,请检查后重新提交!"); } errMsg = checkInoutService.codeOrderCheck(orderDetailCodeEntities, orderDetailBizEntities); if (StrUtil.isNotEmpty(errMsg)) { return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!"); } saveOrderWeb(addOrderRequest); checkInoutService.check(addOrderRequest.getBillNo()); } else { return ResultVOUtils.error(500, "单据未校验完成,请先录入业务单据!"); } } else { IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo()); ioAddInoutService.dealProcess(orderEntity); checkInoutService.check(addOrderRequest.getBillNo()); return ResultVOUtils.success("提交成功!"); } return ResultVOUtils.success("提交成功!"); } //未校验单据删除 @AuthRuleAnnotation("") @PostMapping("udiwms/inout/order/delete") public BaseResponse deletById(@RequestBody DeleteRequest deleteRequest) { orderService.deleteByBillNo(deleteRequest.getBillNo()); orderDetailBizService.deleteByOrderId(deleteRequest.getBillNo()); orderDetailCodeService.deleteByOrderId(deleteRequest.getBillNo()); codeTempService.deleteByBillNo(deleteRequest.getBillNo()); return ResultVOUtils.success("删除成功!"); } //手持终端获取未处理业务单据进行校验 @AuthRuleAnnotation("") @GetMapping("/udiwms/erpOrder/filter") public BaseResponse filterErpOrder(FilterOrderRequest filterOrderRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } if (StrUtil.isEmpty(filterOrderRequest.getAction())) return ResultVOUtils.error(500, "单据类型不能为空!"); List orderResponses = orderService.filterList(filterOrderRequest); List erpOrderResponses = new ArrayList<>(); if (CollUtil.isNotEmpty(orderResponses)) { for (IoOrderResponse orderResponse : orderResponses) { PdaBusOrderResponse pdaBusOrderResponse = new PdaBusOrderResponse(); BeanUtils.copyProperties(orderResponse, pdaBusOrderResponse); FilterOrderDetailBizRequest filterOrderDetailBizRequest = new FilterOrderDetailBizRequest(); filterOrderDetailBizRequest.setOrderIdFk(orderResponse.getBillNo()); List orderDetailBizEntities = orderDetailBizService.filterList(filterOrderDetailBizRequest); pdaBusOrderResponse.setOrderDetailBizResponses(orderDetailBizEntities); erpOrderResponses.add(pdaBusOrderResponse); } } PageInfo pageInfo; pageInfo = new PageInfo<>(orderResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(erpOrderResponses); return ResultVOUtils.success(pageSimpleResponse); } @Resource EntrustReceService entrustReceService; @Resource InvBusUserService invBusUserService; //手持终端下载扫码单据进行审核 @AuthRuleAnnotation("") @GetMapping("/udiwms/inout/order/download") public BaseResponse downloadOrder(FilterOrderRequest filterOrderRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } Long userId = null; if (filterOrderRequest.getWmsUserId() != null) { userId = filterOrderRequest.getWmsUserId(); } else userId = getUserId(); List entrustReceEntities; List warehouseUserEntities = null; IoOrderEntity stockOrderEntity = orderService.findByBillNo(filterOrderRequest.getBillNo()); if (stockOrderEntity == null) { return ResultVOUtils.error(500, "单据未找到!"); } else if (stockOrderEntity.getStatus() == ConstantStatus.ORDER_STATUS_CHECK_SUCCESS) { //1.校验是否为委托验收人 if (!stockOrderEntity.isEntrustEnd()) { BasicEntrustRecRequest basicEntrustRecRequest = new BasicEntrustRecRequest(); basicEntrustRecRequest.setAction(stockOrderEntity.getAction()); basicEntrustRecRequest.setEntrustUser(userId); basicEntrustRecRequest.setCurInv(stockOrderEntity.getInvCode()); entrustReceEntities = entrustReceService.filterEntrustRec(basicEntrustRecRequest); } else { return ResultVOUtils.error(500, "单据已委托验收完成!"); } //2.校验是否为用户所属单据类型 if (StrUtil.isNotEmpty(stockOrderEntity.getDeptCode())) { FilterInvBusUserRequest filterInvBusUserRequest = new FilterInvBusUserRequest(); filterInvBusUserRequest.setSubInvCode(stockOrderEntity.getInvCode()); filterInvBusUserRequest.setUserId(userId + ""); filterInvBusUserRequest.setScAction(stockOrderEntity.getAction()); warehouseUserEntities = invBusUserService.filterInvBusUser(filterInvBusUserRequest); } if (CollUtil.isEmpty(warehouseUserEntities) && CollUtil.isEmpty(entrustReceEntities)) { return ResultVOUtils.error(500, "权限不足,无法验收!"); } } else if (stockOrderEntity.getStatus() == ConstantStatus.ORDER_STATUS_AUDITED) { return ResultVOUtils.error(500, "单据已审核!"); } else { return ResultVOUtils.error(500, "非未审核单据!"); } List orderEntityList = orderService.filterList(filterOrderRequest); PageInfo pageInfo; pageInfo = new PageInfo<>(orderEntityList); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(orderEntityList); return ResultVOUtils.success(pageSimpleResponse); } /** * 单据编辑页面查询单据接口 * * @param billNo * @return */ @GetMapping("udiwms/inout/order/filterOrderTrace") public BaseResponse filterOrderTrace(String billNo) { if (StrUtil.isBlank(billNo)) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } List list = orderService.filterOrderTrace(billNo); List responses = orderService.findResponse(list); return ResultVOUtils.success(responses); } /** * 批量修改单据信息 * * @return */ @PostMapping("/udiwms/inout/order/updateOrderInfo") public BaseResponse updateOrderInfo(@RequestBody OrderEditRequest orderEditRequest) { if (null == orderEditRequest || CollUtil.isEmpty(orderEditRequest.getOrderIds())) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } orderService.updateOrderInfo(orderEditRequest); return ResultVOUtils.success(); } }