diff --git a/src/main/java/com/glxp/api/constant/ConstantStatus.java b/src/main/java/com/glxp/api/constant/ConstantStatus.java index aebd3df2..43feab70 100644 --- a/src/main/java/com/glxp/api/constant/ConstantStatus.java +++ b/src/main/java/com/glxp/api/constant/ConstantStatus.java @@ -214,6 +214,9 @@ public class ConstantStatus { public static final String REDIS_BILLNO = "ACCEPT_"; //缓存单据前缀 public static final String REDIS_BILLNO_CODES = "ACCEPT_CODES"; + public static final String REDIS_DELIVERY_BILLNO = "PUR_DELIVERY_ACCEPT_"; //送货单单据前缀 + public static final String REDIS_DELIVERY_CODES = "PUR_DELIVERY_CODES"; //送货单条码明细 + public static final int APPLY_DRAFT = 1;//草稿 public static final int APPLY_UN_AUDIT = 2;//未审核 diff --git a/src/main/java/com/glxp/api/controller/purchase/PurDeliveryController.java b/src/main/java/com/glxp/api/controller/purchase/PurDeliveryController.java index 176dcfe4..82f06071 100644 --- a/src/main/java/com/glxp/api/controller/purchase/PurDeliveryController.java +++ b/src/main/java/com/glxp/api/controller/purchase/PurDeliveryController.java @@ -5,6 +5,7 @@ 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; @@ -16,20 +17,28 @@ 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.*; +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; @@ -38,7 +47,10 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.constraints.NotEmpty; import java.math.BigDecimal; -import java.util.*; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Validated @@ -46,13 +58,10 @@ import java.util.stream.Collectors; @RestController public class PurDeliveryController extends BaseController { - @Resource PurDeliveryService purDeliveryService; - @Resource PurDeliveryDetailService purDeliveryDetailService; - @Resource CustomerService customerService; @Resource @@ -63,6 +72,14 @@ public class PurDeliveryController extends BaseController { IoOrderDetailBizService ioOrderDetailBizService; @Resource InvWarehouseService invWarehouseService; + @Resource + private RedisUtil redisUtil; + @Resource + private PurDeliveryCodeService purDeliveryCodeService; + @Resource + private UdiRelevanceService udiRelevanceService; + @Resource + private UdiCalCountUtil calCountUtil; /** * 新增到货单 @@ -228,6 +245,127 @@ public class PurDeliveryController extends BaseController { } + /** + * 拉取审核单据详情 + * + * @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); + } + /** * 添加产品到采购单里面 @@ -310,8 +448,6 @@ public class PurDeliveryController extends BaseController { */ @PostMapping("/purchase/delivery/addPlanDetailAndOrder") public BaseResponse addPlanDetailAndOrder(@RequestBody PurDeliveryRequest purDeliveryRequest) { - - List purOrderDetailEntities = purOrderDetailService.findByOrderId(purDeliveryRequest.getPurOrderId() + ""); List purDeliveryDetailEntities = purOrderDetailEntities.stream() .map(e -> { @@ -327,7 +463,6 @@ public class PurDeliveryController extends BaseController { if (falg) { //查询申购单 return ResultVOUtils.success("添加成功"); - } else { return ResultVOUtils.success("添加失败"); } diff --git a/src/main/java/com/glxp/api/dao/basic/UdiRelevanceDao.java b/src/main/java/com/glxp/api/dao/basic/UdiRelevanceDao.java index 12da85e2..aa53b62f 100644 --- a/src/main/java/com/glxp/api/dao/basic/UdiRelevanceDao.java +++ b/src/main/java/com/glxp/api/dao/basic/UdiRelevanceDao.java @@ -101,4 +101,12 @@ public interface UdiRelevanceDao extends BaseMapperPlus { +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/purchase/PurDeliveryCodeEntity.java b/src/main/java/com/glxp/api/entity/purchase/PurDeliveryCodeEntity.java new file mode 100644 index 00000000..070e23ba --- /dev/null +++ b/src/main/java/com/glxp/api/entity/purchase/PurDeliveryCodeEntity.java @@ -0,0 +1,99 @@ +package com.glxp.api.entity.purchase; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 送货单码表 + */ +@Data +@TableName(value = "pur_delivery_code") +public class PurDeliveryCodeEntity { + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 送货单/到货单 单据号 + */ + @TableField(value = "orderIdFk") + private String orderIdFk; + + /** + * udi码 + */ + @TableField(value = "code") + private String code; + + /** + * 最小销售标识 + */ + @TableField(value = "nameCode") + private String nameCode; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + private String batchNo; + + /** + * 生产日期 + */ + @TableField(value = "produceDate") + private String produceDate; + + /** + * 失效日期 + */ + @TableField(value = "exipreDate") + private String exipreDate; + + /** + * 序列号 + */ + @TableField(value = "serialNo") + private String serialNo; + + /** + * 耗材字典编号 + */ + @TableField(value = "relId") + private String relId; + + /** + * 供应商ID + */ + @TableField(value = "supId") + private String supId; + + /** + * 数量 + */ + @TableField(value = "`count`") + private Integer count; + + /** + * 实际数量 + */ + @TableField(value = "reCount") + private Integer reCount; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + private Date updateTime; + +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/req/purchase/PurOrderDetailRequest.java b/src/main/java/com/glxp/api/req/purchase/PurOrderDetailRequest.java index ee86ecb3..d9165941 100644 --- a/src/main/java/com/glxp/api/req/purchase/PurOrderDetailRequest.java +++ b/src/main/java/com/glxp/api/req/purchase/PurOrderDetailRequest.java @@ -4,16 +4,15 @@ package com.glxp.api.req.purchase; import com.glxp.api.util.page.ListPageRequest; import lombok.Data; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - @Data public class PurOrderDetailRequest extends ListPageRequest { + private Long id; + /** - * + * 送货单单据号 */ - private Long id; + private String billNo; /** * 订单外键 diff --git a/src/main/java/com/glxp/api/req/purchase/ReviewDeliveryOrderRequest.java b/src/main/java/com/glxp/api/req/purchase/ReviewDeliveryOrderRequest.java new file mode 100644 index 00000000..8e941d71 --- /dev/null +++ b/src/main/java/com/glxp/api/req/purchase/ReviewDeliveryOrderRequest.java @@ -0,0 +1,20 @@ +package com.glxp.api.req.purchase; + +import lombok.Data; + +/** + * 送货单验收参数 + */ +@Data +public class ReviewDeliveryOrderRequest { + + /** + * 送货单号 + */ + private String billNo; + + /** + * 是否完成验收 + */ + private boolean finishAccept; +} diff --git a/src/main/java/com/glxp/api/res/purchase/PurDeliveryAcceptOrderResponse.java b/src/main/java/com/glxp/api/res/purchase/PurDeliveryAcceptOrderResponse.java new file mode 100644 index 00000000..4258b180 --- /dev/null +++ b/src/main/java/com/glxp/api/res/purchase/PurDeliveryAcceptOrderResponse.java @@ -0,0 +1,43 @@ +package com.glxp.api.res.purchase; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class PurDeliveryAcceptOrderResponse { + + /** + * 送货单主键 + */ + private String orderIdFk; + + /** + * 送货单号 + */ + private String billNo; + + /** + * udi码 + */ + private String code; + + /** + * 是否开始审核 + */ + private boolean isExitAccept; + + /** + * 是否完成审核 + */ + private boolean finishAccept; + + /** + * 送货单详情 + */ + List orderDetails; + +} diff --git a/src/main/java/com/glxp/api/service/basic/UdiRelevanceService.java b/src/main/java/com/glxp/api/service/basic/UdiRelevanceService.java index 82022016..6f615060 100644 --- a/src/main/java/com/glxp/api/service/basic/UdiRelevanceService.java +++ b/src/main/java/com/glxp/api/service/basic/UdiRelevanceService.java @@ -4,7 +4,6 @@ package com.glxp.api.service.basic; import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -21,6 +20,13 @@ public interface UdiRelevanceService { UdiRelevanceResponse selectByNameCode(String nameCode); + /** + * 根据耗材字典ID查询耗材相关数据 + * + * @param relId + * @return + */ + UdiRelevanceResponse selectByRelId(String relId); //根据DI查询产品信息 List selectAllByNameCode(String nameCode); @@ -80,4 +86,12 @@ public interface UdiRelevanceService { List selectGroupByNameCode(String nameCode, Boolean isDisable); + + /** + * 根据UDI码查询耗材字典ID + * + * @param code + * @return + */ + String getRelIdByUdiCode(String code); } diff --git a/src/main/java/com/glxp/api/service/basic/impl/UdiRelevanceServiceImpl.java b/src/main/java/com/glxp/api/service/basic/impl/UdiRelevanceServiceImpl.java index d3817392..b429a1fe 100644 --- a/src/main/java/com/glxp/api/service/basic/impl/UdiRelevanceServiceImpl.java +++ b/src/main/java/com/glxp/api/service/basic/impl/UdiRelevanceServiceImpl.java @@ -4,19 +4,18 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.glxp.api.constant.ConstantStatus; -import com.glxp.api.dao.basic.UdiProductDao; import com.glxp.api.dao.basic.UdiRelevanceDao; +import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.entity.thrsys.ThrSystemEntity; import com.glxp.api.req.basic.FilterUdiRelRequest; -import com.glxp.api.req.thrsys.FilterBasicThirdSysRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.thrsys.ThrSystemService; +import com.glxp.api.util.udi.FilterUdiUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -79,6 +78,17 @@ public class UdiRelevanceServiceImpl implements UdiRelevanceService { return null; } + @Override + public UdiRelevanceResponse selectByRelId(String relId) { + FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); + filterUdiRelRequest.setRelId(relId); + List udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest); + if (CollUtil.isNotEmpty(udiRelevanceResponses)) { + return udiRelevanceResponses.get(0); + } + return null; + } + @Override public List selectAllByNameCode(String nameCode, String unitFk) { List udiRelevanceResponses; @@ -343,4 +353,13 @@ public class UdiRelevanceServiceImpl implements UdiRelevanceService { public List selectGroupByNameCode(String nameCode, Boolean isDisable) { return udiRelevanceDao.selectGroupByNameCode(nameCode, isDisable); } + + @Override + public String getRelIdByUdiCode(String code) { + if (StrUtil.isBlank(code)) { + return null; + } + UdiEntity udi = FilterUdiUtils.getUdi(code); + return udiRelevanceDao.selectRelIdByNameCode(udi.getUdi()); + } } diff --git a/src/main/java/com/glxp/api/service/purchase/PurDeliveryCodeService.java b/src/main/java/com/glxp/api/service/purchase/PurDeliveryCodeService.java new file mode 100644 index 00000000..4be5a461 --- /dev/null +++ b/src/main/java/com/glxp/api/service/purchase/PurDeliveryCodeService.java @@ -0,0 +1,38 @@ +package com.glxp.api.service.purchase; + +import com.glxp.api.entity.purchase.PurDeliveryCodeEntity; +import com.glxp.api.res.purchase.PurDeliveryDetailResponse; + +import java.util.List; + +/** + * 送货单码明细Service + */ +public interface PurDeliveryCodeService { + + /** + * 根据送货单号查询码详情 + * + * @param orderId + * @return + */ + List findByOrderId(String orderId); + + /** + * 判断码是否是此单产品 + * + * @param codeList + * @param relId + * @return + */ + int isExist(String orderIdFk, String relId); + + /** + * 添加码明细 + * + * @param billNo 单据号 + * @param orderDetail 单据详情 + * @param code UDI码 + */ + void addCode(String billNo, PurDeliveryDetailResponse orderDetail, String code); +} diff --git a/src/main/java/com/glxp/api/service/purchase/PurDeliveryService.java b/src/main/java/com/glxp/api/service/purchase/PurDeliveryService.java index 0ab3400a..7ee36f6a 100644 --- a/src/main/java/com/glxp/api/service/purchase/PurDeliveryService.java +++ b/src/main/java/com/glxp/api/service/purchase/PurDeliveryService.java @@ -1,5 +1,6 @@ package com.glxp.api.service.purchase; +import com.glxp.api.common.res.BaseResponse; import com.glxp.api.entity.purchase.PurDeliveryEntity; import com.glxp.api.req.purchase.PurDeliveryRequest; import com.glxp.api.res.purchase.PurDeliveryResponse; @@ -17,4 +18,20 @@ public interface PurDeliveryService { Boolean deleteByIds(List ids); Boolean deleteById(long id); + + /** + * 根据单号查询送货单 + * + * @param billNo + * @return + */ + PurDeliveryEntity findByBillNo(String billNo); + + /** + * 完成验收 + * + * @param purDeliveryEntity + * @return + */ + BaseResponse updateReview(PurDeliveryEntity purDeliveryEntity); } diff --git a/src/main/java/com/glxp/api/service/purchase/PurOrderDetailService.java b/src/main/java/com/glxp/api/service/purchase/PurOrderDetailService.java index ec7f9659..0bf1c5bf 100644 --- a/src/main/java/com/glxp/api/service/purchase/PurOrderDetailService.java +++ b/src/main/java/com/glxp/api/service/purchase/PurOrderDetailService.java @@ -1,12 +1,10 @@ package com.glxp.api.service.purchase; - import com.glxp.api.entity.basic.BasicProductsEntity; import com.glxp.api.entity.purchase.PurOrderDetailEntity; -import com.glxp.api.entity.purchase.PurPlanDetailEntity; import com.glxp.api.req.purchase.PurOrderDetailRequest; -import com.glxp.api.req.purchase.PurPlanDetailRequest; +import com.glxp.api.res.purchase.PurDeliveryDetailResponse; import com.glxp.api.res.purchase.PurOrderDetailResponse; import java.util.List; @@ -33,4 +31,11 @@ public interface PurOrderDetailService { BasicProductsEntity selectIoOrderDetailBiz(long id); + /** + * 判断单据是否校验完成 + * + * @param orderDetails + * @return + */ + boolean vailFinish(List orderDetails); } diff --git a/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryCodeServiceImpl.java b/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryCodeServiceImpl.java new file mode 100644 index 00000000..ca4766e2 --- /dev/null +++ b/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryCodeServiceImpl.java @@ -0,0 +1,86 @@ +package com.glxp.api.service.purchase.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.glxp.api.dao.purchase.PurDeliveryCodeDao; +import com.glxp.api.dao.purchase.PurDeliveryDetailDao; +import com.glxp.api.entity.basic.UdiEntity; +import com.glxp.api.entity.purchase.PurDeliveryCodeEntity; +import com.glxp.api.entity.purchase.PurDeliveryDetailEntity; +import com.glxp.api.res.purchase.PurDeliveryDetailResponse; +import com.glxp.api.service.purchase.PurDeliveryCodeService; +import com.glxp.api.util.Constant; +import com.glxp.api.util.udi.FilterUdiUtils; +import com.glxp.api.util.udi.UdiCalCountUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class PurDeliveryCodeServiceImpl implements PurDeliveryCodeService { + + @Resource + private PurDeliveryCodeDao purDeliveryCodeDao; + @Resource + private PurDeliveryDetailDao purDeliveryDetailDao; + @Resource + private UdiCalCountUtil calCountUtil; + + @Override + public List findByOrderId(String orderId) { + return purDeliveryCodeDao.selectList(new QueryWrapper().eq("orderId", orderId)); + } + + @Override + public int isExist(String orderIdFk, String relId) { + //解析UDI码 + if (StrUtil.isBlank(relId)) { + return Constant.CHECK_NULL; + } + //查询是否存是此送货单的产品 + Long count = purDeliveryDetailDao.selectCount(new QueryWrapper() + .eq("productId", relId).eq("orderIdFk", orderIdFk)); + return count > 0 ? Constant.CHECK_EXIT : Constant.CHECK_NULL; + } + + @Override + public void addCode(String billNo, PurDeliveryDetailResponse orderDetail, String code) { + UdiEntity udi = FilterUdiUtils.getUdi(code); + PurDeliveryCodeEntity codeEntity = null; + if (StrUtil.isBlank(udi.getSerialNo())) { + //无序列号产品,查询是否已经存在此条码,若存在则+1,不存在则新增一条 + codeEntity = purDeliveryCodeDao.selectOne(new QueryWrapper().eq("billNo", billNo).eq("code", code)); + } + if (null != codeEntity) { + codeEntity.setCount(codeEntity.getCount() + 1); + //重新计算实际数量 + int reCount = calCountUtil.getActCount(udi.getUdi()) * codeEntity.getCount(); + codeEntity.setReCount(reCount); + codeEntity.setUpdateTime(new Date()); + purDeliveryCodeDao.updateById(codeEntity); + } else { + //新增条码 + codeEntity = new PurDeliveryCodeEntity(); + codeEntity.setRelId(orderDetail.getRelId()); + codeEntity.setCode(code); + codeEntity.setCount(1); + codeEntity.setReCount(calCountUtil.getActCount(udi.getUdi())); + codeEntity.setOrderIdFk(billNo); + codeEntity.setBatchNo(udi.getBatchNo()); + codeEntity.setSerialNo(udi.getSerialNo()); + codeEntity.setProduceDate(udi.getProduceDate()); + codeEntity.setExipreDate(udi.getExpireDate()); + codeEntity.setSupId(orderDetail.getSupId()); + codeEntity.setCreateTime(new Date()); + codeEntity.setUpdateTime(new Date()); + purDeliveryCodeDao.insert(codeEntity); + } + } + +} diff --git a/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryServiceImpl.java b/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryServiceImpl.java index 0aa94354..1448e15a 100644 --- a/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryServiceImpl.java +++ b/src/main/java/com/glxp/api/service/purchase/impl/PurDeliveryServiceImpl.java @@ -1,15 +1,22 @@ package com.glxp.api.service.purchase.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.constant.ConstantStatus; import com.glxp.api.dao.purchase.PurDeliveryDao; import com.glxp.api.entity.purchase.PurDeliveryEntity; import com.glxp.api.req.purchase.PurDeliveryRequest; import com.glxp.api.res.purchase.PurDeliveryResponse; +import com.glxp.api.service.auth.CustomerService; import com.glxp.api.service.purchase.PurDeliveryService; +import com.glxp.api.util.RedisUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; +import java.util.Date; import java.util.List; @Service @@ -17,6 +24,10 @@ public class PurDeliveryServiceImpl implements PurDeliveryService { @Resource PurDeliveryDao purDeliveryDao; + @Resource + private CustomerService customerService; + @Resource + private RedisUtil redisUtil; @Override public List queryPageList(PurDeliveryRequest purDeliveryRequest) { @@ -50,4 +61,23 @@ public class PurDeliveryServiceImpl implements PurDeliveryService { public Boolean deleteById(long id) { return purDeliveryDao.deleteById(id) > 0 ? true : false; } + + @Override + public PurDeliveryEntity findByBillNo(String billNo) { + return purDeliveryDao.selectOne(new QueryWrapper().eq("billNo", billNo)); + } + + @Override + public BaseResponse updateReview(PurDeliveryEntity purDeliveryEntity) { + //删除redis中缓存的送货单数据 + redisUtil.del(ConstantStatus.REDIS_DELIVERY_BILLNO + purDeliveryEntity.getBillNo()); + redisUtil.del(ConstantStatus.REDIS_DELIVERY_CODES + purDeliveryEntity.getBillNo()); + + //更新单据信息 + purDeliveryEntity.setStatus(3); //修改为已审核状态 + purDeliveryEntity.setUpdateTime(new Date()); + purDeliveryEntity.setAuditUser(customerService.getUserIdStr()); + purDeliveryDao.updateById(purDeliveryEntity); + return ResultVOUtils.success("验收成功"); + } } diff --git a/src/main/java/com/glxp/api/service/purchase/impl/PurOrderDetailServiceImpl.java b/src/main/java/com/glxp/api/service/purchase/impl/PurOrderDetailServiceImpl.java index c1368bff..7378a441 100644 --- a/src/main/java/com/glxp/api/service/purchase/impl/PurOrderDetailServiceImpl.java +++ b/src/main/java/com/glxp/api/service/purchase/impl/PurOrderDetailServiceImpl.java @@ -1,16 +1,14 @@ package com.glxp.api.service.purchase.impl; +import cn.hutool.core.collection.CollUtil; import com.github.pagehelper.PageHelper; import com.glxp.api.dao.purchase.PurOrderDetailDao; -import com.glxp.api.dao.purchase.PurPlanDetailDao; import com.glxp.api.entity.basic.BasicProductsEntity; import com.glxp.api.entity.purchase.PurOrderDetailEntity; -import com.glxp.api.entity.purchase.PurPlanDetailEntity; import com.glxp.api.req.purchase.PurOrderDetailRequest; -import com.glxp.api.req.purchase.PurPlanDetailRequest; +import com.glxp.api.res.purchase.PurDeliveryDetailResponse; import com.glxp.api.res.purchase.PurOrderDetailResponse; import com.glxp.api.service.purchase.PurOrderDetailService; -import com.glxp.api.service.purchase.PurPlanDetailService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -92,4 +90,18 @@ public class PurOrderDetailServiceImpl implements PurOrderDetailService { public BasicProductsEntity selectIoOrderDetailBiz(long id) { return purOrderDetailDao.selectIoOrderDetailBiz(id); } + + @Override + public boolean vailFinish(List orderDetails) { + if (CollUtil.isNotEmpty(orderDetails)) { + for (PurDeliveryDetailResponse orderDetail : orderDetails) { + if (orderDetail.getCount() != orderDetail.getAcceptCount()) { + return false; + } + } + return true; + } + return false; + } + } diff --git a/src/main/java/com/glxp/api/util/RedisUtil.java b/src/main/java/com/glxp/api/util/RedisUtil.java index 02f4f0cd..51c55a02 100644 --- a/src/main/java/com/glxp/api/util/RedisUtil.java +++ b/src/main/java/com/glxp/api/util/RedisUtil.java @@ -2,11 +2,14 @@ package com.glxp.api.util; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -583,4 +586,21 @@ public class RedisUtil { } } + /** + * 从redis中获取对应的集合 + * + * @param key + * @param c + * @return + */ + public List getList(String key, Class c) { + if (StrUtil.isBlank(key)) { + return Collections.emptyList(); + } + Object value = redisTemplate.opsForValue().get(key); + if (null != value) { + return JSONUtil.toList(JSONUtil.toJsonStr(value), c); + } + return Collections.emptyList(); + } } diff --git a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java index aebc2833..78119a3f 100644 --- a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java +++ b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java @@ -56,4 +56,9 @@ public class UdiCalCountUtil { } + public int getActCountByRelId(String relId) { + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(relId); + int count = getActCount(udiRelevanceResponse); + return count; + } } diff --git a/src/main/resources/mybatis/mapper/basic/UdiRelevanceDao.xml b/src/main/resources/mybatis/mapper/basic/UdiRelevanceDao.xml index 8bd812e1..080f26e5 100644 --- a/src/main/resources/mybatis/mapper/basic/UdiRelevanceDao.xml +++ b/src/main/resources/mybatis/mapper/basic/UdiRelevanceDao.xml @@ -906,4 +906,10 @@ where basic_udirel.relCode = #{relCode} + diff --git a/src/main/resources/mybatis/mapper/purchase/PurDeliveryCodeDao.xml b/src/main/resources/mybatis/mapper/purchase/PurDeliveryCodeDao.xml new file mode 100644 index 00000000..4c2e42ab --- /dev/null +++ b/src/main/resources/mybatis/mapper/purchase/PurDeliveryCodeDao.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + id, orderIdFk, code, nameCode, batchNo, produceDate, exipreDate, serialNo, relId, + supId, `count`, reCount, createTime, updateTime + + \ No newline at end of file