package com.glxp.api.controller.purchase; 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.annotation.RepeatSubmit; 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.Constant; import com.glxp.api.constant.ConstantStatus; import com.glxp.api.constant.ConstantType; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.auth.InvWarehouseEntity; import com.glxp.api.entity.basic.BasicProductsEntity; import com.glxp.api.entity.inout.IoOrderDetailBizEntity; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.entity.purchase.*; import com.glxp.api.req.purchase.PostPurDeliveryRequest; import com.glxp.api.req.purchase.PurDeliveryRequest; import com.glxp.api.req.purchase.PurOrderDetailRequest; import com.glxp.api.req.purchase.ReviewDeliveryOrderRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.purchase.PurDeliveryAcceptOrderResponse; import com.glxp.api.res.purchase.PurDeliveryDetailResponse; import com.glxp.api.res.purchase.PurDeliveryResponse; import com.glxp.api.service.auth.CustomerService; import com.glxp.api.service.auth.InvWarehouseService; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.inout.IoOrderDetailBizService; import com.glxp.api.service.inout.IoOrderService; import com.glxp.api.service.purchase.PurDeliveryCodeService; import com.glxp.api.service.purchase.PurDeliveryDetailService; import com.glxp.api.service.purchase.PurDeliveryService; import com.glxp.api.service.purchase.PurOrderDetailService; 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 com.glxp.api.util.udi.UdiCalCountUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.constraints.NotEmpty; import java.math.BigDecimal; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Validated @RequiredArgsConstructor @RestController public class PurDeliveryController extends BaseController { @Resource PurDeliveryService purDeliveryService; @Resource PurDeliveryDetailService purDeliveryDetailService; @Resource CustomerService customerService; @Resource GennerOrderUtils gennerOrderUtils; @Resource IoOrderService ioOrderService; @Resource IoOrderDetailBizService ioOrderDetailBizService; @Resource InvWarehouseService invWarehouseService; @Resource private RedisUtil redisUtil; @Resource private PurDeliveryCodeService purDeliveryCodeService; @Resource private UdiRelevanceService udiRelevanceService; @Resource private UdiCalCountUtil calCountUtil; /** * 新增到货单 */ @RepeatSubmit() @AuthRuleAnnotation("") @PostMapping("/purchase/delivery/postOrder") public BaseResponse postOrder(@RequestBody PostPurDeliveryRequest purDeliveryRequest) { Long userId = customerService.getUserId(); PurDeliveryEntity purArrivalEntity = purDeliveryRequest.getPurDeliveryEntity(); purArrivalEntity.setCreateUser(userId + ""); purArrivalEntity.setCreateTime(new Date()); purArrivalEntity.setUpdateTime(new Date()); purArrivalEntity.setUpdateUser(userId + ""); purArrivalEntity.setStatus(purDeliveryRequest.getEditStatus()); //草稿状态 InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(purArrivalEntity.getInvCode()); purArrivalEntity.setDeptCode(invWarehouseEntity.getParentId()); if (purDeliveryRequest.getType() != null) { String billNo = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.SH_ORDER, "yyyyMMdd")); purArrivalEntity.setBillNo(billNo); } if (purArrivalEntity.getId() == null) { purDeliveryService.insert(purArrivalEntity); } else { purDeliveryService.update(purArrivalEntity); } return ResultVOUtils.success("提交成功!"); } /** * 查询未审核和草稿状态 */ @GetMapping("/purchase/delivery/list") public BaseResponse list(PurDeliveryRequest purDeliveryRequest) { if (purDeliveryRequest.getStatus() == null) { purDeliveryRequest.setStatus(11); //查询未审核和草稿状态 } List purDeliveryResponses = purDeliveryService.queryPageList(purDeliveryRequest); PageInfo pageInfo; pageInfo = new PageInfo<>(purDeliveryResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(purDeliveryResponses); return ResultVOUtils.success(pageSimpleResponse); } /** * 查询未审核和已审核状态 */ @GetMapping("/purchase/delivery/auditList") public BaseResponse auditList(PurDeliveryRequest purDeliveryRequest) { if (purDeliveryRequest.getStatus() == null) { purDeliveryRequest.setStatus(10); //查询未审核和已审核状态 } List purDeliveryResponses = purDeliveryService.queryPageList(purDeliveryRequest); PageInfo pageInfo; pageInfo = new PageInfo<>(purDeliveryResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(purDeliveryResponses); return ResultVOUtils.success(pageSimpleResponse); } /** * 审核送货单 */ @RepeatSubmit() @PostMapping("/purchase/delivery/auditOrder") public BaseResponse auditOrder(@RequestBody PostPurDeliveryRequest postPurDeliveryRequest) { Long userId = customerService.getUserId(); PurDeliveryEntity purDeliveryEntity = postPurDeliveryRequest.getPurDeliveryEntity(); purDeliveryEntity.setUpdateTime(new Date()); purDeliveryEntity.setAuditUser(userId + ""); purDeliveryEntity.setStatus(postPurDeliveryRequest.getEditStatus()); purDeliveryService.update(purDeliveryEntity); String billNo = ""; List purOrderDetailEntities = purDeliveryDetailService.findByOrderId(purDeliveryEntity.getId() + ""); //对计划单里面的供应商进行分组 Map> map = purOrderDetailEntities.stream().collect(Collectors.groupingBy(PurDeliveryDetailEntity::getSupId)); if (postPurDeliveryRequest.getEditStatus() == ConstantStatus.APPLY_AUDIT_ED) { if (CollUtil.isNotEmpty(purOrderDetailEntities) && postPurDeliveryRequest.isAutoPurchase() == true && StrUtil.isNotEmpty(postPurDeliveryRequest.getTargetSubInv()) && StrUtil.isNotEmpty(postPurDeliveryRequest.getTargetBillAction())) { for (Map.Entry> m : map.entrySet()) { //生产单据表信息 IoOrderEntity ioOrderEntity = new IoOrderEntity(); ioOrderEntity.setBillNo(gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER, "yyyyMMdd"))); ioOrderEntity.setCorpOrderId(CustomUtil.getDate()); ioOrderEntity.setMainAction(ConstantType.TYPE_PUT); ioOrderEntity.setAction(postPurDeliveryRequest.getTargetBillAction()); ioOrderEntity.setFromCorp(m.getKey()); ioOrderEntity.setFromType(ConstantStatus.FROM_Order); ioOrderEntity.setStatus(1); ioOrderEntity.setDealStatus(1); ioOrderEntity.setOrderType(1); ioOrderEntity.setCreateTime(new Date()); ioOrderEntity.setCreateUser(postPurDeliveryRequest.getPurDeliveryEntity().getAuditUser()); ioOrderEntity.setUpdateTime(new Date()); ioOrderEntity.setUpdateUser(postPurDeliveryRequest.getPurDeliveryEntity().getAuditUser()); ioOrderEntity.setCustomerId("110"); ioOrderEntity.setDeptCode(postPurDeliveryRequest.getTargetDeptCode()); ioOrderEntity.setInvCode(postPurDeliveryRequest.getTargetSubInv()); ioOrderService.insertOrder(ioOrderEntity); billNo += ioOrderEntity.getBillNo() + ","; //插入业务单表 for (PurDeliveryDetailEntity obj : m.getValue()) { BasicProductsEntity basicProductsEntity = purDeliveryDetailService.selectIoOrderDetailBiz(obj.getId()); IoOrderDetailBizEntity ioOrderDetailBizEntity = new IoOrderDetailBizEntity(); ioOrderDetailBizEntity.setOrderIdFk(ioOrderEntity.getBillNo()); ioOrderDetailBizEntity.setBindRlFk(Long.valueOf(obj.getProductId())); ioOrderDetailBizEntity.setCount(obj.getCount()); ioOrderDetailBizEntity.setUuidFk(basicProductsEntity.getUuid()); ioOrderDetailBizEntity.setNameCode(basicProductsEntity.getNameCode()); ioOrderDetailBizEntity.setCoName(basicProductsEntity.getCpmctymc()); ioOrderDetailBizEntity.setCertCode(basicProductsEntity.getZczbhhzbapzbh()); ioOrderDetailBizEntity.setYlqxzcrbarmc(basicProductsEntity.getYlqxzcrbarmc()); ioOrderDetailBizEntity.setManufacturer(basicProductsEntity.getManufactory()); ioOrderDetailBizEntity.setMeasname(basicProductsEntity.getMeasname()); ioOrderDetailBizEntity.setSpec(basicProductsEntity.getGgxh()); if (basicProductsEntity.getPrice() != null) { ioOrderDetailBizEntity.setPrice(BigDecimal.valueOf(basicProductsEntity.getPrice())); } ioOrderDetailBizEntity.setSupId(obj.getSupId()); ioOrderDetailBizService.insert(ioOrderDetailBizEntity); } } purDeliveryEntity.setStockOrderNo(billNo.substring(0, billNo.length() - 1)); purDeliveryService.update(purDeliveryEntity); } } return ResultVOUtils.success("更新成功!"); } /** * 查询采购订单列表 */ @GetMapping("/purchase/delivery/list/detail") public BaseResponse detailList(PurOrderDetailRequest purApplyDetailRequest) { List purDeliveryDetailResponses = purDeliveryDetailService.joinQueryList(purApplyDetailRequest); PageInfo pageInfo; pageInfo = new PageInfo<>(purDeliveryDetailResponses); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(purDeliveryDetailResponses); return ResultVOUtils.success(pageSimpleResponse); } /** * 拉取审核单据详情 * * @param purOrderDetailRequest * @return */ @GetMapping("/purchase/delivery/list/getAcceptOrder") public BaseResponse getAcceptOrder(PurOrderDetailRequest purOrderDetailRequest) { if (null == purOrderDetailRequest && StrUtil.isBlank(purOrderDetailRequest.getOrderIdFk())) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } PurDeliveryAcceptOrderResponse response = new PurDeliveryAcceptOrderResponse(); response.setBillNo(purOrderDetailRequest.getBillNo()); List list = redisUtil.getList(ConstantStatus.REDIS_DELIVERY_BILLNO + purOrderDetailRequest.getBillNo(), PurDeliveryDetailResponse.class); if (CollUtil.isNotEmpty(list)) { response.setOrderDetails(list); response.setExitAccept(true); } else { List deliveryDetailResponses = purDeliveryDetailService.joinQueryList(purOrderDetailRequest); response.setOrderDetails(deliveryDetailResponses); response.setExitAccept(false); } return ResultVOUtils.success(response); } /** * 送货单验收扫码接口 * * @param acceptOrderResponse * @return */ @PostMapping("/purchase/delivery/list/acceptAddCode") public BaseResponse acceptAddCode(@RequestBody PurDeliveryAcceptOrderResponse acceptOrderResponse) { PurDeliveryEntity purDeliveryEntity = purDeliveryService.findByBillNo(acceptOrderResponse.getBillNo()); if (null == purDeliveryEntity) { return ResultVOUtils.error(500, "此送货单不存在!"); } List codeList; List codeEntityList = redisUtil.getList(ConstantStatus.REDIS_DELIVERY_CODES + acceptOrderResponse.getBillNo(), PurDeliveryCodeEntity.class); if (CollUtil.isNotEmpty(codeEntityList)) { codeList = purDeliveryCodeService.findByOrderId(acceptOrderResponse.getBillNo()); } else { codeList = codeEntityList; } String relId = udiRelevanceService.getRelIdByUdiCode(acceptOrderResponse.getCode()); if (StrUtil.isBlank(relId)) { return ResultVOUtils.error(500, "非此单UDI码"); } else { int status = purDeliveryCodeService.isExist(acceptOrderResponse.getOrderIdFk(), relId); if (status == Constant.CHECK_NULL) { return ResultVOUtils.error(500, "非此单UDI码"); } } List orderDetails = acceptOrderResponse.getOrderDetails(); if (StrUtil.isNotBlank(acceptOrderResponse.getCode()) && CollUtil.isNotEmpty(orderDetails)) { boolean isExist = false; for (PurDeliveryDetailResponse orderDetail : orderDetails) { if (orderDetail.getProductId().equals(relId)) { orderDetail.setAcceptCount(orderDetail.getAcceptCount() + calCountUtil.getActCountByRelId(relId)); if (orderDetail.getAcceptCount() > orderDetail.getCount()) { return ResultVOUtils.error(500, "数量溢出!"); } purDeliveryCodeService.addCode(acceptOrderResponse.getBillNo(), orderDetail, acceptOrderResponse.getCode()); isExist = true; break; } } if (isExist) { redisUtil.set(ConstantStatus.REDIS_DELIVERY_BILLNO + acceptOrderResponse.getBillNo(), acceptOrderResponse); redisUtil.set(ConstantStatus.REDIS_DELIVERY_CODES + acceptOrderResponse.getBillNo(), codeList); acceptOrderResponse.setOrderDetails(orderDetails); if (purOrderDetailService.vailFinish(orderDetails)) { acceptOrderResponse.setFinishAccept(true); return ResultVOUtils.success(acceptOrderResponse); } return ResultVOUtils.success(acceptOrderResponse); } } return ResultVOUtils.error(500, "非此单UDI码!"); } /** * 送货单 - 重新验收接口 * * @param acceptOrderResponse * @return */ @PostMapping("/purchase/delivery/list/acceptClear") public BaseResponse acceptClear(@RequestBody PurDeliveryAcceptOrderResponse acceptOrderResponse) { String billNo = acceptOrderResponse.getBillNo(); redisUtil.del(ConstantStatus.REDIS_DELIVERY_BILLNO + billNo); redisUtil.del(ConstantStatus.REDIS_DELIVERY_CODES + billNo); PurOrderDetailRequest purOrderDetailRequest = new PurOrderDetailRequest(); purOrderDetailRequest.setOrderIdFk(acceptOrderResponse.getOrderIdFk()); List deliveryDetailResponses = purDeliveryDetailService.joinQueryList(purOrderDetailRequest); acceptOrderResponse.setOrderDetails(deliveryDetailResponses); return ResultVOUtils.success(acceptOrderResponse); } /** * 完成验收接口 * * @param reviewFinishRequest * @return */ @PostMapping("/purchase/delivery/list/updateStatus") public BaseResponse updateStatus(@RequestBody ReviewDeliveryOrderRequest reviewFinishRequest) { if (null == reviewFinishRequest && StrUtil.isBlank(reviewFinishRequest.getBillNo())) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } if (!reviewFinishRequest.isFinishAccept()) { return ResultVOUtils.error(500, "未完成验收"); } PurDeliveryEntity purDeliveryEntity = purDeliveryService.findByBillNo(reviewFinishRequest.getBillNo()); return purDeliveryService.updateReview(purDeliveryEntity); } /** * 添加产品到采购单里面 */ @PostMapping("/purchase/delivery/addOrderDetail") public BaseResponse addOrderDetail(@RequestBody PurDeliveryDetailEntity purOrderDetailEntity) { boolean falg = purDeliveryDetailService.insert(purOrderDetailEntity); if (falg) { return ResultVOUtils.success("添加成功"); } else { return ResultVOUtils.success("添加失败"); } } /** * 新增计划单 */ @AuthRuleAnnotation("") @PostMapping("/purchase/delivery/add") public BaseResponse add() { Long userId = customerService.getUserId(); PurDeliveryEntity purArrivalEntity = new PurDeliveryEntity(); purArrivalEntity.setCreateUser(userId + ""); purArrivalEntity.setCreateTime(new Date()); purArrivalEntity.setUpdateTime(new Date()); purArrivalEntity.setUpdateUser(userId + ""); purArrivalEntity.setSupId(getCustomerId()); purDeliveryService.insert(purArrivalEntity); Long id = purArrivalEntity.getId(); return ResultVOUtils.success(id); } /** * 删除申购单和详情 */ @AuthRuleAnnotation("") @PostMapping("/purchase/delivery/delOrderDetailAll") public BaseResponse delApplyDetailAll(@RequestBody PurApplyEntity purApplyEntity) { if (purApplyEntity.getId() != null) { purDeliveryService.deleteById(purApplyEntity.getId()); purDeliveryDetailService.deleteByOrderId(purApplyEntity.getId() + ""); } else { return ResultVOUtils.error(999, "参数有误!"); } return ResultVOUtils.success(); } /** * 修改计划详情单 */ @RepeatSubmit() @PostMapping("/purchase/delivery/updateDetail") public BaseResponse detailEdit(@RequestBody PurDeliveryDetailEntity purDeliveryDetailEntity) { purDeliveryDetailService.update(purDeliveryDetailEntity); return ResultVOUtils.success("修改成功"); } /** * 删除采购订单 * * @param ids 主键串 */ @DeleteMapping("/purchase/delivery/detail/{ids}") public BaseResponse detailRemove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { purDeliveryDetailService.deleteByIds(Arrays.asList(ids)); return ResultVOUtils.success("删除成功"); } @Resource PurOrderDetailService purOrderDetailService; /** * 添加采购订单至送货单 */ @PostMapping("/purchase/delivery/addPlanDetailAndOrder") public BaseResponse addPlanDetailAndOrder(@RequestBody PurDeliveryRequest purDeliveryRequest) { List purOrderDetailEntities = purOrderDetailService.findByOrderId(purDeliveryRequest.getPurOrderId() + ""); List purDeliveryDetailEntities = purOrderDetailEntities.stream() .map(e -> { PurDeliveryDetailEntity d = new PurDeliveryDetailEntity(); BeanUtils.copyProperties(e, d); return d; }) .collect(Collectors.toList()); for (PurDeliveryDetailEntity obj : purDeliveryDetailEntities) { obj.setOrderIdFk(purDeliveryRequest.getId() + ""); } boolean falg = purDeliveryDetailService.insertPurDeliveryDetailEntity(purDeliveryDetailEntities); if (falg) { //查询申购单 return ResultVOUtils.success("添加成功"); } else { return ResultVOUtils.success("添加失败"); } } }