Showing
5 changed files
with
122 additions
and
45 deletions
| ... | ... | @@ -9,7 +9,9 @@ import com.lframework.starter.web.inner.service.system.SysUserService; |
| 9 | 9 | import com.lframework.xingyun.sc.bo.shipments.order.GetShipmentsOrderInfoBo; |
| 10 | 10 | import com.lframework.xingyun.sc.bo.shipments.order.QueryShipmentsOrderInfoBo; |
| 11 | 11 | import com.lframework.xingyun.sc.bo.shipments.plan.ShipmentsPlanDetailBo; |
| 12 | +import com.lframework.xingyun.sc.entity.PurchaseOrderInfo; | |
| 12 | 13 | import com.lframework.xingyun.sc.entity.ShipmentsPlanDetail; |
| 14 | +import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService; | |
| 13 | 15 | import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanDetailService; |
| 14 | 16 | import com.lframework.xingyun.sc.utils.ExcelUtil; |
| 15 | 17 | import com.lframework.xingyun.sc.utils.LatexFormulaExcelExporterUtil; |
| ... | ... | @@ -27,6 +29,7 @@ import javax.validation.constraints.NotBlank; |
| 27 | 29 | import io.swagger.annotations.ApiImplicitParam; |
| 28 | 30 | import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; |
| 29 | 31 | import com.lframework.starter.common.exceptions.impl.DefaultClientException; |
| 32 | +import io.swagger.annotations.ApiModelProperty; | |
| 30 | 33 | import io.swagger.annotations.ApiOperation; |
| 31 | 34 | import com.lframework.starter.common.utils.CollectionUtil; |
| 32 | 35 | import io.swagger.annotations.Api; |
| ... | ... | @@ -37,6 +40,7 @@ import org.apache.poi.ss.usermodel.Sheet; |
| 37 | 40 | import org.apache.poi.ss.usermodel.Workbook; |
| 38 | 41 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| 39 | 42 | import org.springframework.data.redis.core.RedisTemplate; |
| 43 | +import org.springframework.scheduling.annotation.Scheduled; | |
| 40 | 44 | import org.springframework.web.bind.annotation.DeleteMapping; |
| 41 | 45 | import com.lframework.starter.web.core.controller.DefaultBaseController; |
| 42 | 46 | import com.lframework.starter.web.core.annotations.security.HasPermission; |
| ... | ... | @@ -50,6 +54,7 @@ import java.math.RoundingMode; |
| 50 | 54 | import java.nio.file.Files; |
| 51 | 55 | import java.nio.file.Path; |
| 52 | 56 | import java.nio.file.Paths; |
| 57 | +import java.time.LocalDate; | |
| 53 | 58 | import java.time.format.DateTimeFormatter; |
| 54 | 59 | import java.util.*; |
| 55 | 60 | import java.util.stream.Collectors; |
| ... | ... | @@ -78,6 +83,8 @@ public class ShipmentsOrderInfoController extends DefaultBaseController { |
| 78 | 83 | private RedisTemplate redisTemplate; |
| 79 | 84 | @Resource |
| 80 | 85 | private SysDeptService sysDeptService; |
| 86 | + @Resource | |
| 87 | + private PurchaseOrderInfoService purchaseOrderInfoService; | |
| 81 | 88 | |
| 82 | 89 | |
| 83 | 90 | /** |
| ... | ... | @@ -228,6 +235,39 @@ public class ShipmentsOrderInfoController extends DefaultBaseController { |
| 228 | 235 | return InvokeResultBuilder.success(); |
| 229 | 236 | } |
| 230 | 237 | |
| 238 | + @ApiModelProperty("数据处理") | |
| 239 | + @GetMapping("/dataHandler") | |
| 240 | + @Scheduled(cron = "0 8 0 * * ?") | |
| 241 | + public InvokeResult<Void> dataHandler() { | |
| 242 | + List<ShipmentsOrderInfo> shipmentsOrderInfoList = shipmentsOrderInfoService.queryByShipmentDate(LocalDate.now()); | |
| 243 | + if (CollectionUtils.isNotEmpty(shipmentsOrderInfoList)) { | |
| 244 | + for (ShipmentsOrderInfo orderInfo : shipmentsOrderInfoList) { | |
| 245 | + ShipmentsOrderInfo shipmentsOrderInfo = shipmentsOrderInfoService.findById(orderInfo.getId()); | |
| 246 | + List<ShipmentsPlanDetail> detailList = shipmentsPlanDetailService.listByShipmentOrderId(shipmentsOrderInfo.getId()); | |
| 247 | + if (CollectionUtils.isNotEmpty(detailList)) { | |
| 248 | + continue; | |
| 249 | + } | |
| 250 | + List<String> orderIds = new ArrayList<>(); | |
| 251 | + List<String> orderSpecIds = new ArrayList<>(); | |
| 252 | + List<String> detailIds = new ArrayList<>(); | |
| 253 | + for (ShipmentsPlanDetail shipmentsPlanDetail : detailList) { | |
| 254 | + if (!orderIds.contains(shipmentsPlanDetail.getOrderId())) { | |
| 255 | + orderIds.add(shipmentsPlanDetail.getOrderId()); | |
| 256 | + } | |
| 257 | + if (!orderSpecIds.contains(shipmentsPlanDetail.getOrderSpecId())) { | |
| 258 | + orderSpecIds.add(shipmentsPlanDetail.getOrderSpecId()); | |
| 259 | + } | |
| 260 | + if (!detailIds.contains(shipmentsPlanDetail.getId())) { | |
| 261 | + detailIds.add(shipmentsPlanDetail.getId()); | |
| 262 | + } | |
| 263 | + } | |
| 264 | + List<PurchaseOrderInfo> orderInfoList = purchaseOrderInfoService.listByIds(orderIds); | |
| 265 | + shipmentsOrderInfoService.handleData(shipmentsOrderInfo, orderInfoList, orderSpecIds, detailIds); | |
| 266 | + } | |
| 267 | + } | |
| 268 | + return InvokeResultBuilder.success(); | |
| 269 | + } | |
| 270 | + | |
| 231 | 271 | |
| 232 | 272 | /** |
| 233 | 273 | * 发货单批量打印 | ... | ... |
| ... | ... | @@ -136,6 +136,13 @@ public class ShipmentsOrderInfo extends BaseEntity implements BaseDto { |
| 136 | 136 | private LocalDate newShipmentDate; |
| 137 | 137 | |
| 138 | 138 | /** |
| 139 | + * 发货类型 | |
| 140 | + * ALL:全部发货 | |
| 141 | + * PART:部分发货 | |
| 142 | + */ | |
| 143 | + private String shipmentType; | |
| 144 | + | |
| 145 | + /** | |
| 139 | 146 | * 发货明细数据 |
| 140 | 147 | */ |
| 141 | 148 | @TableField(exist = false) | ... | ... |
xingyun-sc/src/main/java/com/lframework/xingyun/sc/impl/shipments/ShipmentsOrderInfoServiceImpl.java
| ... | ... | @@ -388,6 +388,7 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr |
| 388 | 388 | } |
| 389 | 389 | LambdaUpdateWrapper<ShipmentsOrderInfo> updateWrapper = Wrappers.lambdaUpdate(ShipmentsOrderInfo.class); |
| 390 | 390 | updateWrapper.set(ShipmentsOrderInfo::getOnTimeShipment, vo.getOnTimeShipment()) |
| 391 | + .set(ShipmentsOrderInfo::getShipmentType, vo.getType()) | |
| 391 | 392 | .eq(ShipmentsOrderInfo::getId, shipmentsOrderId); |
| 392 | 393 | getBaseMapper().update(updateWrapper); |
| 393 | 394 | |
| ... | ... | @@ -433,48 +434,10 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr |
| 433 | 434 | orderInfo.setDetailList(shipmentsOrderDetailList); |
| 434 | 435 | // 更新发货明细 |
| 435 | 436 | shipmentsPlanDetailService.updateBatchById(dataList); |
| 436 | - // 更新发货单状态 | |
| 437 | - updateStatus(shipmentsOrderId, "SHIPMENTS"); | |
| 438 | - // 更新订货单物料行发货状态 | |
| 439 | - purchaseOrderLineService.dispatched(orderSpecIds); | |
| 440 | - // 更新订货单状态 | |
| 441 | - purchaseOrderInfoService.updateStatus(orderIds); | |
| 442 | - // 消息通知 | |
| 443 | - String type = vo.getType(); | |
| 437 | + // 获取订货单数据 | |
| 444 | 438 | List<PurchaseOrderInfo> orderInfoList = purchaseOrderInfoService.listByIds(orderIds); |
| 445 | - if (CollectionUtils.isNotEmpty(orderInfoList)) { | |
| 446 | - // 试样订单生成反馈单数据 | |
| 447 | - sampleResultFeedbackService.generateFeedbackData(orderInfoList, detailIds); | |
| 448 | - | |
| 449 | - List<String> userIds = new ArrayList<>(); | |
| 450 | - StringBuilder orderNoBuilder = new StringBuilder(); | |
| 451 | - for (PurchaseOrderInfo info : orderInfoList) { | |
| 452 | - userIds.add(info.getContractCreateById()); | |
| 453 | - orderNoBuilder.append(info.getOrderNo()).append("、"); | |
| 454 | - } | |
| 455 | - if (orderNoBuilder.length() > 0) { | |
| 456 | - orderNoBuilder.setLength(orderNoBuilder.length() - 1); | |
| 457 | - } | |
| 458 | - String title = "订货单:" + orderNoBuilder + ","; | |
| 459 | - if ("ALL".equals(type)) { | |
| 460 | - title += "已全部发货!"; | |
| 461 | - } else if ("PART".equals(type)) { | |
| 462 | - title += "已部分发货!"; | |
| 463 | - } | |
| 464 | - messageHandler.sendMsg(userIds, title, title, shipmentsOrderId, null); | |
| 465 | - } | |
| 466 | - // 判断当前日期是否大于等于发货日期 | |
| 467 | - LocalDate now = LocalDate.now(); | |
| 468 | - LocalDate shipmentsDate = orderInfo.getShipmentsDate(); | |
| 469 | - if (BooleanUtils.isTrue(vo.getOnTimeShipment()) && !now.isBefore(shipmentsDate)) { | |
| 470 | - // 生成应收款台账明细数据 | |
| 471 | - receiptLedgerInfoService.generateLedgerInfo(Collections.singletonList(orderInfo)); | |
| 472 | - // 生成发货明细报表数据 | |
| 473 | - shipmentDetailStatisticsService.generateStatisticsData(detailIds); | |
| 474 | - // 生成要车计划、要车单数据 | |
| 475 | - ShipmentsOrderInfo shipmentsOrderInfo = findById(shipmentsOrderId); | |
| 476 | - carRequestPlanService.generate(orderInfoList, shipmentsOrderInfo); | |
| 477 | - } | |
| 439 | + // 试样订单生成反馈单数据 | |
| 440 | + sampleResultFeedbackService.generateFeedbackData(orderInfoList, detailIds); | |
| 478 | 441 | //生成产品试样结果跟踪单 |
| 479 | 442 | if (CollectionUtils.isNotEmpty(orderIds)) { |
| 480 | 443 | Map<Object, List<ShipmentsPlanDetail>> map = shipmentsOrderDetailList.stream() |
| ... | ... | @@ -533,6 +496,13 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr |
| 533 | 496 | sampleResultTrackingService.create(vo1); |
| 534 | 497 | } |
| 535 | 498 | } |
| 499 | + // 判断当前日期是否大于等于发货日期 | |
| 500 | + LocalDate now = LocalDate.now(); | |
| 501 | + LocalDate shipmentsDate = orderInfo.getShipmentsDate(); | |
| 502 | + if (BooleanUtils.isTrue(vo.getOnTimeShipment()) && !now.isBefore(shipmentsDate)) { | |
| 503 | + orderInfo = findById(shipmentsOrderId); | |
| 504 | + handleData(orderInfo, orderInfoList, orderSpecIds, detailIds); | |
| 505 | + } | |
| 536 | 506 | } |
| 537 | 507 | |
| 538 | 508 | @Override |
| ... | ... | @@ -660,9 +630,9 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr |
| 660 | 630 | // 今天或之前的数据 |
| 661 | 631 | shipmentDate = LocalDate.now(); |
| 662 | 632 | queryWrapper.and(wrapper -> wrapper |
| 663 | - .le(ShipmentsOrderInfo::getShipmentsDate, LocalDate.now()) | |
| 633 | + .lt(ShipmentsOrderInfo::getShipmentsDate, LocalDate.now()) | |
| 664 | 634 | .or() |
| 665 | - .le(ShipmentsOrderInfo::getNewShipmentDate, LocalDate.now())); | |
| 635 | + .lt(ShipmentsOrderInfo::getNewShipmentDate, LocalDate.now())); | |
| 666 | 636 | } |
| 667 | 637 | List<ShipmentsOrderInfo> shipmentsOrderInfos = getBaseMapper().selectList(queryWrapper); |
| 668 | 638 | if (CollectionUtils.isEmpty(shipmentsOrderInfos)) { |
| ... | ... | @@ -710,6 +680,43 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr |
| 710 | 680 | return result; |
| 711 | 681 | } |
| 712 | 682 | |
| 683 | + @Override | |
| 684 | + @Transactional(rollbackFor = Exception.class) | |
| 685 | + public void handleData(ShipmentsOrderInfo shipmentsOrderInfo, List<PurchaseOrderInfo> orderInfoList | |
| 686 | + , List<String> orderSpecIds, List<String> detailIds) { | |
| 687 | + // 更新发货单状态 | |
| 688 | + updateStatus(shipmentsOrderInfo.getId(), "SHIPMENTS"); | |
| 689 | + // 更新订货单物料行发货状态 | |
| 690 | + purchaseOrderLineService.dispatched(orderSpecIds); | |
| 691 | + // 更新订货单状态 | |
| 692 | + List<String> orderIds = orderInfoList.stream().map(PurchaseOrderInfo::getId).collect(Collectors.toList()); | |
| 693 | + purchaseOrderInfoService.updateStatus(orderIds); | |
| 694 | + // 生成应收款台账明细数据 | |
| 695 | + receiptLedgerInfoService.generateLedgerInfo(Collections.singletonList(shipmentsOrderInfo)); | |
| 696 | + // 生成发货明细报表数据 | |
| 697 | + shipmentDetailStatisticsService.generateStatisticsData(detailIds); | |
| 698 | + // 生成要车计划、要车单数据 | |
| 699 | + carRequestPlanService.generate(orderInfoList, shipmentsOrderInfo); | |
| 700 | + // 消息通知 | |
| 701 | + String type = shipmentsOrderInfo.getShipmentType(); | |
| 702 | + List<String> userIds = new ArrayList<>(); | |
| 703 | + StringBuilder orderNoBuilder = new StringBuilder(); | |
| 704 | + for (PurchaseOrderInfo info : orderInfoList) { | |
| 705 | + userIds.add(info.getContractCreateById()); | |
| 706 | + orderNoBuilder.append(info.getOrderNo()).append("、"); | |
| 707 | + } | |
| 708 | + if (orderNoBuilder.length() > 0) { | |
| 709 | + orderNoBuilder.setLength(orderNoBuilder.length() - 1); | |
| 710 | + } | |
| 711 | + String title = "订货单:" + orderNoBuilder + ","; | |
| 712 | + if ("ALL".equals(type)) { | |
| 713 | + title += "已全部发货!"; | |
| 714 | + } else if ("PART".equals(type)) { | |
| 715 | + title += "已部分发货!"; | |
| 716 | + } | |
| 717 | + messageHandler.sendMsg(userIds, title, title, shipmentsOrderInfo.getId(), null); | |
| 718 | + } | |
| 719 | + | |
| 713 | 720 | |
| 714 | 721 | /** |
| 715 | 722 | * 处理批次数据 | ... | ... |
| 1 | 1 | package com.lframework.xingyun.sc.service.shipments; |
| 2 | 2 | |
| 3 | +import com.lframework.xingyun.sc.entity.PurchaseOrderInfo; | |
| 3 | 4 | import com.lframework.xingyun.sc.vo.shipments.order.*; |
| 4 | 5 | import com.lframework.xingyun.sc.entity.ShipmentsOrderInfo; |
| 5 | 6 | import com.lframework.starter.web.core.service.BaseMpService; |
| ... | ... | @@ -139,4 +140,18 @@ public interface ShipmentsOrderInfoService extends BaseMpService<ShipmentsOrderI |
| 139 | 140 | * @return String |
| 140 | 141 | */ |
| 141 | 142 | String generateSerialNumber(String pre, String key, String format, LocalDateTime startTime, LocalDateTime endTime); |
| 143 | + | |
| 144 | + /** | |
| 145 | + * 数据处理 | |
| 146 | + * 状态流转 | |
| 147 | + * 台账数据 | |
| 148 | + * 报表数据 | |
| 149 | + * 要车相关数据 | |
| 150 | + * | |
| 151 | + * @param shipmentsOrderInfo 发货单信息 | |
| 152 | + * @param orderInfoList 订货单数据集 | |
| 153 | + * @param orderSpecIds 订货单规格ID集合 | |
| 154 | + * @param detailIds 订货单明细 | |
| 155 | + */ | |
| 156 | + void handleData(ShipmentsOrderInfo shipmentsOrderInfo, List<PurchaseOrderInfo> orderInfoList, List<String> orderSpecIds, List<String> detailIds); | |
| 142 | 157 | } | ... | ... |
| ... | ... | @@ -221,7 +221,11 @@ |
| 221 | 221 | supplier, |
| 222 | 222 | customer_short_name, |
| 223 | 223 | customer_type, |
| 224 | - delivery_method | |
| 224 | + delivery_method, | |
| 225 | + create_by_id, | |
| 226 | + update_by_id, | |
| 227 | + create_time, | |
| 228 | + update_time | |
| 225 | 229 | ) VALUES |
| 226 | 230 | <foreach collection="list" item="item" separator=","> |
| 227 | 231 | ( |
| ... | ... | @@ -264,7 +268,11 @@ |
| 264 | 268 | #{item.supplier}, |
| 265 | 269 | #{item.customerShortName}, |
| 266 | 270 | #{item.customerType}, |
| 267 | - #{item.deliveryMethod} | |
| 271 | + #{item.deliveryMethod}, | |
| 272 | + #{item.createById}, | |
| 273 | + #{item.updateById}, | |
| 274 | + #{item.createTime}, | |
| 275 | + #{item.updateTime} | |
| 268 | 276 | ) |
| 269 | 277 | </foreach> |
| 270 | 278 | </insert> | ... | ... |