Kaynağa Gözat

新增运营端,对账相关接口

xucaiqin 2 yıl önce
ebeveyn
işleme
0daf091de5

+ 110 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/operate/LedgerLogisticsController.java

@@ -0,0 +1,110 @@
+package com.sckw.payment.controller.operate;
+
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.vo.LedgerLogistics;
+import com.sckw.payment.model.vo.req.LedgerListReq;
+import com.sckw.payment.model.vo.req.LogisticsReq;
+import com.sckw.payment.model.vo.res.LedgerLogisticsVo;
+import com.sckw.payment.service.operate.LedgerLogisticsService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 对账-物流订单
+ *
+ * @author xucaiqin
+ */
+@Validated
+@RestController
+@RequestMapping("/ledgerLogistics")
+public class LedgerLogisticsController {
+    @Resource
+    private LedgerLogisticsService ledgerLogisticsService;
+
+
+    /**
+     *
+     *
+     * @param logisticsReq 物流订单查询参数
+     * @return
+     */
+    @PostMapping("list")
+    public HttpResult list(@RequestBody LogisticsReq logisticsReq) {
+        return HttpResult.ok(ledgerLogisticsService.list(logisticsReq));
+    }
+
+    /**
+     * 对账单关联订单
+     *
+     * @param ledgerListReq 对账单id
+     * @return
+     */
+    @GetMapping("orderList")
+    public HttpResult orderList(@Valid LedgerListReq ledgerListReq) {
+        return HttpResult.ok(ledgerLogisticsService.orderList(ledgerListReq));
+    }
+
+
+    /**
+     * 查询物流对账单详情
+     *
+     * @param id 物流对账单id
+     * @return 物流对账单详情
+     */
+    @GetMapping("queryDetail")
+    public HttpResult queryDetail(@RequestParam("id") @NotBlank(message = "物流对账单id不能为空") String id) {
+        return HttpResult.ok(ledgerLogisticsService.queryDetail(Long.valueOf(id)));
+    }
+
+    /**
+     *
+     *
+     * @param logisticsReq 物流订单查询参数
+     * @return 物流对账单统计数据
+     */
+    @PostMapping("count")
+    public HttpResult count(@RequestBody LogisticsReq logisticsReq) {
+        return HttpResult.ok(ledgerLogisticsService.orderCount(logisticsReq));
+    }
+
+
+    /**
+     * 导出 todo
+     *
+     * @param response
+     * @param logisticsReq
+     * @return
+     */
+    @PostMapping("export")
+    public HttpResult export(HttpServletResponse response, @RequestBody LogisticsReq logisticsReq) {
+        List<LedgerLogistics> list;
+        if (CollectionUtils.isEmpty(logisticsReq.getIdList())) {
+            PageRes<LedgerLogistics> pageResult = ledgerLogisticsService.list(logisticsReq);
+            list = pageResult.getList();
+        } else {
+            list = ledgerLogisticsService.selectList(logisticsReq.getIdList());
+        }
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<LedgerLogisticsVo> collect = list.stream().map(a -> {
+            LedgerLogisticsVo ledgerLogisticsVo = new LedgerLogisticsVo();
+            BeanUtils.copyProperties(a, ledgerLogisticsVo);
+            return ledgerLogisticsVo;
+        }).collect(Collectors.toList());
+
+        ExcelUtil.downData(response, LedgerLogisticsVo.class, collect);
+        return null;
+    }
+}

+ 112 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/operate/LedgerTradeController.java

@@ -0,0 +1,112 @@
+package com.sckw.payment.controller.operate;
+
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.vo.LedgerSell;
+import com.sckw.payment.model.vo.req.LedgerListReq;
+import com.sckw.payment.model.vo.req.TradeReq;
+import com.sckw.payment.model.vo.res.LedgerTradeVo;
+import com.sckw.payment.service.operate.LedgerTradeService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 对账-交易订单
+ *
+ * @author xucaiqin
+ */
+@RestController
+@RequestMapping("/ledgerTrade")
+@Validated
+public class LedgerTradeController {
+    @Resource
+    private LedgerTradeService ledgerTradeService;
+
+
+    /**
+     *
+     *
+     * @param tradeReq
+     * @return
+     */
+    @PostMapping("list")
+    public HttpResult list(@RequestBody TradeReq tradeReq) {
+        return HttpResult.ok(ledgerTradeService.list(tradeReq));
+    }
+
+    /**
+     *
+     * @param ledgerListReq 对账单id
+     * @return
+     */
+    @GetMapping("orderList")
+    public HttpResult orderList(@Valid LedgerListReq ledgerListReq) {
+        return HttpResult.ok(ledgerTradeService.orderList(ledgerListReq));
+    }
+
+
+    /**
+     *
+     * @param id 对账单id
+     * @return
+     */
+    @GetMapping("queryDetail")
+    public HttpResult queryDetail(@RequestParam("id") String id) {
+        return HttpResult.ok(ledgerTradeService.queryDetail(Long.valueOf(id)));
+    }
+
+    /**
+     * 贸易订单数分类统计
+     *
+     * @return
+     */
+    @PostMapping("count")
+    public HttpResult count(@RequestBody  TradeReq tradeReq) {
+        return HttpResult.ok(ledgerTradeService.orderCount(tradeReq));
+    }
+
+
+
+    /**
+     * 导出 todo
+     *
+     * @param response
+     * @param tradeReq
+     * @return
+     */
+    @PostMapping("export")
+    public HttpResult export(HttpServletResponse response, @RequestBody @Valid TradeReq tradeReq) {
+        List<LedgerSell> list = null;
+
+        if (CollectionUtils.isEmpty(tradeReq.getIdList())) {
+            tradeReq.setPage(0);
+            tradeReq.setPageSize(0);
+            PageRes<LedgerSell> pageResult = ledgerTradeService.list(tradeReq);
+            list = pageResult.getList();
+        } else {
+//            list = ledgerTradeService.selectSellList(tradeReq.getIdList());
+        }
+
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<LedgerTradeVo> collect = list.stream().map(a -> {
+            LedgerTradeVo ledgerTradeVo = new LedgerTradeVo();
+            BeanUtils.copyProperties(a, ledgerTradeVo);
+            return ledgerTradeVo;
+        }).collect(Collectors.toList());
+        ExcelUtil.downData(response, LedgerTradeVo.class, collect);
+        return null;
+    }
+
+
+}

+ 104 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/operate/SettlementLogisticsController.java

@@ -0,0 +1,104 @@
+package com.sckw.payment.controller.operate;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.constant.LogisticsUnitType;
+import com.sckw.payment.model.dto.SettlementLogisticsDto;
+import com.sckw.payment.model.vo.req.SettlementReq;
+import com.sckw.payment.model.vo.res.SettlementLogisticsVo;
+import com.sckw.payment.service.KwpSettlementLogisticsService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 结算-物流订单
+ *
+ * @author Aick Spt
+ * @date 2023-07-18 16:34
+ */
+@RestController
+@Slf4j
+@RequestMapping( "/settlementLogistics")
+public class SettlementLogisticsController {
+
+    @Resource
+    private KwpSettlementLogisticsService kwpSettlementLogisticsService;
+
+    //   ========= 运费收款 承运方 =========
+    @PostMapping(name = "运费收款-物流订单列表", path = "pageListCollection")
+    public HttpResult pageSelectCollection(@RequestBody @Valid SettlementReq settlementReq) {
+        return HttpResult.ok(kwpSettlementLogisticsService.pageSelectCollection(settlementReq));
+    }
+
+    @PostMapping(name = "运费收款-物流订单各状态列表总数", path = "getCountListCollection")
+    public HttpResult getCountListCollection(@RequestBody @Valid SettlementReq settlementReq) {
+        return HttpResult.ok(kwpSettlementLogisticsService.getCountListCollection(settlementReq));
+    }
+
+    @PostMapping(name = "运费收款-根据条件导出物流订单表数据", path = "exportCollection")
+    public HttpResult exportCollection(HttpServletResponse response, @RequestBody @Valid SettlementReq settlementReq) {
+        settlementReq.setUnitType(LogisticsUnitType.CARRIER);
+        List<SettlementLogisticsDto> list;
+        list = kwpSettlementLogisticsService.selectList(settlementReq);
+        return this.export(response, list);
+    }
+
+    @GetMapping(name = "运费收款-物流订单详情", path = "detailCollection")
+    public HttpResult detailCollection(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpSettlementLogisticsService.detailCollection(id));
+    }
+
+
+    //   ========= 运费付款 托运方 =========
+    @PostMapping(name = "运费付款-物流订单列表", path = "pageListPayment")
+    public HttpResult pageSelectPayment(@RequestBody @Valid SettlementReq settlementReq) {
+        return HttpResult.ok(kwpSettlementLogisticsService.pageSelectPayment(settlementReq));
+    }
+
+    @PostMapping(name = "运费付款-物流订单各状态列表总数", path = "getCountListPayment")
+    public HttpResult getCountListPayment(@RequestBody @Valid SettlementReq settlementReq) {
+        return HttpResult.ok(kwpSettlementLogisticsService.getCountListPayment(settlementReq));
+    }
+
+    @PostMapping(name = "运费付款-根据条件导出物流订单表数据", path = "exportPayment")
+    public HttpResult exportPayment(HttpServletResponse response, @RequestBody @Valid SettlementReq settlementReq) {
+        settlementReq.setUnitType(LogisticsUnitType.SHIPPER);
+        List<SettlementLogisticsDto> list;
+        list = kwpSettlementLogisticsService.selectList(settlementReq);
+        return this.export(response, list);
+    }
+
+    @GetMapping(name = "物流订单详情", path = "detailPayment")
+    public HttpResult detailPayment(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpSettlementLogisticsService.detailPayment(id));
+    }
+
+    /**
+     * 导出
+     *
+     * @author Aick Spt
+     * @date 2023-07-24 15:49
+     */
+    private HttpResult export(HttpServletResponse response, List<SettlementLogisticsDto> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<SettlementLogisticsVo> collect = list.stream().map(a -> {
+            SettlementLogisticsVo settlementLogisticsVo = new SettlementLogisticsVo();
+            BeanUtils.copyProperties(a, settlementLogisticsVo);
+            return settlementLogisticsVo;
+        }).collect(Collectors.toList());
+        ExcelUtil.downData(response, SettlementLogisticsVo.class, collect);
+        return null;
+    }
+
+
+}

+ 179 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/operate/SettlementTradeController.java

@@ -0,0 +1,179 @@
+package com.sckw.payment.controller.operate;
+
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.constant.TradeUnitType;
+import com.sckw.payment.model.dto.ISettlement;
+import com.sckw.payment.model.vo.req.SettlementTradeReq;
+import com.sckw.payment.model.vo.res.SettlementLogisticsVo;
+import com.sckw.payment.service.KwpSettlementTradeService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 结算-交易订单
+ *
+ * @author xucaiqin
+ */
+@RestController
+@RequestMapping( "/settlementTrade")
+public class SettlementTradeController {
+
+    @Resource
+    private KwpSettlementTradeService kwpSettlementTradeService;
+
+    //   ========= 收款 销售 =========
+
+    /**
+     * 销售分页列表
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-销售结算单列表", path = "pageSellList")
+    public HttpResult pageListCollection(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
+        settlementReq.setUnitTypeTwo(TradeUnitType.SELL);
+        settlementReq.check();
+        return HttpResult.ok(kwpSettlementTradeService.pageListCollection(settlementReq));
+    }
+
+    /**
+     * 待结算、部分结算、全部结算
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表头统计数量", path = "getSellCount")
+    public HttpResult getCount(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
+        settlementReq.setUnitTypeTwo(TradeUnitType.SELL);
+        settlementReq.setEntId(LoginUserHolder.getEntId());
+        settlementReq.check();
+        return HttpResult.ok(kwpSettlementTradeService.getCount(settlementReq));
+    }
+
+    /**
+     * 表尾金额结算数据
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表尾金额结算数据", path = "getSellSum")
+    public HttpResult getSellSum(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
+        settlementReq.setUnitTypeTwo(TradeUnitType.SELL);
+        settlementReq.setEntId(LoginUserHolder.getEntId());
+        return HttpResult.ok(kwpSettlementTradeService.getCountListCollection(settlementReq));
+    }
+
+    @PostMapping(name = "收款-根据ids导出销售结算单列表", path = "exportCollection")
+    public HttpResult exportCollection(HttpServletResponse response, @RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        List<ISettlement> list;
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
+        settlementReq.setUnitTypeTwo(TradeUnitType.SELL);
+        if (CollectionUtils.isEmpty(settlementReq.getIdList())) {
+            PageRes<ISettlement> pageResult = kwpSettlementTradeService.pageListCollection(settlementReq);
+            list = pageResult.getList();
+        } else {
+            list = kwpSettlementTradeService.selectList(settlementReq.getIdList(), TradeUnitType.PURCHASE);
+        }
+        return this.export(response, list);
+    }
+
+
+    //   ========= 付款 采购 =========
+
+    /**
+     * 采购分页列表
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "付款-采购结算单列表", path = "pagePurchaseList")
+    public HttpResult pageListPayment(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        settlementReq.setUnitTypeTwo(TradeUnitType.PURCHASE);
+        return HttpResult.ok(kwpSettlementTradeService.pageListCollection(settlementReq));
+    }
+
+    /**
+     * 待结算、部分结算、全部结算
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表头统计数量", path = "getPurchaseCount")
+    public HttpResult getPurchaseCount(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        settlementReq.setUnitTypeTwo(TradeUnitType.PURCHASE);
+        settlementReq.setEntId(LoginUserHolder.getEntId());
+        return HttpResult.ok(kwpSettlementTradeService.getCount(settlementReq));
+    }
+
+    /**
+     * 表尾金额结算数据
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-物流结算订单列表头部汇总数量", path = "getPurchaseSum")
+    public HttpResult getCountListPayment(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        settlementReq.setUnitTypeTwo(TradeUnitType.PURCHASE);
+        settlementReq.setEntId(LoginUserHolder.getEntId());
+        return HttpResult.ok(kwpSettlementTradeService.getCountListCollection(settlementReq));
+    }
+
+    @PostMapping(name = "付款-根据ids导出采购结算单列表", path = "exportPayment")
+    public HttpResult exportPayment(HttpServletResponse response, @RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.check();
+        List<ISettlement> list;
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        settlementReq.setUnitTypeTwo(TradeUnitType.PURCHASE);
+        if (CollectionUtils.isEmpty(settlementReq.getIdList())) {
+            PageRes<ISettlement> pageResult = kwpSettlementTradeService.pageListCollection(settlementReq);
+            list = pageResult.getList();
+        } else {
+            list = kwpSettlementTradeService.selectList(settlementReq.getIdList(), TradeUnitType.SELL);
+        }
+        return this.export(response, list);
+    }
+    /**
+     * 导出
+     *
+     * @author Aick Spt
+     * @date 2023-07-24 15:49
+     */
+    private HttpResult export(HttpServletResponse response, List<ISettlement> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<SettlementLogisticsVo> collect = list.stream().map(a -> {
+            SettlementLogisticsVo settlementLogisticsVo = new SettlementLogisticsVo();
+            BeanUtils.copyProperties(a, settlementLogisticsVo);
+            return settlementLogisticsVo;
+        }).collect(Collectors.toList());
+        ExcelUtil.downData(response, SettlementLogisticsVo.class, collect);
+        return null;
+    }
+
+
+}

+ 203 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operate/LedgerLogisticsService.java

@@ -0,0 +1,203 @@
+package com.sckw.payment.service.operate;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.model.vo.TableTop;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringTimeUtil;
+import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
+import com.sckw.payment.model.KwpLedgerLogistics;
+import com.sckw.payment.model.KwpLedgerLogisticsOrder;
+import com.sckw.payment.model.constant.LedgerEnum;
+import com.sckw.payment.model.dto.ILedger;
+import com.sckw.payment.model.vo.LedgerLogistics;
+import com.sckw.payment.model.vo.req.LedgerListReq;
+import com.sckw.payment.model.vo.req.LogisticsReq;
+import com.sckw.payment.model.vo.res.LedgerLogisticsDetailVo;
+import com.sckw.payment.service.AbsLedger;
+import com.sckw.payment.service.KwpLedgerLogisticsOrderService;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.dubbo.TransportDubboService;
+import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 16:38:36
+ */
+@Service
+@Slf4j
+public class LedgerLogisticsService extends AbsLedger {
+    @Resource
+    private KwpLedgerLogisticsOrderService logisticsOrderService;
+    @Resource
+    private KwpLedgerLogisticsMapper logisticsMapper;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private TransportDubboService transportDubboService;
+
+    private void changeDict(List<? extends ILedger> list) {
+        List<SysDictResDto> taxRateDict = remoteSystemService.queryDictByType(DictTypeEnum.TAX_RATE.getType());
+        Map<String, String> taxRateMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        Map<String, String> tradingMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+
+        if (!CollectionUtils.isEmpty(taxRateDict)) {
+            taxRateMap = taxRateDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
+        }
+        List<SysDictResDto> tradingDict = remoteSystemService.queryDictByType(DictTypeEnum.TRADE_TYPE.getType());
+        if (!CollectionUtils.isEmpty(tradingDict)) {
+            tradingMap = tradingDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
+        }
+        for (ILedger logisticsDto : list) {
+            String trading = logisticsDto.getTrading();
+            logisticsDto.setTradingLabel(tradingMap.get(trading));
+            Integer taxRate = logisticsDto.getTaxRate();
+            logisticsDto.setTaxRateLabel(taxRateMap.get(String.valueOf(taxRate)));
+
+            logisticsDto.setStatusLabel(LedgerEnum.getDesc(logisticsDto.getStatus()));
+
+            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(logisticsDto.getCreateBy());
+            if (Objects.nonNull(userCacheResDto)) {
+                logisticsDto.setCreateByName(userCacheResDto.getName());
+            }
+        }
+    }
+
+    private void fillPara(LogisticsReq logisticsReq) {
+        if (StringUtils.isNotBlank(logisticsReq.getStartCreateTime())) {
+            logisticsReq.setStartCreateTime(StringTimeUtil.fillStart(logisticsReq.getStartCreateTime()));
+        }
+        if (StringUtils.isNotBlank(logisticsReq.getEndCreateTime())) {
+            logisticsReq.setEndCreateTime(StringTimeUtil.fillEnd(logisticsReq.getEndCreateTime()));
+        }
+    }
+
+    /**
+     * 托运方物流对账单列表查询
+     *
+     * @param logisticsReq
+     * @return 托运方对账订单分页数据
+     */
+    public PageRes<LedgerLogistics> list(LogisticsReq logisticsReq) {
+        fillPara(logisticsReq);
+        PageHelper.startPage(logisticsReq.getPage(), logisticsReq.getPageSize());
+        List<LedgerLogistics> kwpLedgerLogisticsList = logisticsMapper.list(logisticsReq);
+        PageInfo<LedgerLogistics> ledgerShipperDtoPageInfo = new PageInfo<>(kwpLedgerLogisticsList);
+        //字典转换
+        if (!CollectionUtils.isEmpty(kwpLedgerLogisticsList)) {
+            changeDict(ledgerShipperDtoPageInfo.getList());
+            return new PageRes<>(ledgerShipperDtoPageInfo);
+        }
+        return new PageRes<>(ledgerShipperDtoPageInfo);
+    }
+
+    public PageRes<LogisticsOrderDTO> orderList(LedgerListReq ledgerListReq) {
+        PageHelper.startPage(ledgerListReq.getPage(), ledgerListReq.getPageSize());
+        List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(ledgerListReq.getIdLong());
+        if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
+            return new PageRes<>();
+        }
+        PageInfo<KwpLedgerLogisticsOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
+        List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        return PageRes.build(pageInfo, acceptCarriageOrderList);
+    }
+
+
+    /**
+     * 按类型统计表头的数据
+     * 1-托运方 2-承运方
+     *
+     * @param logisticsReq 查询参数
+     * @return 统计数据
+     */
+    public List<TableTop> orderCount(LogisticsReq logisticsReq) {
+        Map<String, Long> map = logisticsMapper.countOrder2(logisticsReq);
+        TableTop ledgerCountVo;
+        /*统计数据转换*/
+        List<TableTop> res = new ArrayList<>();
+        for (LedgerEnum value : LedgerEnum.values()) {
+            ledgerCountVo = new TableTop();
+            ledgerCountVo.setTotal(Math.toIntExact(map.get(value.getLabel())));
+            ledgerCountVo.setName(value.getDesc());
+            ledgerCountVo.setValue(value.getStatus());
+            res.add(ledgerCountVo);
+        }
+        return res;
+    }
+
+    /**
+     * 查询物流对账单
+     *
+     * @param ids 对账单id列表
+     * @return 物流对账单列表
+     */
+    public List<LedgerLogistics> selectList(List<Long> ids) {
+        List<LedgerLogistics> ledgerLogisticsDto = logisticsMapper.selectIds(ids);
+        changeDict(ledgerLogisticsDto);
+        return ledgerLogisticsDto;
+    }
+
+    /**
+     * 查询物流对账单详情
+     *
+     * @param id 物流对账单id
+     * @return
+     */
+    public LedgerLogisticsDetailVo queryDetail(Long id) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(id);
+        orderCheck(kwpLedgerLogistics);
+        return getLedgerLogisticsDetailVo(kwpLedgerLogistics);
+    }
+
+    /**
+     * 转换物流对账单详情数据
+     *
+     * @param ledgerLogisticsDto
+     * @return
+     */
+    private LedgerLogisticsDetailVo getLedgerLogisticsDetailVo(KwpLedgerLogistics ledgerLogisticsDto) {
+        /*获取物流对账单关联的物流订单*/
+        List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(ledgerLogisticsDto.getId());
+        LedgerLogisticsDetailVo ledgerLogisticsDetailVo = new LedgerLogisticsDetailVo();
+        SysDictResDto trading = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TRADE_TYPE.getType(), ledgerLogisticsDto.getTrading());
+        SysDictResDto taxRate = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(ledgerLogisticsDto.getTaxRate()));
+
+        ledgerLogisticsDetailVo.setId(ledgerLogisticsDto.getId());
+        ledgerLogisticsDetailVo.setLLedgerNo(ledgerLogisticsDto.getLLedgerNo());
+        ledgerLogisticsDetailVo.setName(ledgerLogisticsDto.getName());
+        ledgerLogisticsDetailVo.setTrading(ledgerLogisticsDto.getTrading());
+        ledgerLogisticsDetailVo.setTradingLabel(Objects.nonNull(trading) ? trading.getLabel() : "");
+
+        ledgerLogisticsDetailVo.setTaxRate(ledgerLogisticsDto.getTaxRate());
+        ledgerLogisticsDetailVo.setTaxRateLabel(Objects.nonNull(taxRate) ? taxRate.getLabel() : "");
+        ledgerLogisticsDetailVo.setTotalPrice(ledgerLogisticsDto.getTotalPrice());
+        ledgerLogisticsDetailVo.setSettlePrice(ledgerLogisticsDto.getSettlePrice());
+        ledgerLogisticsDetailVo.setActualPrice(ledgerLogisticsDto.getActualPrice());
+        ledgerLogisticsDetailVo.setStartTime(ledgerLogisticsDto.getStartTime());
+        ledgerLogisticsDetailVo.setEndTime(ledgerLogisticsDto.getEndTime());
+        ledgerLogisticsDetailVo.setRemark(ledgerLogisticsDto.getRemark());
+        /*查询物流订单详情*/
+        if (!CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
+            List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
+            if (CollectionUtils.isEmpty(acceptCarriageOrderList)) {
+                ledgerLogisticsDetailVo.setOrderList(new ArrayList<>());
+            } else {
+                ledgerLogisticsDetailVo.setOrderList(acceptCarriageOrderList);
+            }
+        }
+        return ledgerLogisticsDetailVo;
+    }
+}

+ 282 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operate/LedgerTradeService.java

@@ -0,0 +1,282 @@
+package com.sckw.payment.service.operate;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.model.vo.TableTop;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringTimeUtil;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.*;
+import com.sckw.payment.dao.KwpLedgerTradeMapper;
+import com.sckw.payment.model.KwpLedgerTrade;
+import com.sckw.payment.model.KwpLedgerTradeOrder;
+import com.sckw.payment.model.constant.LedgerEnum;
+import com.sckw.payment.model.constant.TradeUnitType;
+import com.sckw.payment.model.dto.ILedger;
+import com.sckw.payment.model.dto.LedgerSellDto;
+import com.sckw.payment.model.dto.OrderDto;
+import com.sckw.payment.model.vo.LedgerSell;
+import com.sckw.payment.model.vo.req.LedgerListReq;
+import com.sckw.payment.model.vo.req.TradeReq;
+import com.sckw.payment.model.vo.res.LedgerTradeDetailVo;
+import com.sckw.payment.service.*;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 16:38:36
+ */
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class LedgerTradeService extends AbsLedger {
+    private final KwpLedgerTradeMapper tradeMapper;
+    private final KwpLedgerTradeTrackService tradeTrackService;
+    private final KwpLedgerTradeOrderService tradeOrderService;
+    private final KwpLedgerTradeUnitService tradeUnitService;
+    private final MessageSender messageSender;
+    @Resource
+    private KwpSettlementTradeService settlementTradeService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private TradeOrderInfoService tradeOrderInfoService;
+
+    /**
+     * 转换字典数据
+     *
+     * @param list
+     */
+    private void changeDict(List<? extends ILedger> list) {
+        List<SysDictResDto> taxRateDict = remoteSystemService.queryDictByType(DictTypeEnum.TAX_RATE.getType());
+        Map<String, String> taxRateMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        Map<String, String> tradingMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+
+        if (!CollectionUtils.isEmpty(taxRateDict)) {
+            taxRateMap = taxRateDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
+        }
+        List<SysDictResDto> tradingDict = remoteSystemService.queryDictByType(DictTypeEnum.TRADE_TYPE.getType());
+        if (!CollectionUtils.isEmpty(tradingDict)) {
+            tradingMap = tradingDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
+        }
+        for (ILedger tradeDto : list) {
+            String trading = tradeDto.getTrading();
+            tradeDto.setTradingLabel(tradingMap.get(trading));
+            Integer taxRate = tradeDto.getTaxRate();
+            tradeDto.setTaxRateLabel(taxRateMap.get(String.valueOf(taxRate)));
+
+            tradeDto.setStatusLabel(LedgerEnum.getDesc(tradeDto.getStatus()));
+            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(tradeDto.getCreateBy());
+            if (Objects.nonNull(userCacheResDto)) {
+                tradeDto.setCreateByName(userCacheResDto.getName());
+            }
+        }
+    }
+
+    /**
+     * 填充时间等参数
+     *
+     * @param tradeReq 请求参数
+     */
+    private void fillPara(TradeReq tradeReq) {
+        tradeReq.setEntId(LoginUserHolder.getEntId());
+        if (StringUtils.isNotBlank(tradeReq.getStartCreateTime())) {
+            tradeReq.setStartCreateTime(StringTimeUtil.fillStart(tradeReq.getStartCreateTime()));
+        }
+        if (StringUtils.isNotBlank(tradeReq.getEndCreateTime())) {
+            tradeReq.setEndCreateTime(StringTimeUtil.fillEnd(tradeReq.getEndCreateTime()));
+        }
+    }
+
+    /**
+     * 销售方
+     *
+     * @param tradeReq
+     * @return
+     */
+    public PageRes<LedgerSell> list(TradeReq tradeReq) {
+        fillPara(tradeReq);
+        if (tradeReq.getPage() != 0 && tradeReq.getPageSize() != 0) {
+            PageHelper.startPage(tradeReq.getPage(), tradeReq.getPageSize());
+        }
+        tradeReq.setUnitType(TradeUnitType.PURCHASE);
+        tradeReq.setUnitTypeTwo(TradeUnitType.SELL);
+        List<LedgerSell> ledgerTradeDto = tradeMapper.list(tradeReq);
+        //字典转换
+        if (!CollectionUtils.isEmpty(ledgerTradeDto)) {
+            changeDict(ledgerTradeDto);
+            return new PageRes<>(ledgerTradeDto);
+        }
+        return new PageRes<>();
+    }
+
+    /**
+     * 按分类统计对账单表头数量
+     *
+     * @param tradeReq 查询参数
+     * @return
+     */
+    public List<TableTop> orderCount(TradeReq tradeReq) {
+        Map<String, Long> map = tradeMapper.countOrder2(tradeReq);
+        TableTop ledgerCountVo;
+        List<TableTop> res = new ArrayList<>();
+        for (LedgerEnum value : LedgerEnum.values()) {
+            ledgerCountVo = new TableTop();
+            ledgerCountVo.setTotal(Math.toIntExact(map.get(value.getLabel())));
+            ledgerCountVo.setName(value.getDesc());
+            ledgerCountVo.setValue(value.getStatus());
+            res.add(ledgerCountVo);
+        }
+        return res;
+    }
+
+    /**
+     * 根据id查询对账单列表
+     *
+     * @param ids 对账单id列表
+     * @return 对账单数据
+     */
+    public List<LedgerSellDto> selectSellList(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return new ArrayList<>();
+        }
+        List<LedgerSellDto> ledgerTradeDto = tradeMapper.selectSellIds(ids);
+        changeDict(ledgerTradeDto);
+        return ledgerTradeDto;
+    }
+
+    private LedgerTradeDetailVo getDetail(KwpLedgerTrade ledgerTradeDto) {
+        List<KwpLedgerTradeOrder> kwpLedgerTradeOrders = tradeOrderService.queryList(ledgerTradeDto.getId());
+        LedgerTradeDetailVo ledgerTradeDetailVo = new LedgerTradeDetailVo();
+        ledgerTradeDetailVo.setId(ledgerTradeDto.getId());
+        ledgerTradeDetailVo.setTLedgerNo(ledgerTradeDto.getTLedgerNo());
+        ledgerTradeDetailVo.setName(ledgerTradeDto.getName());
+        SysDictResDto trading = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TRADE_TYPE.getType(), ledgerTradeDto.getTrading());
+        ledgerTradeDetailVo.setTrading(ledgerTradeDto.getTrading());
+        ledgerTradeDetailVo.setTradingLabel(Objects.nonNull(trading) ? trading.getLabel() : "");
+        SysDictResDto taxRate = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TAX_RATE.getType(), String.valueOf(ledgerTradeDto.getTaxRate()));
+        ledgerTradeDetailVo.setTaxRate(ledgerTradeDto.getTaxRate());
+        ledgerTradeDetailVo.setTaxRateLabel(Objects.nonNull(taxRate) ? taxRate.getLabel() : "");
+        ledgerTradeDetailVo.setTotalPrice(ledgerTradeDto.getTotalPrice());
+        ledgerTradeDetailVo.setSettlePrice(ledgerTradeDto.getSettlePrice());
+        ledgerTradeDetailVo.setActualPrice(ledgerTradeDto.getActualPrice());
+        ledgerTradeDetailVo.setStartTime(ledgerTradeDto.getStartTime());
+        ledgerTradeDetailVo.setEndTime(ledgerTradeDto.getEndTime());
+        ledgerTradeDetailVo.setRemark(ledgerTradeDto.getRemark());
+        List<Long> collect = kwpLedgerTradeOrders.stream().map(KwpLedgerTradeOrder::getTOrderId).toList();
+        List<OrderDto> detailRes = new ArrayList<>();
+        OrderDetailRes orderDetailById;
+        //查询贸易订单详情
+        for (Long aLong : collect) {
+            orderDetailById = tradeOrderInfoService.getOrderDetailById(aLong);
+            detailRes.add(changeOrder(orderDetailById));
+        }
+        ledgerTradeDetailVo.setOrderList(detailRes);
+        return ledgerTradeDetailVo;
+    }
+
+    private OrderDto changeOrder(OrderDetailRes orderDetailRes) {
+        OrderDto orderDto = new OrderDto();
+        BeanUtils.copyProperties(orderDetailRes, orderDto);
+        List<UnitInfoDetailRes> unitInfo = orderDetailRes.getUnitInfo();
+        if (!CollectionUtils.isEmpty(unitInfo)) {
+            for (UnitInfoDetailRes unitInfoDetailRes : unitInfo) {
+                //2-销售
+                if (StringUtils.equals(unitInfoDetailRes.getUnitType(), "2")) {
+                    orderDto.setSupplyEntId(unitInfoDetailRes.getEntId());
+                    orderDto.setSupplyFirmName(unitInfoDetailRes.getFirmName());
+                }
+                //1-采购
+                if (StringUtils.equals(unitInfoDetailRes.getUnitType(), "1")) {
+                    orderDto.setProcureEntId(unitInfoDetailRes.getEntId());
+                    //采购企业名称
+                    orderDto.setProcureFirmName(unitInfoDetailRes.getFirmName());
+                }
+            }
+        }
+        ContractInfo contractInfo = orderDetailRes.getContractInfo();
+        if (Objects.nonNull(contractInfo)) {
+            orderDto.setContractId(contractInfo.getContractId());
+            orderDto.setContractNo(contractInfo.getContractNo());
+            orderDto.setContractName(contractInfo.getContractName());
+            orderDto.setContractSigningWay(contractInfo.getContractSigningWay());
+        }
+        GoodsInfoDetailRes goodsInfo = orderDetailRes.getGoodsInfo();
+        if (Objects.nonNull(goodsInfo)) {
+            orderDto.setGoodsId(goodsInfo.getGoodsId());
+            orderDto.setGoodsSpec(goodsInfo.getSpec());
+            orderDto.setGoodsName(goodsInfo.getName());
+            orderDto.setGoodsType(goodsInfo.getGoodsType());
+            orderDto.setGoodsTypeLabel(goodsInfo.getGoodsTypeLabel());
+            orderDto.setUnit(goodsInfo.getUnit());
+            orderDto.setUnitLabel(goodsInfo.getUnitLabel());
+            orderDto.setUnitPrice(goodsInfo.getUnitPrice());
+            orderDto.setGoodsAmount(goodsInfo.getGoodsAmount());
+            orderDto.setTaxRate(goodsInfo.getTaxRate());
+            orderDto.setTaxRateLabel(goodsInfo.getTaxRateLabel());
+        }
+        List<AddressInfoDetail> addressInfo = orderDetailRes.getAddressInfo();
+        if (!CollectionUtils.isEmpty(addressInfo)) {
+            for (AddressInfoDetail addressInfoDetail : addressInfo) {
+                if (StringUtils.equals(addressInfoDetail.getAddressType(), "1")) {
+                    orderDto.setLoadName(addressInfoDetail.getName());
+                    orderDto.setLoadDetailAddressInfo(addressInfoDetail.getDetailAddress());
+                }
+                if (StringUtils.equals(addressInfoDetail.getAddressType(), "2")) {
+                    orderDto.setUnloadName(addressInfoDetail.getName());
+                    orderDto.setUnloadDetailAddressInfo(addressInfoDetail.getDetailAddress());
+                }
+            }
+        }
+        orderDto.setTOrderId(orderDetailRes.getId());
+        return orderDto;
+    }
+
+    /**
+     * 查询对账单详情
+     *
+     * @param id       对账单id
+     * @return 对账单详情
+     */
+    public LedgerTradeDetailVo queryDetail(Long id) {
+        KwpLedgerTrade ledgerTrade = tradeMapper.selectById(id);
+        orderCheck(ledgerTrade);
+        return getDetail(ledgerTrade);
+    }
+
+    public PageRes<OrderDto> orderList(LedgerListReq ledgerListReq) {
+        PageHelper.startPage(ledgerListReq.getPage(), ledgerListReq.getPageSize());
+        List<KwpLedgerTradeOrder> kwpLedgerLogisticsOrders = tradeOrderService.queryList(ledgerListReq.getIdLong());
+        if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
+            return new PageRes<>();
+        }
+        PageInfo<KwpLedgerTradeOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
+        List<OrderDto> detailRes = new ArrayList<>();
+        for (KwpLedgerTradeOrder kwpLedgerLogisticsOrder : kwpLedgerLogisticsOrders) {
+            OrderDetailRes orderDetailById = tradeOrderInfoService.getOrderDetailById(kwpLedgerLogisticsOrder.getTOrderId());
+            log.info("销售订单:{}", JSONObject.toJSONString(orderDetailById));
+            detailRes.add(changeOrder(orderDetailById));
+        }
+        return PageRes.build(pageInfo, detailRes);
+    }
+
+
+}