|
@@ -1,667 +0,0 @@
|
|
|
-package cn.superdesk.uniorder.service.thirdpart.jd.impl.bak;
|
|
|
-
|
|
|
-import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.io.FileUtil;
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.json.JSONUtil;
|
|
|
-import cn.superdesk.uniorder.common.enums.common.CommonAccountingLockingEnum;
|
|
|
-import cn.superdesk.uniorder.common.enums.common.CommonAccountingStateEnum;
|
|
|
-import cn.superdesk.uniorder.common.enums.common.CommonOrderCompletStateEnum;
|
|
|
-import cn.superdesk.uniorder.common.enums.scheduler.jd.ScheduleTaskCheckStateEnum;
|
|
|
-import cn.superdesk.uniorder.common.enums.thirdpart.jd.SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum;
|
|
|
-import cn.superdesk.uniorder.common.lamda.AnLamdaUtils;
|
|
|
-import cn.superdesk.uniorder.common.numerical.AnStringUtils;
|
|
|
-import cn.superdesk.uniorder.dao.entity.base.UnifiedOrder;
|
|
|
-import cn.superdesk.uniorder.dao.entity.base.UnifiedOrderGoods;
|
|
|
-import cn.superdesk.uniorder.dao.entity.thirdpart.jd.AccountingUnifiedSupplierOrderJdCheckUpReport;
|
|
|
-import cn.superdesk.uniorder.dto._constant.ResourceConstant;
|
|
|
-import cn.superdesk.uniorder.service.base.UnifiedOrderGoodsService;
|
|
|
-import cn.superdesk.uniorder.service.thirdpart.jd.AccountingUnifiedSupplierOrderJdCheckUpReportOpCompareOrderAndCheckUpProcessDimOrderOneService;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
-import java.io.File;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.function.Predicate;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-/**
|
|
|
- * @Description: opCompareOrderAndCheckUpProcess 操作拆分而已
|
|
|
- * @Author: linjinyu
|
|
|
- * @CreateDate: 2022/6/29 4:07 下午
|
|
|
- * @UpdateUser: linjinyu
|
|
|
- * @UpdateDate: 2022/6/29 4:07 下午
|
|
|
- * @UpdateRemark: 修改内容
|
|
|
- * @Version: 1.0
|
|
|
- */
|
|
|
-@RequiredArgsConstructor
|
|
|
-@Slf4j
|
|
|
-@Service
|
|
|
-public class AccountingUnifiedSupplierOrderJdCheckUpReportOpCompareOrderAndCheckUpProcessDimOrderOneServiceImpl
|
|
|
- implements AccountingUnifiedSupplierOrderJdCheckUpReportOpCompareOrderAndCheckUpProcessDimOrderOneService {
|
|
|
-
|
|
|
- private final UnifiedOrderGoodsService unifiedOrderGoodsService;
|
|
|
-
|
|
|
- public List<UnifiedOrder> processOrder(UnifiedOrder orderFromDB,
|
|
|
- List<UnifiedOrder> orderAsWholeListFromDB,
|
|
|
- List<String> orderSnAsWhole,
|
|
|
- List<String> orderSnAsWholeCompletStateEq1Filter,
|
|
|
- StringBuffer processReport,
|
|
|
- Integer processResult,
|
|
|
- Integer defineError) {
|
|
|
- // CommonOrderCompletStateEnum
|
|
|
- // 已完成(1, "已完成"),
|
|
|
- // 未完成(2, "未完成"),
|
|
|
- // 已作废(3, "已作废"),
|
|
|
-
|
|
|
- /**************************************** 订单完成状态 - 已完成 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrder>> predicatesByFieldCompletStateEq1 = new ArrayList<>();
|
|
|
- predicatesByFieldCompletStateEq1.add(
|
|
|
- r -> r.getCompletState() != null
|
|
|
- && r.getCompletState().compareTo(CommonOrderCompletStateEnum.已完成.getKey()) == 0)
|
|
|
- ;
|
|
|
- List<UnifiedOrder> predicatesByFieldCompletStateEq1Filter = AnLamdaUtils.filters(orderAsWholeListFromDB, predicatesByFieldCompletStateEq1);
|
|
|
-
|
|
|
- /**************************************** 订单完成状态 - 未完成 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrder>> predicatesByFieldCompletStateEq2 = new ArrayList<>();
|
|
|
- predicatesByFieldCompletStateEq2.add(
|
|
|
- r -> r.getCompletState() != null
|
|
|
- && r.getCompletState().compareTo(CommonOrderCompletStateEnum.未完成.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrder> predicatesByFieldCompletStateEq2Filter = AnLamdaUtils.filters(orderAsWholeListFromDB, predicatesByFieldCompletStateEq2);
|
|
|
-
|
|
|
- /**************************************** 订单完成状态 - 未完成 end ****************************************/
|
|
|
-
|
|
|
-
|
|
|
- /**************************************** 订单完成状态 - 已作废 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrder>> predicatesByFieldCompletStateEq3 = new ArrayList<>();
|
|
|
- predicatesByFieldCompletStateEq3.add(
|
|
|
- r -> r.getCompletState() != null
|
|
|
- && r.getCompletState().compareTo(CommonOrderCompletStateEnum.已作废.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrder> predicatesByFieldCompletStateEq3Filter = AnLamdaUtils.filters(orderAsWholeListFromDB, predicatesByFieldCompletStateEq3);
|
|
|
-
|
|
|
- /**************************************** 订单完成状态 - 已作废 end ****************************************/
|
|
|
-
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 已完成 start ****************************************/
|
|
|
-
|
|
|
- if (CollUtil.isNotEmpty(predicatesByFieldCompletStateEq1Filter)
|
|
|
- && predicatesByFieldCompletStateEq1Filter.size() > 0) {
|
|
|
-
|
|
|
- orderSnAsWholeCompletStateEq1Filter = predicatesByFieldCompletStateEq1Filter
|
|
|
- .stream()
|
|
|
- .map(UnifiedOrder::getOrderSn)
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "Asshole订单List[Filter=[完成状态]=[已完成]]>0;"));
|
|
|
- processReport.append(StrUtil.format("信息记录:订单({}:{})存在[完成状态]=[已完成];",
|
|
|
- AnStringUtils.stringListConvertToString(
|
|
|
- orderSnAsWholeCompletStateEq1Filter
|
|
|
- ),
|
|
|
- predicatesByFieldCompletStateEq1Filter.size()
|
|
|
- ));
|
|
|
- }
|
|
|
- //
|
|
|
- else {
|
|
|
- // TODO mark by linjinyu at 2022-06-29 15:54:39 - 如果已完成的订单一个也没有,是否就能直接结束了
|
|
|
- }
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 已完成 end ****************************************/
|
|
|
-
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 未完成 start ****************************************/
|
|
|
-
|
|
|
- if (CollUtil.isNotEmpty(predicatesByFieldCompletStateEq2Filter)
|
|
|
- && predicatesByFieldCompletStateEq2Filter.size() > 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "Asshole订单List[Filter=[完成状态]=[未完成]]>0"));
|
|
|
- processReport.append(StrUtil.format("信息记录:订单({}:{})存在[完成状态]=[未完成];",
|
|
|
- AnStringUtils.stringListConvertToString(
|
|
|
- predicatesByFieldCompletStateEq2Filter
|
|
|
- .stream()
|
|
|
- .map(UnifiedOrder::getOrderSn)
|
|
|
- .collect(Collectors.toList())
|
|
|
- ),
|
|
|
- predicatesByFieldCompletStateEq2Filter.size()
|
|
|
- ));
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 未完成 end ****************************************/
|
|
|
-
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 已作废_已取消 start ****************************************/
|
|
|
-
|
|
|
- if (CollUtil.isNotEmpty(predicatesByFieldCompletStateEq3Filter)
|
|
|
- && predicatesByFieldCompletStateEq3Filter.size() > 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "Asshole订单List[Filter=[完成状态]=[已作废_已取消]]>0"));
|
|
|
- processReport.append(StrUtil.format("信息记录订单({}:{})存在[完成状态]=[已作废_已取消];",
|
|
|
- AnStringUtils.stringListConvertToString(
|
|
|
- predicatesByFieldCompletStateEq3Filter
|
|
|
- .stream()
|
|
|
- .map(UnifiedOrder::getOrderSn)
|
|
|
- .collect(Collectors.toList())
|
|
|
- ),
|
|
|
- predicatesByFieldCompletStateEq3Filter.size()
|
|
|
- ));
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**************************************** 判定 - 订单完成状态 - 已作废_已取消 end ****************************************/
|
|
|
-
|
|
|
-
|
|
|
- /**************************************** TODO mark by linjinyu at 2022-06-29 15:49:35 - 此层面的好像就没有意义了 start ****************************************/
|
|
|
-
|
|
|
- /**
|
|
|
- * 按目前逻辑 mark by linjinyu at 2022-06-17 16:56:49
|
|
|
- * 1. 订单维度的供应商对账状态 已对账 代表的可能性为
|
|
|
- * |---- 1. 订单下全部商品 供应商对账状态 已对账
|
|
|
- * |---- 2. 订单下部分商品 供应商对账状态 已对账
|
|
|
- * 所以,下边还得再以订单商品维度再确认一下
|
|
|
- * 2. 订单维度的供应商对账状态 已锁定 按逻辑不存在部分 订单商品锁定 因为 按京东对账 订单维度去比对 如果这个订单商品不满,就记录为异常,不锁定
|
|
|
- * 以上两种情况,为了方便统计,都不会把orderSn放进去,定义的错误(defineError)可能无法表达这些问题,归结为 结算中心未找到符合条件的商品订单
|
|
|
- *
|
|
|
- * 下边还有补充逻辑 #结算中心 订单商品层面#
|
|
|
- */
|
|
|
- if (ObjectUtil.isNotNull(orderFromDB.getAccountingStateSupplier())
|
|
|
- && orderFromDB.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.已对账.getKey()) == 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "主单[供应商对账状态]=[已对账]"));
|
|
|
- processReport.append(StrUtil.format("信息记录:订单({})[对账状态]=[已对账];",
|
|
|
- orderFromDB.getOrderSn()
|
|
|
- ));
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
-
|
|
|
- }
|
|
|
- if (ObjectUtil.isNotNull(orderFromDB.getAccountingStateSupplier())
|
|
|
- && orderFromDB.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.已锁定.getKey()) == 0) {
|
|
|
-
|
|
|
- // TODO mark by linjinyu at 2022-06-22 20:29:41 - 产品要求能对部分对账的订单 这样还不能锁订单,只能锁订单商品 [狗头]
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "主单[供应商对账状态]=[已锁定]"));
|
|
|
- processReport.append(StrUtil.format("信息记录:订单({})[对账状态]=[已锁定];",
|
|
|
- orderFromDB.getOrderSn()
|
|
|
- ));
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**************************************** TODO mark by linjinyu at 2022-06-29 15:49:35 - 此层面的好像就没有意义了 end ****************************************/
|
|
|
-
|
|
|
- return predicatesByFieldCompletStateEq1Filter;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- public List<UnifiedOrderGoods> processOrderGoods(AccountingUnifiedSupplierOrderJdCheckUpReport entityCheckUpReport,
|
|
|
- UnifiedOrder orderFromDB,
|
|
|
- List<UnifiedOrder> refundOrderListFromDB,
|
|
|
- List<UnifiedOrder> orderAsWholeListFromDB,
|
|
|
- List<String> orderSnAsWhole,
|
|
|
- List<String> orderSnAsWholeCompletStateEq1Filter,
|
|
|
- StringBuffer processReport,
|
|
|
- Integer processResult,
|
|
|
- Integer defineError) {
|
|
|
-
|
|
|
-
|
|
|
- /****************************************** 结算中心 订单 商品层面 start ******************************************/
|
|
|
-
|
|
|
- // mark by linjinyu at 2022-06-22 20:45:24 - 此处要 拉成 正负单下的所有商品
|
|
|
- // ---- 只有正单商品 ---- List<UnifiedOrderGoods> orderGoodsListFromDB = unifiedOrderGoodsService.findByOrderSn(orderFromDB.getOrderSn());
|
|
|
- // mark by linjinyu at 2022-06-24 15:44:41 - 修改
|
|
|
- // ---- 正单退单商品 ---- 包含
|
|
|
-// List<UnifiedOrderGoods> orderGoodsListFromDB = unifiedOrderGoodsService.findByOrderSns(orderSnAsWhole);
|
|
|
- // ---- 正单退单(完成状态=已完成)商品 ---- 包含
|
|
|
- List<UnifiedOrderGoods> orderGoodsListFromDB = unifiedOrderGoodsService.findByOrderSns(orderSnAsWholeCompletStateEq1Filter);
|
|
|
-
|
|
|
- log.info("[doggod]processOrderGoods****************************************" +
|
|
|
- "\nentityCheckUpReport: {}" +
|
|
|
- "\norderFromDB: {}" +
|
|
|
- "\nrefundOrderListFromDB: {}" +
|
|
|
- "\norderAsWholeListFromDB: {}" +
|
|
|
- "\norderSnAsWhole: {}" +
|
|
|
- "\norderSnAsWholeCompletStateEq1Filter: {}" +
|
|
|
- "\norderGoodsListFromDB: {}" +
|
|
|
- "\nprocessReport: {}" +
|
|
|
- "\nprocessResult: {}" +
|
|
|
- "\ndefineError: {}\n****************************************",
|
|
|
- JSONUtil.toJsonStr(entityCheckUpReport),
|
|
|
- JSONUtil.toJsonStr(orderFromDB),
|
|
|
- JSONUtil.toJsonStr(refundOrderListFromDB),
|
|
|
- JSONUtil.toJsonStr(orderAsWholeListFromDB),
|
|
|
- JSONUtil.toJsonStr(orderSnAsWhole),
|
|
|
- JSONUtil.toJsonStr(orderSnAsWholeCompletStateEq1Filter),
|
|
|
- JSONUtil.toJsonStr(orderGoodsListFromDB),
|
|
|
- processReport.toString(),
|
|
|
- ScheduleTaskCheckStateEnum.getDesc(processResult),
|
|
|
- SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.getDesc(defineError)
|
|
|
- );
|
|
|
-
|
|
|
- String report00 = StrUtil.format("[doggod]processOrderGoods****************************************" +
|
|
|
- "\nentityCheckUpReport: {}" +
|
|
|
- "\norderFromDB: {}" +
|
|
|
- "\nrefundOrderListFromDB: {}" +
|
|
|
- "\norderAsWholeListFromDB: {}" +
|
|
|
- "\norderSnAsWhole: {}" +
|
|
|
- "\norderSnAsWholeCompletStateEq1Filter: {}" +
|
|
|
- "\norderGoodsListFromDB: {}" +
|
|
|
- "\nprocessReport: {}" +
|
|
|
- "\nprocessResult: {}" +
|
|
|
- "\ndefineError: {}\n****************************************",
|
|
|
- JSONUtil.toJsonStr(entityCheckUpReport),
|
|
|
- JSONUtil.toJsonStr(orderFromDB),
|
|
|
- JSONUtil.toJsonStr(refundOrderListFromDB),
|
|
|
- JSONUtil.toJsonStr(orderAsWholeListFromDB),
|
|
|
- JSONUtil.toJsonStr(orderSnAsWhole),
|
|
|
- JSONUtil.toJsonStr(orderSnAsWholeCompletStateEq1Filter),
|
|
|
- JSONUtil.toJsonStr(orderGoodsListFromDB),
|
|
|
- processReport.toString(),
|
|
|
- ScheduleTaskCheckStateEnum.getDesc(processResult),
|
|
|
- SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.getDesc(defineError));
|
|
|
-
|
|
|
- tmpLog(
|
|
|
- entityCheckUpReport.getBatchId() + "_00",
|
|
|
- entityCheckUpReport.getJdOrderSn(),
|
|
|
- AnStringUtils.stringListConvertToString(orderSnAsWhole),
|
|
|
- report00,
|
|
|
- DateUtil.now()
|
|
|
- );
|
|
|
-
|
|
|
- if (CollUtil.isEmpty(orderGoodsListFromDB)) {
|
|
|
- return new ArrayList<>();
|
|
|
- }
|
|
|
-
|
|
|
- // 按 供应商对账状态 分切
|
|
|
- // |---- 不对账(-1, "不对账"),
|
|
|
- // |---- 已对账(1, "已对账"), // ----
|
|
|
- // |---- 未对账(2, "未对账"), // ----
|
|
|
- // |---- 已作废(3, "已作废"), // ---- mark by linjinyu 20200713 为了作废订单
|
|
|
- // |---- 已锁定(4, "已锁定"), // ---- mark by linjinyu 20220615 为了京东对账
|
|
|
-
|
|
|
- /**************************************** 对账的 - 排除单向结算(只留下供应商结算的) start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierNotEqMinus1 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierNotEqMinus1.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.不对账.getKey()) != 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierNotEqMinus1Filter = AnLamdaUtils.filters(
|
|
|
- orderGoodsListFromDB,
|
|
|
- predicatesByFieldAccountingStateSupplierNotEqMinus1
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 对账的 - 排除单向结算(只留下供应商结算的) end ****************************************/
|
|
|
-
|
|
|
- /**************************************** 不对账 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierEqMinus1 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierEqMinus1.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.不对账.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierEqMinus1Filter = AnLamdaUtils.filters(
|
|
|
- orderGoodsListFromDB,
|
|
|
- predicatesByFieldAccountingStateSupplierEqMinus1
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 不对账 end ****************************************/
|
|
|
-
|
|
|
- /**************************************** 未对账 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierEq2 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierEq2.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.未对账.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierEq2Filter = AnLamdaUtils.filters(
|
|
|
- predicatesByAccountingStateSupplierNotEqMinus1Filter,
|
|
|
- predicatesByFieldAccountingStateSupplierEq2
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 未对账 end ****************************************/
|
|
|
-
|
|
|
- /**************************************** 未对账-非售后锁定 start ****************************************/
|
|
|
-
|
|
|
-// goods_locking_supplier=1(锁定)
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierEq2GoodsLockingSupplierEq0 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierEq2GoodsLockingSupplierEq0.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.未对账.getKey()) == 0
|
|
|
- && r.getGoodsLockingSupplier() != null
|
|
|
- && r.getGoodsLockingSupplier().compareTo(CommonAccountingLockingEnum.正常.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter = AnLamdaUtils.filters(
|
|
|
- predicatesByAccountingStateSupplierEq2Filter,
|
|
|
- predicatesByFieldAccountingStateSupplierEq2GoodsLockingSupplierEq0
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 未对账-非售后锁定 end ****************************************/
|
|
|
-
|
|
|
- /**************************************** 已对账 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierEq1 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierEq1.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.已对账.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierEq1Filter = AnLamdaUtils.filters(
|
|
|
- predicatesByAccountingStateSupplierNotEqMinus1Filter,
|
|
|
- predicatesByFieldAccountingStateSupplierEq1
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 已对账 end ****************************************/
|
|
|
-
|
|
|
- /**************************************** 已锁定 start ****************************************/
|
|
|
-
|
|
|
- List<Predicate<UnifiedOrderGoods>> predicatesByFieldAccountingStateSupplierEq4 = new ArrayList<>();
|
|
|
- predicatesByFieldAccountingStateSupplierEq4.add(
|
|
|
- r -> r.getAccountingStateSupplier() != null
|
|
|
- && r.getAccountingStateSupplier().compareTo(CommonAccountingStateEnum.已锁定.getKey()) == 0
|
|
|
- );
|
|
|
- List<UnifiedOrderGoods> predicatesByAccountingStateSupplierEq4Filter = AnLamdaUtils.filters(
|
|
|
- predicatesByAccountingStateSupplierNotEqMinus1Filter,
|
|
|
- predicatesByFieldAccountingStateSupplierEq4
|
|
|
- );
|
|
|
-
|
|
|
- /**************************************** 已锁定 end ****************************************/
|
|
|
-
|
|
|
- Map<String, Integer> mapDoggod = new HashMap<>();
|
|
|
- mapDoggod.put("非不对账", predicatesByAccountingStateSupplierNotEqMinus1Filter.size());
|
|
|
- mapDoggod.put(CommonAccountingStateEnum.不对账.getDesc(), predicatesByAccountingStateSupplierEqMinus1Filter.size());
|
|
|
- mapDoggod.put(CommonAccountingStateEnum.未对账.getDesc(), predicatesByAccountingStateSupplierEq2Filter.size());
|
|
|
- mapDoggod.put("未对账-售后锁定(正常)", predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size());
|
|
|
- mapDoggod.put(CommonAccountingStateEnum.已对账.getDesc(), predicatesByAccountingStateSupplierEq1Filter.size());
|
|
|
- mapDoggod.put(CommonAccountingStateEnum.已锁定.getDesc(), predicatesByAccountingStateSupplierEq4Filter.size());
|
|
|
-
|
|
|
- log.info("[doggod]{}", JSONUtil.toJsonPrettyStr(mapDoggod));
|
|
|
- String report01 = StrUtil.format("[doggod]{}", JSONUtil.toJsonPrettyStr(mapDoggod));
|
|
|
-
|
|
|
- tmpLog(
|
|
|
- entityCheckUpReport.getBatchId() + "_01",
|
|
|
- entityCheckUpReport.getJdOrderSn(),
|
|
|
- AnStringUtils.stringListConvertToString(orderSnAsWhole),
|
|
|
- report01,
|
|
|
- DateUtil.now()
|
|
|
- );
|
|
|
-
|
|
|
- String report02 = StrUtil.format("[doggod]processOrderGoods" +
|
|
|
- "\n****************************************" +
|
|
|
- "\n非不对账: \n{}\n" +
|
|
|
- "\n不对账: \n{}\n" +
|
|
|
- "\n未对账: \n{}\n" +
|
|
|
- "\n未对账-售后锁定(正常): \n{}\n" +
|
|
|
- "\n已对账: \n{}\n" +
|
|
|
- "\n已锁定: \n{}\n" +
|
|
|
- "\n****************************************",
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierNotEqMinus1Filter),
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierEqMinus1Filter),
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierEq2Filter),
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter),
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierEq1Filter),
|
|
|
- JSONUtil.toJsonStr(predicatesByAccountingStateSupplierEq4Filter)
|
|
|
- );
|
|
|
-
|
|
|
- tmpLog(
|
|
|
- entityCheckUpReport.getBatchId() + "_02",
|
|
|
- entityCheckUpReport.getJdOrderSn(),
|
|
|
- AnStringUtils.stringListConvertToString(orderSnAsWhole),
|
|
|
- report02,
|
|
|
- DateUtil.now()
|
|
|
- );
|
|
|
-
|
|
|
-
|
|
|
- entityCheckUpReport.setOrderAccountingStateSupplier(orderFromDB.getAccountingStateSupplier());
|
|
|
- entityCheckUpReport.setOrderGoodsItemQuantity(orderGoodsListFromDB.size());
|
|
|
- entityCheckUpReport.setGoodsAccountingStateSupplierEqMinus1(predicatesByAccountingStateSupplierEqMinus1Filter.size());
|
|
|
- entityCheckUpReport.setGoodsAccountingStateSupplierEq2(predicatesByAccountingStateSupplierEq2Filter.size());
|
|
|
-// entityCheckUpReport.setGoodsAccountingStateSupplierEq2(predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size());
|
|
|
- entityCheckUpReport.setGoodsAccountingStateSupplierEq1(predicatesByAccountingStateSupplierEq1Filter.size());
|
|
|
- entityCheckUpReport.setGoodsAccountingStateSupplierEq4(predicatesByAccountingStateSupplierEq4Filter.size());
|
|
|
-
|
|
|
-// if (CollUtil.isNotEmpty(predicatesByAccountingStateSupplierEq1Filter)) {
|
|
|
-// processReport.append(StrUtil.format("订单商品 对账状态 = 已对账({});", predicatesByAccountingStateSupplierEq1Filter.size()));
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.结算中心未找到符合条件的商品订单.getKey();
|
|
|
-// }
|
|
|
-// if (CollUtil.isNotEmpty(predicatesByAccountingStateSupplierEq4Filter)) {
|
|
|
-// processReport.append(StrUtil.format("订单商品 对账状态 = 已锁定({});", predicatesByAccountingStateSupplierEq4Filter.size()));
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.结算中心未找到符合条件的商品订单.getKey();
|
|
|
-// }
|
|
|
-
|
|
|
- // mark by linjinyu at 2022-06-17 17:12:24 - 未对账订单商品(predicatesByAccountingStateSupplierEq2Filter) 的金额比对就不做了
|
|
|
- // 不做不行 看了界面正好 为 订单结算金额 结算中心对账金额
|
|
|
-
|
|
|
-// // mark by linjinyu at 2022-06-21 10:23:08 - 如果存在此种情况,大概率是存在单向结算的商品
|
|
|
-// if (orderGoodsListFromDB.size() != predicatesByAccountingStateSupplierEq2Filter.size()) {
|
|
|
-//
|
|
|
-// log.info("[doggod]条件:{}", "意思是 订单(正负)下 所有商品'数量 != 未对账'数量");
|
|
|
-//
|
|
|
-// processReport.append(StrUtil.format("订单({}:{})商品 对账状态 = 不对账({}) 未对账({}) 已对账({}) 已锁定({}) 大概率是存在单向结算的商品;",
|
|
|
-// orderFromDB.getOrderSn(),
|
|
|
-// orderGoodsListFromDB.size(),
|
|
|
-// predicatesByAccountingStateSupplierEqMinus1Filter.size(),
|
|
|
-// predicatesByAccountingStateSupplierEq2Filter.size(),
|
|
|
-// predicatesByAccountingStateSupplierEq1Filter.size(),
|
|
|
-// predicatesByAccountingStateSupplierEq4Filter.size()
|
|
|
-// ));
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.结算中心未找到符合条件的商品订单.getKey();
|
|
|
-//
|
|
|
-// // 此处包含 正负单的所有 未对账 商品
|
|
|
-// BigDecimal goodsCostAmount = predicatesByAccountingStateSupplierEq2Filter
|
|
|
-// .stream()
|
|
|
-// .map(item -> item.getCostPrice() == null ? BigDecimal.ZERO : item.getCostPrice().multiply(new BigDecimal(item.getQuantity())))
|
|
|
-// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
-//
|
|
|
-// entityCheckUpReport.setWholeOrderAmount(goodsCostAmount);
|
|
|
-// entityCheckUpReport.setComparedWholeAmount(
|
|
|
-// /* 产品要求的 这里的京东订单金额 有可能不是一个整单的金额,而是人为改的 */
|
|
|
-// entityCheckUpReport.getJdOrderAmount()
|
|
|
-// .subtract(goodsCostAmount)
|
|
|
-// );
|
|
|
-//
|
|
|
-// // 意思是 订单下 能对账(非不对账)'数量 = 未对账'数量
|
|
|
-// if (predicatesByAccountingStateSupplierNotEqMinus1Filter.size() == predicatesByAccountingStateSupplierEq2Filter.size() &&
|
|
|
-// entityCheckUpReport.getJdOrderAmount().compareTo(goodsCostAmount) == 0) {
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.正常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.正常.getKey();
|
|
|
-// }
|
|
|
-// }
|
|
|
-// // TODO mark by linjinyu at 2022-06-27 15:34:00 - 还会有相等的情况 数据库中某订单(正负单)下的所有商品数 等于 状态为未对账商品数
|
|
|
-// else {
|
|
|
-//
|
|
|
-// log.info("[doggod]条件:{}", "意思是 订单(正负)下 所有商品'数量 == 未对账'数量");
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 这个条数相等的情况下还要分金额相等与金额不等
|
|
|
-// */
|
|
|
-//
|
|
|
-// // 此处包含 正负单的所有 未对账 商品
|
|
|
-// BigDecimal goodsCostAmount = predicatesByAccountingStateSupplierEq2Filter
|
|
|
-// .stream()
|
|
|
-// .map(item -> item.getCostPrice() == null ? BigDecimal.ZERO : item.getCostPrice().multiply(new BigDecimal(item.getQuantity())))
|
|
|
-// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
-//
|
|
|
-// entityCheckUpReport.setWholeOrderAmount(goodsCostAmount);
|
|
|
-// entityCheckUpReport.setComparedWholeAmount(
|
|
|
-// /* 产品要求的 这里的京东订单金额 有可能不是一个整单的金额,而是人为改的 */
|
|
|
-// entityCheckUpReport.getJdOrderAmount()
|
|
|
-// .subtract(goodsCostAmount)
|
|
|
-// );
|
|
|
-//
|
|
|
-// // 意思是 订单下 能对账'数量 = 未对账'数量
|
|
|
-// if (entityCheckUpReport.getJdOrderAmount().compareTo(goodsCostAmount) == 0) {
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.正常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.正常.getKey();
|
|
|
-// } else {
|
|
|
-// processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
-// defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.结算中心未找到符合条件的商品订单.getKey();
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- // mark by linjinyu at 2022-06-21 10:23:08 - 如果存在此种情况,大概率是存在订单维度部分商品已对账
|
|
|
- // 意思是 订单下 能对账'数量 != 未对账(售后锁定(正常)(未锁定))'数量
|
|
|
-
|
|
|
-
|
|
|
-// predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter
|
|
|
-// predicatesByAccountingStateSupplierEq2Filter
|
|
|
-
|
|
|
- if (predicatesByAccountingStateSupplierNotEqMinus1Filter.size() != predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size()) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:意思是 订单商品下 能对账'数量=>{} != 未对账(售后锁定(正常)(未锁定))'数量=>{};",
|
|
|
- predicatesByAccountingStateSupplierNotEqMinus1Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size()
|
|
|
- ));
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("记录信息:订单商品下({}:{}) 对账状态 = 不对账({}) 未对账({}) 未对账(售后锁定(正常)(未锁定))({}) 已对账({}) 已锁定({}) 大概率是存在订单维度部分商品已对账;",
|
|
|
- orderFromDB.getOrderSn(),
|
|
|
- orderGoodsListFromDB.size(),
|
|
|
- predicatesByAccountingStateSupplierEqMinus1Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq2Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq1Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq4Filter.size()
|
|
|
- ));
|
|
|
-
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
-
|
|
|
- // 此处包含 正单的部分 未对账 商品
|
|
|
- BigDecimal goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0 = predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter
|
|
|
- .stream()
|
|
|
- .map(item -> item.getCostPrice() == null ? BigDecimal.ZERO : item.getCostPrice().multiply(new BigDecimal(item.getQuantity())))
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
-
|
|
|
- entityCheckUpReport.setWholeOrderAmount(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0);
|
|
|
- entityCheckUpReport.setComparedWholeAmount(
|
|
|
- /* 产品要求的 这里的京东订单金额 有可能不是一个整单的金额,而是人为改的 */
|
|
|
- entityCheckUpReport.getJdOrderAmount()
|
|
|
- .subtract(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0)
|
|
|
- );
|
|
|
-
|
|
|
- // 意思是 订单下 能对账'数量 != 未对账'数量 说明存在部分对账 但如果 另外的部分未对账 金额 = 导入的 人为修改过的京东订单金额 也视为 正常
|
|
|
- if (predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size() > 0 &&
|
|
|
- entityCheckUpReport.getJdOrderAmount().compareTo(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0) == 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:意思是 订单商品下 虽然 能对账'数量=>{} != 未对账(售后锁定(正常)(未锁定))'数量=>{},但 未对账(售后锁定(正常)(未锁定))'金额=>{} = 京东'金额=>{};",
|
|
|
- predicatesByAccountingStateSupplierNotEqMinus1Filter.size(),
|
|
|
- predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size(),
|
|
|
- entityCheckUpReport.getJdOrderAmount(),
|
|
|
- goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0
|
|
|
- ));
|
|
|
- processReport.append(StrUtil.format("记录信息:部分对账情况 未对账({}) 京东金额({}) 中心金额({});",
|
|
|
- predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size(),
|
|
|
- entityCheckUpReport.getJdOrderAmount(),
|
|
|
- goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0
|
|
|
- ));
|
|
|
- processResult = ScheduleTaskCheckStateEnum.正常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.正常.getKey();
|
|
|
-
|
|
|
- } else if (predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter.size() == 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "意思是 订单商品下 能对账'数量 != 未对账(售后锁定(正常)(未锁定))'数量, 且 未对账(售后锁定(正常)(未锁定))'数量 = 0"));
|
|
|
- processReport.append("#结论#[对账结果]=[异常];[差异原因]=[第三方与结算中心的对账金额不相等];");
|
|
|
-
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:{}", "意思是 订单商品下 能对账'数量 == 未对账'数量;"));
|
|
|
-
|
|
|
- /**
|
|
|
- * 这个条数相等的情况下还要分金额相等与金额不等
|
|
|
- */
|
|
|
-
|
|
|
- // 此处包含 正负单的所有 未对账 商品
|
|
|
- BigDecimal goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else = predicatesByAccountingStateSupplierEq2GoodsLockingSupplierEq0Filter
|
|
|
- .stream()
|
|
|
- .map(item -> item.getCostPrice() == null ? BigDecimal.ZERO : item.getCostPrice().multiply(new BigDecimal(item.getQuantity())))
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
-
|
|
|
- entityCheckUpReport.setWholeOrderAmount(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else);
|
|
|
- entityCheckUpReport.setComparedWholeAmount(
|
|
|
- /* 产品要求的 这里的京东订单金额 有可能不是一个整单的金额,而是人为改的 */
|
|
|
- entityCheckUpReport.getJdOrderAmount()
|
|
|
- .subtract(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else)
|
|
|
- );
|
|
|
-
|
|
|
- // 意思是 订单下 未对账'金额 == 京东'金额
|
|
|
- if (entityCheckUpReport.getJdOrderAmount().compareTo(goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else) == 0) {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:意思是 订单商品下 未对账'金额=>{} == 京东'金额=>{};",
|
|
|
- goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else,
|
|
|
- entityCheckUpReport.getJdOrderAmount()
|
|
|
- ));
|
|
|
- processReport.append("#结论#[对账结果]=[正常];[差异原因]=[正常];");
|
|
|
-
|
|
|
- processResult = ScheduleTaskCheckStateEnum.正常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.正常.getKey();
|
|
|
- } else {
|
|
|
-
|
|
|
- processReport.append(StrUtil.format("[doggod]判定条件:意思是 订单下 未对账'金额=>{} != 京东'金额=>{};",
|
|
|
- goodsCostAmountAccountingStateSupplierEq2GoodsLockingSupplierEq0Else,
|
|
|
- entityCheckUpReport.getJdOrderAmount()
|
|
|
- ));
|
|
|
- processReport.append("#结论#[对账结果]=[异常];[差异原因]=[第三方与结算中心的对账金额不相等];");
|
|
|
-
|
|
|
- processResult = ScheduleTaskCheckStateEnum.异常.getKey();
|
|
|
- defineError = SysQuartzScheduleTaskStatementOfAccountDefineErrorEnum.第三方与结算中心的对账金额不相等.getKey();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return predicatesByAccountingStateSupplierEq2Filter;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private final ResourceConstant resourceConstant;
|
|
|
-
|
|
|
- private void tmpLog(String batchId,
|
|
|
- String jdOrderSn,
|
|
|
- String orderSns,
|
|
|
- String report,
|
|
|
- String now) {
|
|
|
-
|
|
|
- String excelExportPathRoot = resourceConstant.getPathRoot();
|
|
|
- String excelExportRelativePathTemplate = resourceConstant.getPathTemplate();
|
|
|
- String excelExportRelativePathStorage = resourceConstant.getPathStorage();
|
|
|
-
|
|
|
- String relativePath = File.separator + "thirdpart" +
|
|
|
- File.separator + "jd" +
|
|
|
- File.separator + "opCompareOrderAndCheckUpProcessDimOrderOne" +
|
|
|
- File.separator + batchId +
|
|
|
- File.separator;
|
|
|
-
|
|
|
-// String templateRelativePath = excelExportPathRoot + excelExportRelativePathTemplate + relativePath;
|
|
|
-// String templateFullPath;
|
|
|
-
|
|
|
- String targetFullPath = excelExportPathRoot + excelExportRelativePathStorage;
|
|
|
-
|
|
|
- // 请求记录
|
|
|
- String targetResponseFileName = StrUtil.format("{}_{}_{}.md", jdOrderSn, orderSns, now);
|
|
|
- String targetResponseWriteFileFullPath = targetFullPath + relativePath + targetResponseFileName;
|
|
|
- FileUtil.touch(targetResponseWriteFileFullPath);
|
|
|
- FileUtil.writeUtf8String(report, targetResponseWriteFileFullPath);// CharsetUtil.CHARSET_UTF_8
|
|
|
- }
|
|
|
-}
|