diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/business/StockOrderController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/business/StockOrderController.java index 48a6806e..b5e3cb19 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/controller/business/StockOrderController.java +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/business/StockOrderController.java @@ -14,7 +14,6 @@ import com.glxp.api.admin.entity.basic.BussinessTypeEntity; import com.glxp.api.admin.entity.business.StockOrderDetailEntity; import com.glxp.api.admin.entity.business.StockOrderEntity; import com.glxp.api.admin.entity.business.StockQRCodeTextEntity; -import com.glxp.api.admin.entity.info.CompanyEntity; import com.glxp.api.admin.entity.info.SystemParamConfigEntity; import com.glxp.api.admin.entity.inout.OrderEntity; import com.glxp.api.admin.entity.inout.WarehouseEntity; @@ -38,7 +37,10 @@ import com.glxp.api.admin.res.inout.ErpOrderResponse; import com.glxp.api.admin.res.inout.StockOrderResponse; import com.glxp.api.admin.service.auth.AuthAdminService; import com.glxp.api.admin.service.auth.CustomerService; -import com.glxp.api.admin.service.basic.*; +import com.glxp.api.admin.service.basic.BasicUnitMaintainService; +import com.glxp.api.admin.service.basic.BussinessLocalTypeService; +import com.glxp.api.admin.service.basic.BussinessTypeService; +import com.glxp.api.admin.service.basic.UdiRelevanceService; import com.glxp.api.admin.service.business.StockOrderDetailService; import com.glxp.api.admin.service.business.StockOrderDetailTempService; import com.glxp.api.admin.service.business.StockOrderService; @@ -394,6 +396,8 @@ public class StockOrderController { StockOrderEntity stockOrderEntity = stockOrderService.findById(addStockOrderChangeRequest.getStockOrderId()); OrderEntity originOrder = orderService.findById(stockOrderEntity.getOrderIdFk()); + String oldOrderId = originOrder.getId(); + String replicateNo = originOrder.getReplicateNo(); //复制单号 List originCodes = codesService.findByReceiptId(originOrder.getId()); originOrder.setActDate(DateUtil.formatDate(new Date())); originOrder.setFromCorp(addStockOrderChangeRequest.getFromCorp()); @@ -405,33 +409,49 @@ public class StockOrderController { originOrder.setContrastStatus(0);//设置erp校验状态为未校验 originOrder.setReceiveStatus(0); //设置验收状态为未验收 originOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); + originOrder.setErpFk(null);//关联业务单据置空 originOrder.setLocStorageCode(addStockOrderChangeRequest.getLocStorageCode()); BussinessTypeEntity bussinessTypeEntity = bussinessTypeService.findBTByAction(originOrder.getAction()); String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + MyStrUtil.trim(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); String supplementOrderNo = orderNo; originOrder.setId(supplementOrderNo); + if (StrUtil.isBlank(replicateNo)) { + replicateNo = supplementOrderNo; //此单据第一条复制单号 + } else { + replicateNo = replicateNo + "," + supplementOrderNo; //复制单号拼接上新的单号 + } + originOrder.setId(supplementOrderNo); + originOrder.setReplicateNo(null); //新单据的复制单号置空 List supplementCodes = new ArrayList<>(); + + List products = addStockOrderChangeRequest.getProducts(); originCodes.forEach( code -> { - WarehouseEntity supplementCode = new WarehouseEntity(); - BeanUtil.copyProperties(code, supplementCode); - supplementCode.setFromCorpId(originOrder.getFromCorpId()); - supplementCode.setFromCorp(originOrder.getFromCorp()); - supplementCode.setLocStorageCode(originOrder.getLocStorageCode()); - supplementCode.setOrderId(supplementOrderNo); - //查询补单设置 - supplementCode.setAction(originOrder.getAction()); - supplementCode.setMainAction(originOrder.getMainAction()); - supplementCode.setId(null); - supplementCodes.add(supplementCode); - + for (WarehouseEntity product : products) { + if (product.getRelId().equals(code.getRelId())) { + if ((StrUtil.isNotBlank(product.getBatchNo()) && StrUtil.isNotBlank(code.getBatchNo()) && product.getBatchNo().equals(code.getBatchNo())) + || (StrUtil.isBlank(product.getBatchNo()) && StrUtil.isBlank(code.getBatchNo()))) { + WarehouseEntity supplementCode = new WarehouseEntity(); + BeanUtil.copyProperties(code, supplementCode); + supplementCode.setFromCorpId(originOrder.getFromCorpId()); + supplementCode.setFromCorp(originOrder.getFromCorp()); + supplementCode.setLocStorageCode(originOrder.getLocStorageCode()); + supplementCode.setOrderId(supplementOrderNo); + //查询补单设置 + supplementCode.setAction(originOrder.getAction()); + supplementCode.setMainAction(originOrder.getMainAction()); + supplementCode.setId(null); + supplementCodes.add(supplementCode); + } + } + } } ); originOrder.setUpdateTime(new Date()); orderService.insertOrder(originOrder); codesTempService.insertCodesTemp(supplementCodes); - + orderService.updateReplicateNo(oldOrderId, replicateNo); return ResultVOUtils.success(); } diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/info/SystemParamConfigController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/info/SystemParamConfigController.java index d8f66946..e9cdb26e 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/controller/info/SystemParamConfigController.java +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/info/SystemParamConfigController.java @@ -145,7 +145,10 @@ public class SystemParamConfigController { if (!"0".equals(systemParamConfigSaveRequest.getParamValue())) { time = Integer.parseInt(systemParamConfigSaveRequest.getParamValue()); } - String cornStr = CronUtils.parseHourIntervel(time); + if (time > 28) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "参数错误,大于28天会导致部分2月份无法更新数据"); + } + String cornStr = CronUtils.parseDayIntervel(time); ScheduledEntity scheduledEntity = new ScheduledEntity(); scheduledEntity.setCron(cornStr); scheduledEntity.setCronName("downThirdSysDataTask"); diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/basic/BasicThirdSysBusApiDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/basic/BasicThirdSysBusApiDao.java index f4d25b57..e827821a 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/dao/basic/BasicThirdSysBusApiDao.java +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/basic/BasicThirdSysBusApiDao.java @@ -34,4 +34,13 @@ public interface BasicThirdSysBusApiDao { * @return */ List selectAllCode(); + + /** + * 根据系统ID和类型,统计单据类型数量 + * + * @param thirdId + * @param type + * @return + */ + int countByThirdSysAndType(@Param("thirdSys") String thirdSys, @Param("type") int type); } diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/inout/OrderDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/inout/OrderDao.java index 12d45ea8..bd356754 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/dao/inout/OrderDao.java +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/inout/OrderDao.java @@ -4,6 +4,7 @@ import com.glxp.api.admin.entity.inout.OrderEntity; import com.glxp.api.admin.entity.inout.WarehouseEntity; import com.glxp.api.admin.req.inout.OrderFilterRequest; import com.glxp.api.admin.req.inout.OrderQueryRequest; +import com.glxp.api.admin.res.inout.OrderNoResult; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -73,4 +74,21 @@ public interface OrderDao { * @return */ boolean updateOrderTime(@Param("actDate") String actDate, @Param("auditTime") String auditTime, @Param("updateTime") String updateTime, @Param("orderIds") List orderIds); + + /** + * 更新复制单号 + * + * @param orderId + * @param replicateNo + * @return + */ + boolean updateReplicateNo(@Param("orderId") String orderId, @Param("replicateNo") String replicateNo); + + /** + * 查询单据所有的单据号字段值 + * + * @param id + * @return + */ + OrderNoResult selectOrderNos(String id); } diff --git a/api-admin/src/main/java/com/glxp/api/admin/entity/inout/OrderEntity.java b/api-admin/src/main/java/com/glxp/api/admin/entity/inout/OrderEntity.java index e07dcf44..67964122 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/entity/inout/OrderEntity.java +++ b/api-admin/src/main/java/com/glxp/api/admin/entity/inout/OrderEntity.java @@ -52,4 +52,7 @@ public class OrderEntity { private Date auditTime; private String thirdBillNo; + //复制单号,多个单号之间使用英文逗号,分隔 + private String replicateNo; + } diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/inout/AddStockOrderChangeRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/inout/AddStockOrderChangeRequest.java index 67b75d28..55957108 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/req/inout/AddStockOrderChangeRequest.java +++ b/api-admin/src/main/java/com/glxp/api/admin/req/inout/AddStockOrderChangeRequest.java @@ -1,7 +1,10 @@ package com.glxp.api.admin.req.inout; +import com.glxp.api.admin.entity.inout.WarehouseEntity; import lombok.Data; +import java.util.List; + @Data public class AddStockOrderChangeRequest { @@ -20,5 +23,6 @@ public class AddStockOrderChangeRequest { private String customerId; private String stockOrderId; + private List products; } diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inout/OrderService.java b/api-admin/src/main/java/com/glxp/api/admin/service/inout/OrderService.java index f1c381d4..2eadc29d 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inout/OrderService.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inout/OrderService.java @@ -112,7 +112,7 @@ public interface OrderService { * @param orderEntity * @param orders */ - public void getAllOrder(OrderEntity orderEntity, List orders); + List getAllOrder(OrderEntity orderEntity); /** * 查询待提交订单 @@ -121,4 +121,12 @@ public interface OrderService { */ List getWaitSubmitOrder(); + /** + * 更新复制单号 + * + * @param orderId + * @param replicateNo + * @return + */ + boolean updateReplicateNo(String orderId, String replicateNo); } diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/CodesServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/CodesServiceImpl.java index 6446729f..7b4a713b 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/CodesServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/CodesServiceImpl.java @@ -30,7 +30,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -172,9 +171,7 @@ public class CodesServiceImpl implements CodesService { public void replaceCodes(CodesReplaceRequest codesReplaceRequest) { OrderEntity orderEntity = orderDao.selectByBillNo(codesReplaceRequest.getOrderId()); //查询所有单据 - List orderList = new ArrayList<>(); - orderList.add(orderEntity); - orderService.getAllOrder(orderEntity, orderList); + List orderList = orderService.getAllOrder(orderEntity); for (OrderEntity order : orderList) { //查询条码 diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/OrderServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/OrderServiceImpl.java index 817c36dc..d387d9c9 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/OrderServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inout/impl/OrderServiceImpl.java @@ -2,6 +2,7 @@ package com.glxp.api.admin.service.inout.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.glxp.api.admin.constant.Constant; @@ -31,6 +32,7 @@ import com.glxp.api.admin.req.inout.OrderFilterRequest; import com.glxp.api.admin.req.inout.OrderQueryRequest; import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest; import com.glxp.api.admin.req.inventory.FilterInvProductRequest; +import com.glxp.api.admin.res.inout.OrderNoResult; import com.glxp.api.admin.res.inout.StockOrderResponse; import com.glxp.api.admin.service.info.SystemParamConfigService; import com.glxp.api.admin.service.inout.OrderService; @@ -43,6 +45,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -168,7 +171,7 @@ public class OrderServiceImpl implements OrderService { if (orderFilterRequest == null) { return Collections.emptyList(); } - if(orderFilterRequest.getPage()!=null){ + if (orderFilterRequest.getPage() != null) { int offset = (orderFilterRequest.getPage() - 1) * orderFilterRequest.getLimit(); PageHelper.offsetPage(offset, orderFilterRequest.getLimit()); } @@ -356,6 +359,10 @@ public class OrderServiceImpl implements OrderService { return stockOrderDao.selectWaitSubmitOrders(); } + @Override + public boolean updateReplicateNo(String orderId, String replicateNo) { + return orderDao.updateReplicateNo(orderId, replicateNo); + } @Override public List filterOrderForDelete(String billNo) { @@ -363,11 +370,44 @@ public class OrderServiceImpl implements OrderService { if (null == orderEntity) { return Collections.emptyList(); } - //查询码表中所有的单据号 - List orders = new ArrayList<>(); - orders.add(orderEntity); - getAllOrder(orderEntity, orders); - return orders; + + return getAllOrder(orderEntity); + } + + //通过源单据查询所有关联的单据数据 + public void getLinkedOrderId(String id, List orderIds) { + List list = getOneOrderById(id); + if (!orderIds.containsAll(list)) { + //找出不包含在原有集合中的单据号,回调方法 + String orderId = null; + for (String item : list) { + if (!orderIds.contains(item)) { + orderId = item; + break; + } + } + orderIds.addAll(list); + getLinkedOrderId(orderId, orderIds); + } + } + + //通过单号查询一个单据 + public List getOneOrderById(String id) { + List orderIds = new ArrayList<>(); + OrderNoResult orderNo = orderDao.selectOrderNos(id); + Field[] fields = ReflectUtil.getFields(OrderNoResult.class); + for (Field field : fields) { + String value = String.valueOf(ReflectUtil.getFieldValue(orderNo, field)); + if (StrUtil.isNotBlank(value) && !"null".equals(value)) { + if (field.getName().equals("replicateNo")) { + String[] ids = value.split(","); + orderIds.addAll(Arrays.asList(ids)); + } else { + orderIds.add(value); + } + } + } + return orderIds; } /** @@ -377,40 +417,30 @@ public class OrderServiceImpl implements OrderService { * @param orders */ @Override - public void getAllOrder(OrderEntity orderEntity, List orders) { - OrderFilterRequest orderFilterRequest = new OrderFilterRequest(); - //补单单号 - if (StrUtil.isNotBlank(orderEntity.getSupplementNo())) { - //补单单号不为空,查询补单数据 - orderFilterRequest.setId(orderEntity.getSupplementNo()); - OrderEntity order = orderDao.findOne(orderFilterRequest); - if (null != order && !orders.contains(order)) { - orders.add(order); - getAllOrder(order, orders); + public List getAllOrder(OrderEntity orderEntity) { + List orderIds = new ArrayList<>(); + orderIds.add(orderEntity.getId()); + + getLinkedOrderId(orderEntity.getId(), orderIds); + + //去除本单的单据号 + Iterator iterator = orderIds.iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals(orderEntity.getId())) { + iterator.remove(); + break; } } - //缺量补单上级单号 - if (StrUtil.isNotBlank(orderEntity.getOriginUllageSupNo())) { - //缺量补单上级单号不为空,查询单据数据 - orderFilterRequest.setId(orderEntity.getOriginUllageSupNo()); - OrderEntity order = orderDao.findOne(orderFilterRequest); - if (null != order && !orders.contains(order)) { - orders.add(order); - getAllOrder(order, orders); - } - } + List orders = new ArrayList<>(); + orders.add(orderEntity); - //缺量补单 - if (StrUtil.isNotBlank(orderEntity.getUllageSupNo())) { - //缺量补单单号不为空,查询单据数据 - orderFilterRequest.setId(orderEntity.getUllageSupNo()); - OrderEntity order = orderDao.findOne(orderFilterRequest); - if (null != order && !orders.contains(order)) { - orders.add(order); - getAllOrder(order, orders); - } + //查询除本单以外的所有的单据 + if (CollUtil.isNotEmpty(orderIds)) { + List orderEntities = orderDao.selectByIds(orderIds); + orders.addAll(orderEntities); } + return orders; } @Transactional(rollbackFor = Exception.class) diff --git a/api-admin/src/main/java/com/glxp/api/admin/thread/OrderSubmitTask.java b/api-admin/src/main/java/com/glxp/api/admin/thread/OrderSubmitTask.java index de40f3b7..1c7f2082 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/thread/OrderSubmitTask.java +++ b/api-admin/src/main/java/com/glxp/api/admin/thread/OrderSubmitTask.java @@ -2,8 +2,13 @@ package com.glxp.api.admin.thread; import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONUtil; +import com.glxp.api.admin.constant.ThirdSysConstant; +import com.glxp.api.admin.dao.basic.BasicThirdSysBusApiDao; +import com.glxp.api.admin.dao.basic.BasicThirdSysDao; +import com.glxp.api.admin.dao.basic.BasicThirdSysDetailDao; import com.glxp.api.admin.dao.schedule.ScheduledDao; import com.glxp.api.admin.dao.schedule.SystemParamConfigDao; +import com.glxp.api.admin.entity.basic.BasicThirdSysDetailEntity; import com.glxp.api.admin.entity.info.ScheduledEntity; import com.glxp.api.admin.entity.info.SystemParamConfigEntity; import com.glxp.api.admin.req.info.ScheduledRequest; @@ -37,6 +42,12 @@ public class OrderSubmitTask implements SchedulingConfigurer { private OrderService orderService; @Resource private StockOrderService stockOrderService; + @Resource + private BasicThirdSysDetailDao basicThirdSysDetailDao; + @Resource + private BasicThirdSysDao basicThirdSysDao; + @Resource + private BasicThirdSysBusApiDao basicThirdSysBusApiDao; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { @@ -60,23 +71,36 @@ public class OrderSubmitTask implements SchedulingConfigurer { return; } - //查询可提交订单 - List orderIds = orderService.getWaitSubmitOrder(); - AtomicInteger count = new AtomicInteger(0); - if (CollUtil.isNotEmpty(orderIds)) { - log.info("待提交单据数量为: {} 条", orderIds.size()); - for (String orderId : orderIds) { - log.info("开始提交id为: {} 的单据", orderId); - BaseResponse baseResponse = stockOrderService.submitOrderToThirdys(orderId); - if (baseResponse.getCode() == 20000) { - count.addAndGet(1); - log.info("自动提交成功"); - } else { - log.error("自动提交失败,响应信息:{}" + JSONUtil.toJsonStr(baseResponse)); + //查询所有启用的第三方系统的标识 + List thirdIds = basicThirdSysDao.selectEnabledThirdId(); + if (CollUtil.isNotEmpty(thirdIds)) { + for (String thirdId : thirdIds) { + BasicThirdSysDetailEntity warehouseConfig = basicThirdSysDetailDao.selectByKey(ThirdSysConstant.ORDER_SUBMIT_URL, thirdId); + if (null != warehouseConfig && warehouseConfig.getFromType().equals(3) && warehouseConfig.getEnabled()) { + //查询业务单据提交的单据类型有无数据 + int count = basicThirdSysBusApiDao.countByThirdSysAndType(thirdId, 2); + if (count > 0) { + //查询可提交订单 + List orderIds = orderService.getWaitSubmitOrder(); + AtomicInteger counter = new AtomicInteger(0); + if (CollUtil.isNotEmpty(orderIds)) { + log.info("待提交单据数量为: {} 条", orderIds.size()); + for (String orderId : orderIds) { + log.info("开始提交id为: {} 的单据", orderId); + BaseResponse baseResponse = stockOrderService.submitOrderToThirdys(orderId); + if (baseResponse.getCode() == 20000) { + counter.addAndGet(1); + log.info("自动提交成功"); + } else { + log.error("自动提交失败,响应信息:{}" + JSONUtil.toJsonStr(baseResponse)); + } + } + } + log.info("单据自动提交完成,提交成功: {} 条", counter.get()); + } } } } - log.info("单据自动提交完成,提交成功: {} 条", count.get()); } diff --git a/api-admin/src/main/java/com/glxp/api/admin/util/CronUtils.java b/api-admin/src/main/java/com/glxp/api/admin/util/CronUtils.java index 9cd21df5..4d79771a 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/util/CronUtils.java +++ b/api-admin/src/main/java/com/glxp/api/admin/util/CronUtils.java @@ -38,4 +38,14 @@ public class CronUtils { } return cron; } + + public static String parseDayIntervel(int time) { + int day = time; + String cron = "0 0 0 1/" + day + " * ? "; + if (time >= 28) { + day = 28; + cron = "0 0 0 1/" + day + " * ? "; + } + return cron; + } } diff --git a/api-admin/src/main/resources/mybatis/mapper/basic/BasicThirdSysBusApiDao.xml b/api-admin/src/main/resources/mybatis/mapper/basic/BasicThirdSysBusApiDao.xml index 32ccde0b..9de5f6a9 100644 --- a/api-admin/src/main/resources/mybatis/mapper/basic/BasicThirdSysBusApiDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/basic/BasicThirdSysBusApiDao.xml @@ -87,4 +87,11 @@ select code from basic_third_sys_bus_api + + \ No newline at end of file diff --git a/api-admin/src/main/resources/mybatis/mapper/inout/OrderDao.xml b/api-admin/src/main/resources/mybatis/mapper/inout/OrderDao.xml index dd3b1454..3529819c 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inout/OrderDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inout/OrderDao.xml @@ -569,4 +569,16 @@ where id = #{id} + + update io_order + set replicateNo = #{replicateNo} + where id = #{orderId} + + + + \ No newline at end of file