diff --git a/src/main/java/com/glxp/api/constant/ConstantStatus.java b/src/main/java/com/glxp/api/constant/ConstantStatus.java index ed092c876..9cf03a72f 100644 --- a/src/main/java/com/glxp/api/constant/ConstantStatus.java +++ b/src/main/java/com/glxp/api/constant/ConstantStatus.java @@ -28,7 +28,7 @@ public class ConstantStatus { public static final Integer ORDER_STATS_ERROR = 4; /** - * 校验成功待核对 + * 待核对 */ public static final Integer ORDER_STATUS_CHECK_SUCCESS = 5; @@ -39,7 +39,7 @@ public class ConstantStatus { /** - * 已交接待审核 + * 待审核 */ public static final Integer ORDER_STATUS_CHECK_REW = 10; @@ -86,6 +86,11 @@ public class ConstantStatus { public static final Integer ACTION_TYPE_ADVANCE = 3; //寄售 + public static final int ORDER_SPUSE_NO = 0; //不允许供应商使用 + public static final int ORDER_SPUSE_LOOK = 1; //允许供应商查看 + public static final int ORDER_SPUSE_EDIT = 2; //允许供应商编辑 + + public static final Integer ORDER_STATUS_ADDITIONAL = 5; //补录单据 // public static final Integer ORDER_STATUS_RECEIVEED = 7; @@ -193,7 +198,7 @@ public class ConstantStatus { public static final int FROM_PDAUN = 4; //pda未校验 public static final int FROM_PC = 5; //pc端扫码精灵 public static final int FROM_CHANGE = 6; //单据流转 - public static final int FROM_UDISP = 7; //供应商平台|| UDI管理系统 + public static final int FROM_UDISP = 7; //供应商平台||UDI管理系统 public static final int FROM_PEACE_CHANGE = 8; //平衡补单 public static final int FROM_REVIEW = 9; //单据验收直接补单 public static final int FROM_COPY = 10; //单据复制 @@ -202,6 +207,7 @@ public class ConstantStatus { public static final int FROM_RECEIVE = 13; //领用单据转单 public static final int FROM_THRORDER = 14; //第三方单据转单 public static final int FROM_Order = 15; //采购计划转单 + public static final int FROM_BACK = 17; //出库转退货单; //DI类型 @@ -222,11 +228,11 @@ public class ConstantStatus { public static final String SYNC_BUS_TYPE = "AutoUploadBusType"; public static final String SYNC_SCAN_ORDER = "AutoUploadOrder"; public static final String SYNC_BUS_ORDER = "AutoUploadBusOrder"; + public static final String SYNC_DI_PRODUCTS = "AutoDownloadDiProducts"; public static final String SYNC_THR_DATA = "AutoUploadThrData"; public static final String SYNC_THR_PRODUCTS = "AutoUploadThrProducts"; public static final String SYNC_SYS_SETTING = "AutoUploadSysSetting"; - //自动下载所有数据 public static final String SYNC_DOWNLOAD_BASIC_DATA = "AutoDownloadAllData"; //自动下载单据数据 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 149a95b92..c2d8b4e0b 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -1,14 +1,18 @@ package com.glxp.api.controller.inout; +import cn.hutool.Hutool; 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.Log; 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.BusinessType; 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.AuthAdmin; import com.glxp.api.entity.auth.InvWarehouseEntity; @@ -17,6 +21,7 @@ import com.glxp.api.entity.basic.BasicCorpEntity; import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.entity.inout.*; +import com.glxp.api.entity.inv.InvPreInProductDetailEntity; import com.glxp.api.entity.inv.InvPreinDetailEntity; import com.glxp.api.entity.system.SystemParamConfigEntity; import com.glxp.api.http.sync.SpsDirectClient; @@ -34,7 +39,9 @@ import com.glxp.api.service.auth.InvWarehouseService; import com.glxp.api.service.basic.*; import com.glxp.api.service.inout.*; import com.glxp.api.service.inv.InvPreinDetailService; +import com.glxp.api.service.inv.InvPreinProductDetailService; import com.glxp.api.service.inv.InvProductDetailService; +import com.glxp.api.service.purchase.SupProductService; import com.glxp.api.service.system.SystemParamConfigService; import com.glxp.api.util.CustomUtil; import com.glxp.api.util.DateUtil; @@ -85,17 +92,20 @@ public class IoCodeTempController extends BaseController { @Resource IoCheckInoutService ioCheckInoutService; @Resource - InvPreinDetailService invPreinDetailService; + InvPreinProductDetailService invPreinProductDetailService; @Resource InvProductDetailService invProductDetailService; @Resource IoCodeLostService codeLostService; @Resource IoOrderDetailBizService orderDetailBizService; + @Resource + IoCodeService codeService; //手持端扫码单据上传调用接口 @AuthRuleAnnotation("") @PostMapping("warehouse/inout/postOrders") + @Log(title = "单据管理", businessType = BusinessType.INSERT) public BaseResponse postOrders(@RequestBody PostOrderRequest postOrderRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { @@ -330,6 +340,7 @@ public class IoCodeTempController extends BaseController { //前端扫码提交 @AuthRuleAnnotation("") @PostMapping("warehouse/inout/addOrderWeb") + @Log(title = "单据管理", businessType = BusinessType.INSERT) public BaseResponse addOrderWeb(@RequestBody AddOrderRequest addOrderRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { @@ -415,8 +426,9 @@ public class IoCodeTempController extends BaseController { //过期提醒: - SystemParamConfigEntity expireParamConfigEntity = systemParamConfigService.selectByParamKey("expire_date_tip"); - if (expireParamConfigEntity.getParamValue().equals("1") && !addOrderRequest.isIgnoreExpire()) { +// SystemParamConfigEntity expireParamConfigEntity = systemParamConfigService.selectByParamKey("expire_date_tip"); + + if (bussinessTypeEntity.isCheckExpire() && !addOrderRequest.isIgnoreExpire()) { if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { String expireDate = "20" + udiEntity.getExpireDate(); long expireTime = DateUtil.parseDateExpire(expireDate); @@ -429,7 +441,7 @@ public class IoCodeTempController extends BaseController { //失效期提醒 SystemParamConfigEntity recentParamConfigEntity = systemParamConfigService.selectByParamKey("recent_date_tip"); long recent = Long.parseLong(recentParamConfigEntity.getParamValue()); - if (recent > 0 && !addOrderRequest.isIgnoreRecentExpire()) { + if (bussinessTypeEntity.isCheckVailDate() && recent > 0 && !addOrderRequest.isIgnoreRecentExpire()) { if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { String expireDate = "20" + udiEntity.getExpireDate(); long expireTime = DateUtil.parseDateExpire(expireDate); @@ -445,11 +457,12 @@ public class IoCodeTempController extends BaseController { } } + //校验预验收是否已存在 if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN) { if (StrUtil.isNotEmpty(udiEntity.getSerialNo())) { - List invProductDetailEntities = invPreinDetailService.findUseByCode(code); - if (CollUtil.isNotEmpty(invProductDetailEntities)) { + int count = invPreinProductDetailService.findCountByCode(code); + if (count > 0) { return ResultVOUtils.error(500, "预验收库存已存在此UDI码,请检查后重试!"); } } @@ -457,35 +470,66 @@ public class IoCodeTempController extends BaseController { //校验预验收库存是否已存在 if (bussinessTypeEntity.isScanPreIn()) { - InvPreinDetailEntity invProductDetailEntity = invPreinDetailService.findUseOneByCode(code); - if (invProductDetailEntity == null) { - return ResultVOUtils.error(500, "预验收库存未存在此产品!"); - } else { - if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo()) - && !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) { - return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!"); - } - if (StrUtil.isNotEmpty(orderId)) {//非首次添加 - if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 - //无序列号,则可能存在多个预验收入库单 - IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code); - List invPreinDetailEntities = invPreinDetailService.findUseByCode(code); - int count = 0; - for (InvPreinDetailEntity temp : invPreinDetailEntities) { - count = count + temp.getCount(); - } - if (codeTempEntity != null) { - if (count < (codeTempEntity.getMyCount() + 1)) { - return ResultVOUtils.error(500, "超出预验收库存数量"); + + if (bussinessTypeEntity.getBackPreinType() == 1) {//按单出库 + + String orderIds = bussinessTypeEntity.getCheckPreInOrders(); + if (StrUtil.isNotEmpty(orderIds)) { + String[] orderIdArray = StringUtils.split(","); + List orderList = CollUtil.toList(orderIdArray); + int count = codeService.findByOrderIdsCount(orderList, code); + if (count <= 0) { + return ResultVOUtils.error(500, "预验收库存数量不足!"); + } + if (StrUtil.isNotEmpty(orderId)) {//非首次添加 + if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 + //无序列号,则可能存在多个预验收入库单 + IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code); + if (codeTempEntity != null) { + if (count < (codeTempEntity.getMyCount() + 1)) { + return ResultVOUtils.error(500, "超出预验收库存数量"); + } + } + } else { + if (count < 1) { + return ResultVOUtils.error(500, "预验收库存数量不足"); } } - } else { - if (invProductDetailEntity.getCount() < 1) { - return ResultVOUtils.error(500, "超出预验收库存数量"); + } + + } else { + return ResultVOUtils.error(500, "未选择预验收入库单,请先选择预验收入库单!"); + } + + } else { //按库存出库 + int preInCount = invPreinProductDetailService.findCountByCode(code); + InvPreInProductDetailEntity invPreinDetailEntity = invPreinProductDetailService.findUseOneByCode(code); + if (preInCount <= 0) { + return ResultVOUtils.error(500, "预验收库存数量不足!"); + } else { + if (StrUtil.isNotEmpty(invPreinDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo()) + && !invPreinDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) { + return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!"); + } + if (StrUtil.isNotEmpty(orderId)) {//非首次添加 + if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 + //无序列号,则可能存在多个预验收入库单 + IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code); + if (codeTempEntity != null) { + if (preInCount < (codeTempEntity.getMyCount() + 1)) { + return ResultVOUtils.error(500, "超出预验收库存数量"); + } + } + } else { + if (preInCount < 1) { + return ResultVOUtils.error(500, "预验收库存数量不足"); + } } } } } + + } @@ -521,6 +565,7 @@ public class IoCodeTempController extends BaseController { return ResultVOUtils.error(500, "当前UDI码已存在,且存在异常未处理!"); } udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null); + BeanUtils.copyProperties(exitLocalEntity, genDetaiEntity); genDetaiEntity.setCount(1); genDetaiEntity.setReCount(udiCalCountUtil.getActCount(udiRelevanceResponses.get(0))); @@ -642,12 +687,24 @@ public class IoCodeTempController extends BaseController { boolean isBillExit = orderDetailBizService.isExit(orderEntity.getBillNo()); if (!isBillExit) { + orderService.deleteByBillNo(orderEntity.getBillNo()); return ResultVOUtils.error(500, "请先录入业务详情"); } } BaseResponse baseResponse = checkRelId(codeEnttity, unitFk); + + //判断证书是否过期 +// if (codeEnttity.getRelId() != null && bussinessTypeEntity.isCheckCertExpire()) { +// +// SupProductEntity supProductEntity = supProductService.findByRelIdFk(codeEnttity.getRelId() + ""); +// if(supProductEntity!=null){ +// +// } +// if (DateUtil.) +// } + BaseResponse invRes = checkInv(bussinessTypeEntity, codeEnttity); if (invRes != null) { return invRes; @@ -820,7 +877,7 @@ public class IoCodeTempController extends BaseController { } public BaseResponse checkInv(BasicBussinessTypeEntity bussinessTypeEntity, IoCodeTempEntity codeTempEntity) { - if (bussinessTypeEntity.isVailInv()) { + if (bussinessTypeEntity.isVailInv() && bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_ADVANCE) { // int count = invPreProductDetailService.vailStockCount(code); //todo 寄售 // if (count < 0) { @@ -860,6 +917,7 @@ public class IoCodeTempController extends BaseController { @AuthRuleAnnotation("") @PostMapping("/udiwms/addCode/updateBindSup") + @Log(title = "单据管理", businessType = BusinessType.UPDATE) public BaseResponse updateBindSup(@RequestBody IoCodeTempEntity codeSaveRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { @@ -915,6 +973,7 @@ public class IoCodeTempController extends BaseController { @AuthRuleAnnotation("") @GetMapping("warehouse/inout/deleteCodesTempById") + @Log(title = "单据管理", businessType = BusinessType.DELETE) public BaseResponse deleteCodesTempById(@RequestParam("id") Integer id) { IoCodeTempEntity codeTempEntity = codeTempService.selectById(id); @@ -942,6 +1001,13 @@ public class IoCodeTempController extends BaseController { } } + + boolean r1 = orderDetailBizService.isExit(orderDetailCodeEntity.getOrderIdFk()); + boolean r2 = ioOrderDetailCodeService.isExit(orderDetailCodeEntity.getOrderIdFk()); + if (!r1 && !r2) { + orderService.deleteByBillNo(orderDetailCodeEntity.getOrderIdFk()); + } + orderEntity.setUpdateUser(getUserId() + ""); orderEntity.setUpdateTime(new Date()); orderService.update(orderEntity); @@ -951,7 +1017,10 @@ public class IoCodeTempController extends BaseController { @AuthRuleAnnotation("") @PostMapping("warehouse/inout/saveTempCode") + @Log(title = "单据管理", businessType = BusinessType.UPDATE) public BaseResponse saveCode(@RequestBody IoCodeTempEntity codeTempEntity) { + if (codeTempEntity.getCount() == null) + codeTempEntity.setCount(1); if (StrUtil.isNotEmpty(codeTempEntity.getSerialNo()) && codeTempEntity.getSerialNo().length() > 20) { return ResultVOUtils.error(500, "无效条码!序列号超出最大范围"); 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 b05a57677..2bee79d10 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -97,6 +97,31 @@ public class IoOrderController extends BaseController { return ResultVOUtils.page(pageInfo); } + + @AuthRuleAnnotation("") + @GetMapping("/udiwms/inout/preInorder/filter") + public BaseResponse filterPreInorder(FilterOrderRequest filterOrderRequest) { + + + if (StrUtil.isNotBlank(filterOrderRequest.getStatusType())) { + orderService.setFilterStatus(filterOrderRequest); + } + if (StrUtil.isNotBlank(filterOrderRequest.getVueType())) { + orderService.setActions(filterOrderRequest); + } + + if (StrUtil.isNotEmpty(filterOrderRequest.getSupInoivceSearch())) { + orderService.setInvoiceFiltes(filterOrderRequest); + } + String customerId = getCustomerId(); + if (!customerId.equals("110")) { + filterOrderRequest.setFromCorp(customerId); + } + List list = orderService.filterList(filterOrderRequest); + PageInfo pageInfo = new PageInfo<>(list); + return ResultVOUtils.page(pageInfo); + } + @GetMapping("/udiwms/inout/order/filterInvoice") public BaseResponse filterInvoice(FilterOrderRequest filterOrderRequest) { filterOrderRequest.setDealStatuses(Arrays.asList(2, 3)); diff --git a/src/main/java/com/glxp/api/controller/inv/InvPreinProductController.java b/src/main/java/com/glxp/api/controller/inv/InvPreinProductController.java new file mode 100644 index 000000000..d42f8a722 --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvPreinProductController.java @@ -0,0 +1,101 @@ +package com.glxp.api.controller.inv; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.github.pagehelper.PageInfo; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.entity.inv.InvPreInProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPreProductDetailRequest; +import com.glxp.api.req.inv.FilterInvPreinProductRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.inv.InvPreProductDetailResponse; +import com.glxp.api.res.inv.InvPreProductPageResponse; +import com.glxp.api.res.inv.InvPreinProductResponse; +import com.glxp.api.service.auth.CustomerService; +import com.glxp.api.service.auth.WarehouseUserService; +import com.glxp.api.service.inv.InvPreinProductDetailService; +import com.glxp.api.service.inv.InvPreinProductService; +import com.glxp.api.util.udi.FilterUdiUtils; +import lombok.extern.slf4j.Slf4j; +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.List; + +/** + * 预验收库存接口 + */ +@Slf4j +@RestController +public class InvPreinProductController { + @Resource + private InvPreinProductDetailService invPreinProductDetailService; + @Resource + private InvPreinProductService invPreinProductService; + @Resource + private WarehouseUserService warehouseUserService; + @Resource + private CustomerService customerService; + + /** + * 预验收库存查询接口 + * + * @param filterInvPreinProductRequest + * @return + */ + @GetMapping("/spms/inv/pre/in/product/filter") + public BaseResponse filterList(FilterInvPreinProductRequest filterInvPreinProductRequest) { + boolean showSup = false; //前端控制表格显示字段 + if (StrUtil.isNotBlank(filterInvPreinProductRequest.getUdiCode())) { + filterInvPreinProductRequest.setNameCode(FilterUdiUtils.getDiStr(filterInvPreinProductRequest.getUdiCode())); + } + + if (StrUtil.isBlank(filterInvPreinProductRequest.getInvCode())) { + List invCodes = warehouseUserService.selectCodeByUser(customerService.getUserIdStr()); + if (CollUtil.isNotEmpty(invCodes)) { + filterInvPreinProductRequest.setInvCodes(invCodes); + } + } + List list = invPreinProductService.filterList(filterInvPreinProductRequest); + PageInfo pageInfo = new PageInfo<>(list); + InvPreProductPageResponse pageResponse = new InvPreProductPageResponse<>(); + pageResponse.setList(pageInfo.getList()); + pageResponse.setTotal(pageInfo.getTotal()); + pageResponse.setShowSup(showSup); + return ResultVOUtils.success(pageResponse); + } + + /** + * 查询预验收库存详情 + * + * @param detailRequest + * @return + */ + @GetMapping("/spms/inv/pre/in/product/filterDetail") + public BaseResponse filterInvPreProductDetail(FilterInvPreProductDetailRequest detailRequest) { + List invPreProductDetailEntities = invPreinProductDetailService.filterPreProductDetailList(detailRequest); + PageInfo pageInfo = new PageInfo<>(invPreProductDetailEntities); + + List list = new ArrayList<>(); + if (CollUtil.isNotEmpty(invPreProductDetailEntities)) { + invPreProductDetailEntities.forEach(invPreProductDetailEntity -> { + InvPreProductDetailResponse response = new InvPreProductDetailResponse(); + BeanUtil.copyProperties(invPreProductDetailEntity, response); + //设置单据类型名称等单据相关参数 + invPreinProductDetailService.setOrderInfo(response); + list.add(response); + }); + } + + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setList(list); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + return ResultVOUtils.success(pageSimpleResponse); + } + + +} diff --git a/src/main/java/com/glxp/api/dao/inv/InvPreInProductDetailDao.java b/src/main/java/com/glxp/api/dao/inv/InvPreInProductDetailDao.java new file mode 100644 index 000000000..f4d4e2679 --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inv/InvPreInProductDetailDao.java @@ -0,0 +1,30 @@ +package com.glxp.api.dao.inv; + +import com.glxp.api.dao.BaseMapperPlus; +import com.glxp.api.entity.inv.InvPreInProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPreProductDetailRequest; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; + +import java.util.List; + +/** + * 预验收库存详情Dao + */ +public interface InvPreInProductDetailDao extends BaseMapperPlus { + + /** + * 查询库存详情实体列表 + * + * @param filterInvPreProductDetailRequest + * @return + */ + List filterPreProductDetailList(FilterInvPreProductDetailRequest filterInvPreProductDetailRequest); + + /** + * 删除寄预验收库存详情 + * + * @param detailRequest + * @return + */ + boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest); +} diff --git a/src/main/java/com/glxp/api/dao/inv/InvPreinProductDao.java b/src/main/java/com/glxp/api/dao/inv/InvPreinProductDao.java new file mode 100644 index 000000000..546153ba5 --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inv/InvPreinProductDao.java @@ -0,0 +1,31 @@ +package com.glxp.api.dao.inv; + +import com.glxp.api.dao.BaseMapperPlus; +import com.glxp.api.entity.inv.InvPreinProductEntity; +import com.glxp.api.req.inv.FilterInvPreinProductRequest; +import com.glxp.api.res.inv.InvPreinProductResponse; + +import java.util.List; + +/** + * 预验收库存Dao + */ +public interface InvPreinProductDao extends BaseMapperPlus { + + /** + * 查询寄售库存VO列表 + * + * @param invPreProductRequest + * @return + */ + List filterList(FilterInvPreinProductRequest invPreProductRequest); + + /** + * 查询寄售库存实体列表 + * + * @param invPreProductRequest + * @return + */ + List filterPreProductList(FilterInvPreinProductRequest invPreProductRequest); + +} diff --git a/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java b/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java index 9f9aa5682..c01f60777 100644 --- a/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java +++ b/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java @@ -307,7 +307,7 @@ public class BasicBussinessTypeEntity { * 是否供应商使用 */ @TableField(value = "spUse") - private boolean spUse; + private int spUse; /** * 是否预验收单据类型 @@ -315,7 +315,7 @@ public class BasicBussinessTypeEntity { // @TableField(value = "preIn") // private boolean preIn; - +// 预验收剩余库存自动退库 @TableField(value = "preInBack") private boolean preInBack; @@ -396,8 +396,12 @@ public class BasicBussinessTypeEntity { @TableField(value = "checkCertExpire") private boolean checkCertExpire; + // 预验收退库单据类型 @TableField(value = "preInBackAction") private String preInBackAction; + // 预验收剩余库存退库方式 1:按单使用或退库,2:按货位/仓库使用或退库 @TableField(value = "backPreinType") private Integer backPreinType; + @TableField(value = "checkPreInOrders") + private String checkPreInOrders; } diff --git a/src/main/java/com/glxp/api/entity/inv/InvPreInProductDetailEntity.java b/src/main/java/com/glxp/api/entity/inv/InvPreInProductDetailEntity.java new file mode 100644 index 000000000..ac07b29c3 --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inv/InvPreInProductDetailEntity.java @@ -0,0 +1,167 @@ +package com.glxp.api.entity.inv; + +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 = "inv_pre_product_detail") +public class InvPreInProductDetailEntity { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * UDI码 + */ + @TableField(value = "code") + private String code; + + /** + * 出入单据类型 + */ + @TableField(value = "mainAction") + private String mainAction; + + /** + * 单据类型 + */ + @TableField(value = "`action`") + private String action; + + /** + * 订单号外键 + */ + @TableField(value = "orderId") + private String orderId; + + /** + * 耗材字典ID + */ + @TableField(value = "relId") + private Long relId; + + /** + * 最小销售标识 + */ + @TableField(value = "nameCode") + private String nameCode; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + private String batchNo; + + /** + * 生产日期 + */ + @TableField(value = "produceDate") + private String produceDate; + + /** + * 失效日期 + */ + @TableField(value = "expireDate") + private String expireDate; + + /** + * 序列号 + */ + @TableField(value = "serialNo") + private String serialNo; + + /** + * 供应商 + */ + @TableField(value = "supId") + private String supId; + + /** + * 扫码数量 + */ + @TableField(value = "`count`") + private int count; + + /** + * 实际数量 + */ + @TableField(value = "reCount") + private int reCount; + + /** + * 部门编码 + */ + @TableField(value = "deptCode") + private String deptCode; + + /** + * 仓库编码 + */ + @TableField(value = "invCode") + private String invCode; + + /** + * 货位编码 + */ + @TableField(value = "invSpaceCode") + private String invSpaceCode; + + /** + * 采购类型 + */ + @TableField(value = "purchaseType") + private Integer purchaseType; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + private Date updateTime; + + + + public static final String COL_ID = "id"; + + public static final String COL_CODE = "code"; + + public static final String COL_MAINACTION = "mainAction"; + + public static final String COL_ACTION = "action"; + + public static final String COL_ORDERID = "orderId"; + + public static final String COL_RELID = "relId"; + + public static final String COL_NAMECODE = "nameCode"; + + public static final String COL_BATCHNO = "batchNo"; + + public static final String COL_PRODUCEDATE = "produceDate"; + + public static final String COL_EXPIREDATE = "expireDate"; + + public static final String COL_SERIALNO = "serialNo"; + + public static final String COL_SUPID = "supId"; + + public static final String COL_COUNT = "count"; + + public static final String COL_RECOUNT = "reCount"; + + public static final String COL_DEPTCODE = "deptCode"; + + public static final String COL_INVCODE = "invCode"; + + public static final String COL_INVSPACECODE = "invSpaceCode"; + + public static final String COL_PURCHASETYPE = "purchaseType"; + + public static final String COL_UPDATETIME = "updateTime"; +} diff --git a/src/main/java/com/glxp/api/entity/inv/InvPreinProductEntity.java b/src/main/java/com/glxp/api/entity/inv/InvPreinProductEntity.java new file mode 100644 index 000000000..a144bb692 --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inv/InvPreinProductEntity.java @@ -0,0 +1,133 @@ +package com.glxp.api.entity.inv; + +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 = "inv_prein_product") +public class InvPreinProductEntity { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 耗材字典ID + */ + @TableField(value = "relIdFk") + private Long relIdFk; + + /** + * 最小销售标识 + */ + @TableField(value = "nameCode") + private String nameCode; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + private String batchNo; + + /** + * 生产日期 + */ + @TableField(value = "productionDate") + private String productionDate; + + /** + * 失效日期 + */ + @TableField(value = "expireDate") + private String expireDate; + + /** + * 入库数量 + */ + @TableField(value = "inCount") + private int inCount; + + /** + * 出库数量 + */ + @TableField(value = "outCount") + private int outCount; + + /** + * 实际数量 + */ + @TableField(value = "reCount") + private int reCount; + + /** + * 客户ID + */ + @TableField(value = "customerId") + private String customerId; + + /** + * 供应商ID + */ + @TableField(value = "supId") + private String supId; + + /** + * 部门编码 + */ + @TableField(value = "deptCode") + private String deptCode; + + /** + * 仓库编码 + */ + @TableField(value = "invCode") + private String invCode; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + private Date updateTime; + + public static final String COL_ID = "id"; + + public static final String COL_RELIDFK = "relIdFk"; + + public static final String COL_NAMECODE = "nameCode"; + + public static final String COL_BATCHNO = "batchNo"; + + public static final String COL_PRODUCTIONDATE = "productionDate"; + + public static final String COL_EXPIREDATE = "expireDate"; + + public static final String COL_INCOUNT = "inCount"; + + public static final String COL_OUTCOUNT = "outCount"; + + public static final String COL_RECOUNT = "reCount"; + + public static final String COL_CUSTOMERID = "customerId"; + + public static final String COL_SUPID = "supId"; + + public static final String COL_DEPTCODE = "deptCode"; + + public static final String COL_INVCODE = "invCode"; + + public static final String COL_CREATETIME = "createTime"; + + public static final String COL_UPDATETIME = "updateTime"; +} diff --git a/src/main/java/com/glxp/api/req/basic/BussinessTypeSaveRequest.java b/src/main/java/com/glxp/api/req/basic/BussinessTypeSaveRequest.java index bb787fb6d..b5496efb0 100644 --- a/src/main/java/com/glxp/api/req/basic/BussinessTypeSaveRequest.java +++ b/src/main/java/com/glxp/api/req/basic/BussinessTypeSaveRequest.java @@ -260,7 +260,7 @@ public class BussinessTypeSaveRequest { /** * 是否供应商使用 */ - private Boolean spUse; + private Integer spUse; /** * 是否预验收单据类型 @@ -294,12 +294,13 @@ public class BussinessTypeSaveRequest { private boolean fillCodeRel; + private boolean checkVailDate; private boolean checkExpire; private boolean checkCertExpire; - private String preInBackAction; private Integer backPreinType; + private String checkPreInOrders; } diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvPreinProductRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvPreinProductRequest.java new file mode 100644 index 000000000..17d12d197 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvPreinProductRequest.java @@ -0,0 +1,101 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +import java.util.List; + +/** + * 预验收库存查询参数 + */ +@Data +public class FilterInvPreinProductRequest extends ListPageRequest { + + private String id; + + /** + * 产品名称 + */ + private String cpmctymc; + + /** + * 产品标识DI + */ + private String nameCode; + + /** + * UDI码 + */ + private String udiCode; + + /** + * 耗材字典ID + */ + private String relIdFk; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String productionDate; + + /** + * 失效日期 + */ + private String expireDate; + + /** + * 生产厂家 + */ + private String ylqxzcrbarmc; + + /** + * 批准文号 + */ + private String zczbhhzbapzbh; + + /** + * 客户ID + */ + private String customerId; + + /** + * 供应商ID + */ + private String supId; + + /** + * 供应商名称 + */ + private String supName; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 仓库数组 + */ + private List invCodes; + + /** + * 产品类别 + */ + private String cplb; + +} diff --git a/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java b/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java index 354bdefb4..4387b6c76 100644 --- a/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java +++ b/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java @@ -46,7 +46,7 @@ public class BasicBussinessTypeResponse { private Boolean changeEnable; private Boolean genUnit; private String defaultUnit; - private Boolean spUse; + private int spUse; private Boolean secCheckEnable; private boolean checkUdims; private boolean checkPdaEd; @@ -147,8 +147,7 @@ public class BasicBussinessTypeResponse { private boolean checkVailDate; private boolean checkExpire; private boolean checkCertExpire; - private String preInBackAction; private Integer backPreinType; - + private String checkPreInOrders; } diff --git a/src/main/java/com/glxp/api/res/inv/InvPreinProductResponse.java b/src/main/java/com/glxp/api/res/inv/InvPreinProductResponse.java new file mode 100644 index 000000000..35940bb15 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvPreinProductResponse.java @@ -0,0 +1,108 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +/** + * 预验收库存VO + */ +@Data +public class InvPreinProductResponse { + + private Integer id; + + /** + * 产品标识DI + */ + private String nameCode; + + /** + * 产品名称 + */ + private String cpmctymc; + + /** + * 耗材字典ID + */ + private String relIdFk; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String productionDate; + + /** + * 过期时间 + */ + private String expireDate; + + /** + * 生产厂家名称 + */ + private String ylqxzcrbarmc; + + /** + * 批准文号 + */ + private String zczbhhzbapzbh; + + /** + * 入库数量 + */ + private int inCount; + + /** + * 出库数量 + */ + private int outCount; + + /** + * 实际数量 + */ + private int reCount; + + /** + * 客户ID + */ + private String customerId; + + /** + * 供应商名称 + */ + private String supName; + + /** + * 供应商ID + */ + private String supId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 仓库名称 + */ + private String invName; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + +} 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 a69045886..6028d9056 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -2,13 +2,16 @@ package com.glxp.api.service.inout; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.UUID; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; 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.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.inout.*; +import com.glxp.api.entity.inv.InvInnerOrderPdfTempEntity; import com.glxp.api.entity.inv.InvPreinDetailEntity; import com.glxp.api.res.inout.IoOrderCheckResultResponse; import com.glxp.api.res.inout.IoOrderDetailBizResponse; @@ -16,18 +19,29 @@ 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; +import com.glxp.api.service.inv.InvPreinProductDetailService; +import com.glxp.api.util.CustomUtil; +import com.glxp.api.util.GennerOrderUtils; +import com.glxp.api.util.JasperUtils; +import com.glxp.api.util.OrderNoTypeBean; import com.glxp.api.util.udi.FilterUdiUtils; +import com.glxp.api.util.udi.UdiCalCountUtil; +import net.sf.jasperreports.engine.JRException; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.io.IOException; import java.util.*; /** * 校验出入库服务 */ @Service +@Transactional(rollbackFor = Exception.class) public class IoCheckInoutService { @Resource @@ -48,6 +62,8 @@ public class IoCheckInoutService { InvPreinDetailService invPreinDetailService; @Resource IoGenInvService genInvService; + @Resource + IoAddInoutService addInoutService; //判断是否需要手动校验 public boolean checkManual(String billNo) { @@ -719,97 +735,85 @@ public class IoCheckInoutService { @Resource IoChangeInoutService changeInoutService; + @Resource + InvPreinProductDetailService invPreinProductDetailService; + @Resource + UdiCalCountUtil udiCalCountUtil; //校验完成后生成库存 public void genInv(IoOrderEntity orderEntity, BasicBussinessTypeEntity bussinessTypeEntity) { - //预验收出库,删掉对应预验收库存 if (bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT) && bussinessTypeEntity.isScanPreIn()) { - List codeList = codeService.findByOrderId(orderEntity.getBillNo()); - - //找出UDI码对应的预验收入库单号 - Map preInOrder = new HashMap<>(); - for (IoCodeEntity warehouseEntity : codeList) { - List invProductDetailEntities = invPreinDetailService.findByCode(warehouseEntity.getCode()); - if (invProductDetailEntities.size() > 0) { - for (InvPreinDetailEntity invPreinDetailEntity : invProductDetailEntities) { - preInOrder.put(invPreinDetailEntity.getOrderId(), invPreinDetailEntity.getOrderId()); - invPreinDetailEntity.setStatus(ConstantStatus.INVIN_USE); - invPreinDetailService.update(invPreinDetailEntity); - } - - } - } - if (preInOrder.size() > 0) { - - if (StrUtil.isEmpty(orderEntity.getRelKey())) { - orderEntity.setRelKey(UUID.fastUUID().toString(true)); - } - - String preInBillNo = ""; - boolean isBreak = false; - for (String key : preInOrder.keySet()) { - if (!isBreak) { - preInBillNo = preInBillNo + "," + key; - IoOrderEntity preInEntity = orderService.findByBillNo(key); - preInEntity.setPreOutBillNo(orderEntity.getBillNo()); - preInEntity.setRelKey(orderEntity.getRelKey()); - orderService.update(preInEntity); - BasicBussinessTypeEntity preBusType = basicBussinessTypeService.findByAction(preInEntity.getAction()); - //预验收不删除单号,方便后续查询 - if (preBusType.isPreInBack()) { //预验收如果带回,则清空相关预验收库存; - invPreinDetailService.updateBack(preInEntity.getBillNo()); -// invPreinDetailService.deleteByOrderId(preInEntity.getBillNo()); - } else { //预验收如果不带回,则清除已出库相关库存 - for (IoCodeEntity codeEntity : codeList) { - if (StrUtil.isEmpty(codeEntity.getSerialNo())) { - InvPreinDetailEntity invPreinDetailEntity = invPreinDetailService.findByCode(key, codeEntity.getCode()); - if (invPreinDetailEntity != null) { - int count = 0; - if (invPreinDetailEntity.getCount() < codeEntity.getCount()) { - count = 0; + ThreadUtil.execAsync(() -> { + if (StrUtil.isNotEmpty(bussinessTypeEntity.getPreInBackAction())) { + if (bussinessTypeEntity.getBackPreinType() == 1) { //按单退货 + + String orderIds = bussinessTypeEntity.getCheckPreInOrders(); + if (StrUtil.isNotEmpty(orderIds)) { + String[] orderIdArray = StringUtils.split(","); + List orderList = CollUtil.toList(orderIdArray); + List outCodeEntitys = codeService.findByOrderId(orderEntity.getBillNo()); + List preInCodeEntities = codeService.findByOrderIds(orderList, null); + + // 扣减数量 + for (IoCodeEntity preInCodeEntity : preInCodeEntities) { + for (IoCodeEntity codeEntity : outCodeEntitys) { + if (preInCodeEntity.getCode().equals(codeEntity.getCode())) { + int count = preInCodeEntity.getMyCount() - codeEntity.getMyCount(); + int reCount = preInCodeEntity.getMyReCount() - codeEntity.getMyReCount(); + + if (count > 0) { + preInCodeEntity.setCount(count); + preInCodeEntity.setReCount(reCount); + codeEntity.setCount(0); + codeEntity.setReCount(0); + } else if (count < 0) { + preInCodeEntity.setCount(0); + preInCodeEntity.setReCount(0); + codeEntity.setCount(-count); + codeEntity.setReCount(-reCount); } else { - count = invPreinDetailEntity.getCount() - codeEntity.getCount(); - } - if (count >= 0) { - isBreak = true; - if (count == 0) { -// invPreinDetailService.deleteByCode(key, codeEntity.getCode()); - } else { - invPreinDetailEntity.setStatus(ConstantStatus.INVIN_IN); - invPreinDetailEntity.setCount(count); - invPreinDetailService.update(invPreinDetailEntity); - } - int reCount = invPreinDetailEntity.getReCount() - codeEntity.getMyReCount(); - if (reCount == 0) { -// invPreinDetailService.deleteByCode(key, codeEntity.getCode()); - } else { - invPreinDetailEntity.setStatus(ConstantStatus.INVIN_IN); - invPreinDetailEntity.setReCount(reCount); - invPreinDetailService.update(invPreinDetailEntity); - } + preInCodeEntity.setCount(0); + preInCodeEntity.setReCount(0); + codeEntity.setCount(0); + codeEntity.setReCount(0); } - } + } - } else { -// invPreinDetailService.deleteByCode(key, codeEntity.getCode()); + } + + List backCodeList = new ArrayList<>(); + for (IoCodeEntity codeEntity : preInCodeEntities) { + if (codeEntity.getMyCount() > 0) { + backCodeList.add(codeEntity); } } + genBackOrder(orderEntity, backCodeList); + } - } + } else { //按仓库货位退货 + List backCodeList = new ArrayList<>(); + List codeList = codeService.findByOrderId(orderEntity.getBillNo()); + for (IoCodeEntity codeEntity : codeList) { + int count = invPreinProductDetailService.findCountByCode(codeEntity.getCode()); + if (count > 0) { + codeEntity.setCount(count); + codeEntity.setReCount(udiCalCountUtil.getActCount(codeEntity.getNameCode())); + backCodeList.add(codeEntity); + genBackOrder(orderEntity, backCodeList); + } + } + } } - orderEntity.setPreInBillNo(preInBillNo.substring(1)); - orderService.update(orderEntity); - } + }); } //校验是否是不入库存单据 if (bussinessTypeEntity.isInStock()) { -// if (bussinessTypeEntity.getBusType() == ConstantStatus.BUS_TYPE_NORMAL) { //生成库存 if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN) { genInvService.genPreInInv(orderEntity.getBillNo()); @@ -822,11 +826,63 @@ public class IoCheckInoutService { //不入库存,直接进行单据流转 changeInoutService.changeOrder(orderEntity); } + } + + + public void genBackOrder(IoOrderEntity orderEntity, List backCodeList) { + if (CollUtil.isEmpty(backCodeList)) + return; + BasicBussinessTypeEntity basicBussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); + if (StrUtil.isNotEmpty(basicBussinessTypeEntity.getPreInBackAction())) { + IoOrderEntity outOrder = new IoOrderEntity(); + outOrder.setId(null); + outOrder.setMainAction(ConstantType.TYPE_OUT); + outOrder.setAction(basicBussinessTypeEntity.getAction()); + outOrder.setCreateTime(new Date()); + outOrder.setFromType(ConstantStatus.FROM_BACK); + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(basicBussinessTypeEntity.getPrefix()), "yyyyMMdd")); + outOrder.setBillNo(orderNo); + outOrder.setCustomerId(Constant.SYSTEM_CUSTOMER_ID); + outOrder.setCorpOrderId(CustomUtil.getId() + "x"); + outOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); + orderEntity.setUllageSupNo(outOrder.getBillNo()); + orderEntity.setUpdateTime(new Date()); + orderService.update(orderEntity); + outOrder.setOriginUllageSupNo(orderEntity.getBillNo()); + outOrder.setCreateUser(null); + outOrder.setReviewUser(null); + orderService.insertOrder(outOrder); + + //生成条码 + List codeTempEntities = new ArrayList<>(); + for (IoCodeEntity warehouseEntity : backCodeList) { + IoCodeTempEntity codeTempEntity = new IoCodeTempEntity(); + BeanUtils.copyProperties(warehouseEntity, codeTempEntity); + codeTempEntity.setId(null); + codeTempEntity.setOrderId(outOrder.getBillNo()); + codeTempEntity.setAction(outOrder.getAction()); + codeTempEntity.setMainAction(outOrder.getMainAction()); + codeTempEntity.setCreateTime(new Date()); + codeTempEntity.setUpdateTime(new Date()); + codeTempEntities.add(codeTempEntity); + } + codeTempService.insertBatch(codeTempEntities); + addInoutService.dealProcess(outOrder); + if (!checkManual(outOrder.getBillNo())) { + check(outOrder.getBillNo()); + } + + } } + // 预验收使用出库处理1.不带回扣库存;2.带回时生成退货出库单 + @Resource + GennerOrderUtils gennerOrderUtils; + + public String checkId(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) { if (bizEntity.getBindRlFk().longValue() == codeEntity.getBindRlFk().longValue()) { diff --git a/src/main/java/com/glxp/api/service/inout/IoCodeService.java b/src/main/java/com/glxp/api/service/inout/IoCodeService.java index 326b2dfdd..c04f895b5 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCodeService.java @@ -21,6 +21,13 @@ public interface IoCodeService { public IoCodeEntity findByUnique(String orderId, String code); + List findByOrderIds(List orderIds, String code); + + int findByOrderIdsCount(List orderIds, String code); + + + boolean isExitByRelId(String relId); + /** * 查询正式码表实体数据 * diff --git a/src/main/java/com/glxp/api/service/inout/impl/IoCodeServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/IoCodeServiceImpl.java index 36afabc70..023b4e6f4 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/IoCodeServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/IoCodeServiceImpl.java @@ -1,6 +1,7 @@ package com.glxp.api.service.inout.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; @@ -66,6 +67,36 @@ public class IoCodeServiceImpl implements IoCodeService { return ioCodeDao.selectOne(new QueryWrapper().eq("orderId", orderId).eq("code", code)); } + @Override + public List findByOrderIds(List orderIds, String code) { + + if (StrUtil.isNotEmpty(code)) + return ioCodeDao.selectList(new QueryWrapper().eq("code", code).in("orderId", orderIds)); + else { + return ioCodeDao.selectList(new QueryWrapper().in("orderId", orderIds)); + } + } + + @Override + public int findByOrderIdsCount(List orderIds, String code) { + List codeEntities = findByOrderIds(orderIds, code); + if (CollUtil.isNotEmpty(codeEntities)) { + int count = 0; + for (IoCodeEntity codeEntity : codeEntities) { + count = count + codeEntity.getMyCount(); + } + + return count; + } + return 0; + } + + @Override + public boolean isExitByRelId(String relId) { +// return ioCodeDao.selectList(new QueryWrapper().eq("relId", relId).last("limit 1")); + return ioCodeDao.exists(new QueryWrapper().eq("relId", relId)); + } + @Override public List filterCodeList(FilterCodeRequest filterCodeRequest) { if (null == filterCodeRequest) { diff --git a/src/main/java/com/glxp/api/service/inv/InvPreinProductDetailService.java b/src/main/java/com/glxp/api/service/inv/InvPreinProductDetailService.java new file mode 100644 index 000000000..a5f0e91d0 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvPreinProductDetailService.java @@ -0,0 +1,56 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.entity.inv.InvPreInProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPreProductDetailRequest; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; +import com.glxp.api.res.inv.InvPreProductDetailResponse; + +import java.util.List; + +/** + * 预验收库存详情Service + */ +public interface InvPreinProductDetailService { + + int insert(InvPreInProductDetailEntity invPreInProductDetailEntity); + + boolean insertList(List invPreProductDetailEntities); + + List selectByOrderIdFk(String billNo); + + List findByCode(String code); + + InvPreInProductDetailEntity selectByCode(String billNo, String code); + + boolean update(InvPreInProductDetailEntity invPreInProductDetailEntity); + + boolean deleteById(String id); + + int deleteByOrderId(String billNo); + + /** + * 查询寄售库存详情列表 + * + * @param invPreProductDetailRequest + * @return + */ + List filterPreProductDetailList(FilterInvPreProductDetailRequest invPreProductDetailRequest); + + /** + * 设置单据类型名称等单据相关参数 + * + * @param response + */ + void setOrderInfo(InvPreProductDetailResponse response); + + /** + * 删除寄售库存详情 + * + * @param detailRequest + */ + boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest); + + int findCountByCode(String code); + + InvPreInProductDetailEntity findUseOneByCode(String code); +} diff --git a/src/main/java/com/glxp/api/service/inv/InvPreinProductService.java b/src/main/java/com/glxp/api/service/inv/InvPreinProductService.java new file mode 100644 index 000000000..d1369a83b --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvPreinProductService.java @@ -0,0 +1,48 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.entity.inv.InvPreinProductEntity; +import com.glxp.api.req.inv.FilterInvPreinProductRequest; +import com.glxp.api.res.inv.InvPreinProductResponse; + +import java.util.List; + +/** + * 预验收库存Service + */ +public interface InvPreinProductService { + + int insert(InvPreinProductEntity invPreinProductEntity); + + + boolean update(InvPreinProductEntity invPreinProductEntity); + + InvPreinProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode); + + boolean deleteById(Integer id); + + /** + * 查询寄售库存VO + * + * @param filterInvPreinDetailRequest + * @return + */ + List filterList(FilterInvPreinProductRequest filterInvPreinDetailRequest); + + /** + * 查询寄售库存列表 + * + * @param invPreProductRequest + * @return + */ + List filterPreinProductList(FilterInvPreinProductRequest invPreProductRequest); + + /** + * 根据ID查询寄售库存信息 + * + * @param id + * @return + */ + InvPreinProductEntity findById(String id); + + boolean isExitByRelId(String relId); +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvPreInProductDetailServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvPreInProductDetailServiceImpl.java new file mode 100644 index 000000000..f3a0d508e --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvPreInProductDetailServiceImpl.java @@ -0,0 +1,167 @@ +package com.glxp.api.service.inv.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import com.glxp.api.constant.ConstantStatus; +import com.glxp.api.constant.ConstantType; +import com.glxp.api.dao.basic.BasicBussinessTypeDao; +import com.glxp.api.dao.basic.UdiProductDao; +import com.glxp.api.dao.inout.IoOrderDao; +import com.glxp.api.dao.inv.InvPreInProductDetailDao; +import com.glxp.api.entity.basic.BasicBussinessTypeEntity; +import com.glxp.api.entity.inout.IoOrderEntity; +import com.glxp.api.entity.inv.InvPreInProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPreProductDetailRequest; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; +import com.glxp.api.res.inv.InvPreProductDetailResponse; +import com.glxp.api.service.inv.InvPreinProductDetailService; +import com.glxp.api.util.DateUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvPreInProductDetailServiceImpl implements InvPreinProductDetailService { + + @Resource + private InvPreInProductDetailDao invPreInProductDetailDao; + @Resource + private BasicBussinessTypeDao bussinessTypeDao; + @Resource + private IoOrderDao orderDao; + @Resource + private UdiProductDao udiProductDao; + + @Override + public int insert(InvPreInProductDetailEntity invPreInProductDetailEntity) { + return invPreInProductDetailDao.insert(invPreInProductDetailEntity); + } + + @Override + public boolean insertList(List invPreProductDetailEntities) { + return invPreInProductDetailDao.insertBatch(invPreProductDetailEntities); + } + + @Override + public List selectByOrderIdFk(String billNo) { + if (StrUtil.isEmpty(billNo)) + return null; + List invProductDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper().eq("orderId", billNo)); + return invProductDetailEntities; + } + + @Override + public List findByCode(String code) { + List invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper().eq("code", code)); + return invPreinDetailEntities; + } + + @Override + public InvPreInProductDetailEntity selectByCode(String billNo, String code) { + List invProductDetailEntities = invPreInProductDetailDao.selectList + (new QueryWrapper().eq("code", code).eq("orderId", billNo)); + if (CollUtil.isNotEmpty(invProductDetailEntities)) + return invProductDetailEntities.get(0); + else + return null; + } + + @Override + public boolean update(InvPreInProductDetailEntity invPreInProductDetailEntity) { + return invPreInProductDetailDao.updateById(invPreInProductDetailEntity) == 1 ? true : false; + } + + @Override + public boolean deleteById(String id) { + return invPreInProductDetailDao.deleteById(id) == 1 ? true : false; + } + + @Override + public int deleteByOrderId(String billNo) { + return invPreInProductDetailDao.delete(new QueryWrapper().eq("orderId", billNo)); + } + + @Override + public List filterPreProductDetailList(FilterInvPreProductDetailRequest invPreProductDetailRequest) { + if (null == invPreProductDetailRequest) { + return Collections.emptyList(); + } + if (null != invPreProductDetailRequest.getPage() && null != invPreProductDetailRequest.getLimit()) { + PageHelper.offsetPage((invPreProductDetailRequest.getPage() - 1) * invPreProductDetailRequest.getLimit(), invPreProductDetailRequest.getLimit()); + } + return invPreInProductDetailDao.filterPreProductDetailList(invPreProductDetailRequest); + } + + @Override + public void setOrderInfo(InvPreProductDetailResponse response) { + //查询DI层级,根据DI层级设置数量取值 + Integer packLevel = udiProductDao.selectPackLevel(response.getNameCode()); + //设置出入库中文及出入库数量 + if (null != packLevel && packLevel != 1) { + //多级包装 + if (response.getMainAction().equals(ConstantType.TYPE_OUT)) { + response.setMainActionStr("出库"); + response.setOutCount(response.getReCount()); + } else { + response.setMainActionStr("入库"); + response.setInCount(response.getReCount()); + } + } else { + //单层包装 + if (response.getMainAction().equals(ConstantType.TYPE_OUT)) { + response.setMainActionStr("出库"); + response.setOutCount(response.getCount()); + } else { + response.setMainActionStr("入库"); + response.setInCount(response.getCount()); + } + } + //设置单据类型名称 + BasicBussinessTypeEntity busType = bussinessTypeDao.selectOne(new QueryWrapper().select("name").eq("action", response.getAction())); + response.setActionName(busType.getName()); + //设置单据日期 + IoOrderEntity order = orderDao.selectOne(new QueryWrapper().select("createTime").eq("billNo", response.getOrderId())); + response.setOrderTime(DateUtil.toDateStr(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); + } + + @Override + public boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest) { + return invPreInProductDetailDao.deleteInvPreProductDetail(detailRequest); + } + + @Override + public int findCountByCode(String code) { + List invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper().eq("code", code)); + int count = 0; + if (CollUtil.isNotEmpty(invPreinDetailEntities)) { + for (InvPreInProductDetailEntity invProductDetailEntity : invPreinDetailEntities) { + if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) + count = count + invProductDetailEntity.getReCount(); + else { + count = count - invProductDetailEntity.getReCount(); + } + } + } + return count; + } + + @Override + public InvPreInProductDetailEntity findUseOneByCode(String code) { + List invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper().eq("code", code) + .eq("status", ConstantStatus.INVIN_IN).last("limit 1")); + if (CollUtil.isNotEmpty(invPreinDetailEntities)) { + return invPreinDetailEntities.get(0); + } + return null; + } + + +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvPreinProductServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvPreinProductServiceImpl.java new file mode 100644 index 000000000..fa195182c --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvPreinProductServiceImpl.java @@ -0,0 +1,83 @@ +package com.glxp.api.service.inv.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import com.glxp.api.dao.inv.InvPreinProductDao; +import com.glxp.api.entity.inv.InvPreinProductEntity; +import com.glxp.api.req.inv.FilterInvPreinProductRequest; +import com.glxp.api.res.inv.InvPreinProductResponse; +import com.glxp.api.service.inv.InvPreinProductService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvPreinProductServiceImpl implements InvPreinProductService { + + @Resource + private InvPreinProductDao invPreinProductDao; + + @Override + public int insert(InvPreinProductEntity invPreinProductEntity) { + return invPreinProductDao.insert(invPreinProductEntity); + } + + @Override + public boolean update(InvPreinProductEntity invPreinProductEntity) { + return invPreinProductDao.updateById(invPreinProductEntity) == 1 ? true : false; + } + + @Override + public InvPreinProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode) { + return invPreinProductDao.selectOne(new QueryWrapper().eq("relIdFk", relId).eq(StrUtil.isNotEmpty(batchNo), "batchNo", batchNo) + .isNull(StrUtil.isEmpty(batchNo), "batchNo").eq("supId", supId).eq("deptCode", deptCode).eq("invCode", invCode)); + + } + + @Override + public boolean deleteById(Integer id) { + return invPreinProductDao.deleteById(id) == 1 ? true : false; + } + + @Override + public List filterList(FilterInvPreinProductRequest invPreProductRequest) { + if (null == invPreProductRequest) { + return Collections.emptyList(); + } + if (null != invPreProductRequest.getPage()) { + PageHelper.offsetPage((invPreProductRequest.getPage() - 1) * invPreProductRequest.getLimit(), invPreProductRequest.getLimit()); + } + return invPreinProductDao.filterList(invPreProductRequest); + } + + @Override + public List filterPreinProductList(FilterInvPreinProductRequest invPreProductRequest) { + if (null == invPreProductRequest) { + return Collections.emptyList(); + } + if (null != invPreProductRequest.getPage() && null != invPreProductRequest.getLimit()) { + PageHelper.offsetPage((invPreProductRequest.getPage() - 1) * invPreProductRequest.getLimit(), invPreProductRequest.getLimit()); + } + return invPreinProductDao.filterPreProductList(invPreProductRequest); + } + + @Override + public InvPreinProductEntity findById(String id) { + return invPreinProductDao.selectById(id); + } + + + @Override + public boolean isExitByRelId(String relId) { + return invPreinProductDao.exists(new QueryWrapper().eq("relIdFk", relId)); + + } + +} diff --git a/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml b/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml index e4dad59ca..92bb76ee1 100644 --- a/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml +++ b/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml @@ -58,76 +58,31 @@ insert - ignore - into basic_bussiness_type (mainAction, action, name, enable, remark, thirdSysFk, genUnit, - innerOrder, secCheckEnable, checkEnable, checkUdims, checkPdaEd, - checkPdaUn, checkPc, checkWebNew, checkSp, checkChange, secCheckUdims, - secCheckPdaEd, secCheckPdaUn, secCheckPc, secCheckWebNew, - secCheckChange, secCheckSp, corpType, supplementOrderType, - checkBalance, secCheckBalance, useDyCount, expireTip, updateTime, - defaultUnit, prefix, outToSpms, ullageFill, scanPreIn, vailInv, - entrutSpms, codeFillCheck, defaultSubInv, defaultInv, orderVisibleType, - checkCopy, secCheckCopy, originAction, changeEnable, - spUse, preIn, supplementAll, createUser, createTime, preInBack, vailDispatch, - vailGroupBuy, busType, inStock, actionType - , thrCheckEnable, thrCheckWebNew, thrCheckPdaUn, thrCheckPdaEd, thrCheckUdims, thrCheckPc, thrCheckSp - , thrCheckChange, thrCheckBalance, thrCheckCopy, fillCodeRel, checkVailDate, checkCertExpire, - preInBackAction, backPreinType) - values (#{mainAction}, - #{action}, - #{name}, - #{enable}, - #{remark}, - #{thirdSysFk}, - #{genUnit}, - #{innerOrder}, - #{secCheckEnable}, - #{checkEnable}, - #{checkUdims}, - #{checkPdaEd}, - #{checkPdaUn}, - #{checkPc}, - #{checkWebNew}, - #{checkSp}, - #{checkChange}, - #{secCheckUdims}, - #{secCheckPdaEd}, - #{secCheckPdaUn}, - #{secCheckPc}, - #{secCheckWebNew}, - #{secCheckChange}, - #{secCheckSp}, - #{corpType}, - #{supplementOrderType}, - #{checkBalance}, - #{secCheckBalance}, - #{useDyCount}, - #{expireTip}, - #{updateTime}, - #{defaultUnit}, - #{prefix}, - #{outToSpms}, - #{ullageFill}, - #{scanPreIn}, - #{vailInv}, - #{entrutSpms}, - #{codeFillCheck}, - #{defaultSubInv}, - #{defaultInv}, - #{orderVisibleType}, - #{checkCopy}, - #{secCheckCopy}, - #{originAction}, - #{changeEnable}, - #{spUse}, - #{preIn}, - #{supplementAll}, - #{createUser}, - #{createTime}, #{preInBack}, #{vailDispatch}, #{vailGroupBuy}, #{busType}, #{inStock}, #{actionType} - , #{thrCheckEnable}, #{thrCheckWebNew}, #{thrCheckPdaUn}, #{thrCheckPdaEd}, #{thrCheckUdims}, - #{thrCheckPc} - , #{thrCheckSp}, #{thrCheckChange}, #{thrCheckBalance}, #{thrCheckCopy}, #{fillCodeRel} - , #{checkVailDate}, #{checkExpire}, #{checkCertExpire}, #{preInBackAction}, #{backPreinType}) + ignore + into basic_bussiness_type (mainAction, action, name, enable, remark, thirdSysFk, genUnit, innerOrder, + secCheckEnable, checkEnable, checkUdims, checkPdaEd, checkPdaUn, checkPc, + checkWebNew, checkSp, checkChange, secCheckUdims, secCheckPdaEd, secCheckPdaUn, + secCheckPc, secCheckWebNew, secCheckChange, secCheckSp, corpType, + supplementOrderType, checkBalance, secCheckBalance, useDyCount, expireTip, + updateTime, defaultUnit, prefix, outToSpms, ullageFill, scanPreIn, vailInv, + entrutSpms, codeFillCheck, defaultSubInv, defaultInv, orderVisibleType, + preInBack, supplementAll, createUser, createTime, updateUser, vailDispatch, + vailGroupBuy, busType, inStock, actionType, thrCheckEnable, thrCheckWebNew, + thrCheckPdaUn, thrCheckPdaEd, thrCheckUdims, thrCheckPc, thrCheckSp, + thrCheckChange, thrCheckBalance, thrCheckCopy, fillCodeRel, checkVailDate, + checkExpire, checkCertExpire, preInBackAction, backPreinType, checkPreInOrders) + values (#{mainAction}, #{action}, #{name}, #{enable}, #{remark}, #{thirdSysFk}, #{genUnit}, #{innerOrder}, + #{secCheckEnable}, #{checkEnable}, #{checkUdims}, #{checkPdaEd}, #{checkPdaUn}, #{checkPc}, + #{checkWebNew}, #{checkSp}, #{checkChange}, #{secCheckUdims}, #{secCheckPdaEd}, #{secCheckPdaUn}, + #{secCheckPc}, #{secCheckWebNew}, #{secCheckChange}, #{secCheckSp}, #{corpType}, + #{supplementOrderType}, #{checkBalance}, #{secCheckBalance}, #{useDyCount}, #{expireTip}, + #{updateTime}, #{defaultUnit}, #{prefix}, #{outToSpms}, #{ullageFill}, #{scanPreIn}, #{vailInv}, + #{entrutSpms}, #{codeFillCheck}, #{defaultSubInv}, #{defaultInv}, #{orderVisibleType}, + #{preInBack}, #{supplementAll}, #{createUser}, #{createTime}, #{updateUser}, #{vailDispatch}, + #{vailGroupBuy}, #{busType}, #{inStock}, #{actionType}, #{thrCheckEnable}, #{thrCheckWebNew}, + #{thrCheckPdaUn}, #{thrCheckPdaEd}, #{thrCheckUdims}, #{thrCheckPc}, #{thrCheckSp}, + #{thrCheckChange}, #{thrCheckBalance}, #{thrCheckCopy}, #{fillCodeRel}, #{checkVailDate}, + #{checkExpire}, #{checkCertExpire}, #{preInBackAction}, #{backPreinType}, #{checkPreInOrders}) select action, name from basic_bussiness_type - where action not in ( - select code - from thr_system_bus_api) + where action not in (select code + from thr_system_bus_api) + select * + from inv_prein_product_detail + + + AND code = #{code} + + + AND mainAction = #{mainAction} + + + AND action = #{action} + + + and supId = #{supId} + + + AND relId = #{relId} + + + AND nameCode like concat('%', #{nameCode}, '%') + + + AND orderId = #{orderId} + + + AND deptCode = #{deptCode} + + + AND invCode = #{invCode} + + + AND invSpaceCode = #{invSpaceCode} + + + AND batchNo = #{batchNo} + + + AND batchNo is null + + + AND relId in + + #{item} + + + + AND updateTime #{updateTime} + + + + + + delete + from inv_prein_product_detail + + + AND relId = #{relId} + + + AND batchNo = #{batchNo} + + + AND batchNo is null + + + AND supId = #{supId} + + + AND invCode = #{invCode} + + + + diff --git a/src/main/resources/mybatis/mapper/inv/InvPreinProductDao.xml b/src/main/resources/mybatis/mapper/inv/InvPreinProductDao.xml new file mode 100644 index 000000000..fa3984542 --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/InvPreinProductDao.xml @@ -0,0 +1,138 @@ + + + + + + +