|
|
@@ -1,12 +1,273 @@
|
|
|
package com.sckw.payment.service;
|
|
|
|
|
|
+import com.github.pagehelper.PageHelper;
|
|
|
+import com.github.pagehelper.PageInfo;
|
|
|
+import com.sckw.core.exception.BusinessException;
|
|
|
+import com.sckw.core.model.page.PageRes;
|
|
|
+import com.sckw.core.utils.IdWorker;
|
|
|
+import com.sckw.payment.dao.KwpLedgerTradeMapper;
|
|
|
+import com.sckw.payment.model.KwpLedgerTrade;
|
|
|
+import com.sckw.payment.model.KwpLedgerTradeTrack;
|
|
|
+import com.sckw.payment.model.KwpLedgerTradeUnit;
|
|
|
+import com.sckw.payment.model.KwpSettlementTrade;
|
|
|
+import com.sckw.payment.model.constant.LedgerEnum;
|
|
|
+import com.sckw.payment.model.constant.LedgerTrackEnum;
|
|
|
+import com.sckw.payment.model.constant.TradeUnitType;
|
|
|
+import com.sckw.payment.model.dto.LedgerTradeDto;
|
|
|
+import com.sckw.payment.model.vo.req.*;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
/**
|
|
|
* @author xucaiqin
|
|
|
* @date 2023-07-10 16:38:36
|
|
|
*/
|
|
|
|
|
|
@Service
|
|
|
-public class KwpLedgerTradeService {
|
|
|
+@AllArgsConstructor
|
|
|
+public class KwpLedgerTradeService extends AbsLedger {
|
|
|
+ private final KwpLedgerTradeMapper tradeMapper;
|
|
|
+ private final KwpLedgerTradeTrackService tradeTrackService;
|
|
|
+ private final KwpLedgerTradeOrderService tradeOrderService;
|
|
|
+ private final KwpSettlementTradeService settlementTradeService;
|
|
|
+ private final KwpLedgerTradeUnitService tradeUnitService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询对账单列表
|
|
|
+ *
|
|
|
+ * @param tradeReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public PageRes<LedgerTradeDto> pageList(TradeReq tradeReq) {
|
|
|
+ String keywords = tradeReq.getKeywords();
|
|
|
+ if (StringUtils.isNotBlank(keywords)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ PageHelper.startPage(tradeReq.getPage(), tradeReq.getPageSize());
|
|
|
+ List<LedgerTradeDto> ledgerTradeDto = tradeMapper.pageSelect(tradeReq, new ArrayList<>());
|
|
|
+
|
|
|
+ return new PageRes<>(new PageInfo<>(ledgerTradeDto));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void removeDraft(Long id) {
|
|
|
+ //删除kwp_ledger_trade_order
|
|
|
+ tradeOrderService.remove(id);
|
|
|
+ //删除kwp_ledger_trade_track
|
|
|
+ tradeTrackService.remove(id);
|
|
|
+ //删除kwp_ledger_trade_unit
|
|
|
+ tradeUnitService.remove(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存对账单
|
|
|
+ *
|
|
|
+ * @param tradeSendReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String sendLedger(TradeSendReq tradeSendReq) {
|
|
|
+ Long id = tradeSendReq.getId();
|
|
|
+ if (Objects.isNull(id)) {
|
|
|
+ //新增
|
|
|
+ sendLedgerDraft(tradeSendReq);
|
|
|
+ } else {
|
|
|
+ //先删除
|
|
|
+ removeDraft(id);
|
|
|
+ //在新增
|
|
|
+ sendLedgerDraft(tradeSendReq);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存草稿
|
|
|
+ *
|
|
|
+ * @param tradeSendReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String sendLedgerDraft(TradeSendReq tradeSendReq) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = new KwpLedgerTrade();
|
|
|
+ kwpLedgerTrade.setId(Objects.isNull(tradeSendReq.getId()) ? new IdWorker(1).nextId() : tradeSendReq.getId());
|
|
|
+ kwpLedgerTrade.setEntId(0L);//todo
|
|
|
+ kwpLedgerTrade.setTLedgerNo("");
|
|
|
+ kwpLedgerTrade.setName(tradeSendReq.getName());
|
|
|
+ kwpLedgerTrade.setStartTime(tradeSendReq.getStartTime());
|
|
|
+ kwpLedgerTrade.setEndTime(tradeSendReq.getEndTime());
|
|
|
+ kwpLedgerTrade.setTaxRate(tradeSendReq.getTaxRate());
|
|
|
+ kwpLedgerTrade.setTrading(0L);
|
|
|
+ kwpLedgerTrade.setTotalPrice(tradeSendReq.getTotalPrice());
|
|
|
+ kwpLedgerTrade.setSettlePrice(tradeSendReq.getSettlePrice());
|
|
|
+ kwpLedgerTrade.setActualPrice(new BigDecimal("0.0"));
|
|
|
+ kwpLedgerTrade.setAuditUser("");
|
|
|
+ kwpLedgerTrade.setAuditPhone("");
|
|
|
+ kwpLedgerTrade.setUrl("");
|
|
|
+ kwpLedgerTrade.setRemark("");
|
|
|
+ kwpLedgerTrade.setStatus(LedgerEnum.SAVE.getStatus());
|
|
|
+ kwpLedgerTrade.setCreateBy(0L);
|
|
|
+ kwpLedgerTrade.setCreateTime(LocalDateTime.now());
|
|
|
+ kwpLedgerTrade.setUpdateBy(0L);
|
|
|
+ kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
|
|
|
+ kwpLedgerTrade.setDelFlag(0);
|
|
|
+ if (Objects.isNull(tradeSendReq.getId())) {
|
|
|
+ tradeMapper.insert(kwpLedgerTrade);
|
|
|
+ } else {
|
|
|
+ tradeMapper.updateById(kwpLedgerTrade);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*保存贸易订单关联数据*/
|
|
|
+ List<Long> ids = tradeSendReq.getIds();
|
|
|
+ //todo dubbo拿取销售订单数据
|
|
|
+ /*保存企业单位相关信息*/
|
|
|
+ //todo dubbo拿取采购客户单位的信息
|
|
|
+ Long purchaseEntId = tradeSendReq.getPurchaseEntId();
|
|
|
+ List<KwpLedgerTradeUnit> list = new ArrayList<>();
|
|
|
+ KwpLedgerTradeUnit kwpLedgerTradeUnit = new KwpLedgerTradeUnit();
|
|
|
+ kwpLedgerTradeUnit.setId(new IdWorker(1).nextId());
|
|
|
+ kwpLedgerTradeUnit.setTLedgerId(kwpLedgerTrade.getId());
|
|
|
+ kwpLedgerTradeUnit.setTLedgerNo(kwpLedgerTrade.getTLedgerNo());
|
|
|
+ kwpLedgerTradeUnit.setUnitType(TradeUnitType.PURCHASE);
|
|
|
+ kwpLedgerTradeUnit.setEntId(purchaseEntId);
|
|
|
+ kwpLedgerTradeUnit.setTopEntId(0L);
|
|
|
+ kwpLedgerTradeUnit.setFirmName("");
|
|
|
+ kwpLedgerTradeUnit.setContacts("");
|
|
|
+ kwpLedgerTradeUnit.setPhone("");
|
|
|
+ kwpLedgerTradeUnit.setRemark("");
|
|
|
+ kwpLedgerTradeUnit.setStatus(0);
|
|
|
+ kwpLedgerTradeUnit.setCreateBy(0L);
|
|
|
+ kwpLedgerTradeUnit.setCreateTime(LocalDateTime.now());
|
|
|
+ kwpLedgerTradeUnit.setUpdateBy(0L);
|
|
|
+ kwpLedgerTradeUnit.setUpdateTime(LocalDateTime.now());
|
|
|
+ kwpLedgerTradeUnit.setDelFlag(0);
|
|
|
+
|
|
|
+ list.add(kwpLedgerTradeUnit);
|
|
|
+ tradeUnitService.saveList(list);
|
|
|
+ /*保存操作记录*/
|
|
|
+ tradeTrackService.saveTrack(kwpLedgerTrade.getId(), "", LedgerTrackEnum.SAVE);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public String remove(Long id) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
|
|
|
+ if (Objects.isNull(kwpLedgerTrade)) {
|
|
|
+ throw new BusinessException("对账单不存在!");
|
|
|
+ }
|
|
|
+ deleteCheck(kwpLedgerTrade.getStatus());
|
|
|
+ kwpLedgerTrade.setDelFlag(1);
|
|
|
+ tradeMapper.updateById(kwpLedgerTrade);
|
|
|
+ tradeTrackService.saveTrack(kwpLedgerTrade.getId(), "", LedgerTrackEnum.DELETE);
|
|
|
+ return "删除成功";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 撤回对账单
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Integer backOrder(Long id) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
|
|
|
+ if (Objects.isNull(kwpLedgerTrade)) {
|
|
|
+ throw new BusinessException("对账单不存在!");
|
|
|
+ }
|
|
|
+ revokeCheck(kwpLedgerTrade.getStatus());
|
|
|
+ kwpLedgerTrade.setStatus(LedgerEnum.BACK.getStatus());
|
|
|
+ tradeMapper.updateById(kwpLedgerTrade);
|
|
|
+
|
|
|
+ return tradeTrackService.saveTrack(id, "", LedgerTrackEnum.REVOKE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询贸易对账单驳回记录
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<KwpLedgerTradeTrack> queryBack(Long id) {
|
|
|
+ return tradeTrackService.selectList(id, LedgerTrackEnum.REJECT);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 驳回贸易对账单
|
|
|
+ *
|
|
|
+ * @param ledgerReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Integer doBack(LedgerReq ledgerReq) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
|
|
|
+ if (Objects.isNull(kwpLedgerTrade)) {
|
|
|
+ throw new BusinessException("对账单不存在!");
|
|
|
+ }
|
|
|
+ return tradeTrackService.saveTrack(ledgerReq.getId(), ledgerReq.getRemark(), LedgerTrackEnum.REJECT);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对账确认
|
|
|
+ *
|
|
|
+ * @param confirmReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Integer confirmOrder(LedgerConfirmReq confirmReq) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(confirmReq.getId());
|
|
|
+ if (Objects.isNull(kwpLedgerTrade)) {
|
|
|
+ throw new BusinessException("对账单不存在!");
|
|
|
+ }
|
|
|
+ kwpLedgerTrade.setStatus(LedgerEnum.LEDGERED.getStatus());
|
|
|
+ kwpLedgerTrade.setAuditPhone(confirmReq.getAuditPhone());
|
|
|
+ kwpLedgerTrade.setAuditUser(confirmReq.getAuditUser());
|
|
|
+ kwpLedgerTrade.setUrl(confirmReq.getUrl());
|
|
|
+ kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
|
|
|
+ tradeMapper.updateById(kwpLedgerTrade);
|
|
|
+ return tradeTrackService.saveTrack(confirmReq.getId(), "", LedgerTrackEnum.CONFIRM);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对账完成
|
|
|
+ *
|
|
|
+ * @param ledgerReq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String orderSuccess(LedgerSuccessReq ledgerReq) {
|
|
|
+ KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
|
|
|
+ if (Objects.isNull(kwpLedgerTrade)) {
|
|
|
+ throw new BusinessException("对账单不存在!");
|
|
|
+ }
|
|
|
+ successCheck(kwpLedgerTrade.getStatus());
|
|
|
+
|
|
|
+ kwpLedgerTrade.setStatus(LedgerEnum.SUCCESS.getStatus());
|
|
|
+ kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
|
|
|
+ tradeMapper.updateById(kwpLedgerTrade);
|
|
|
+ //生成结算单
|
|
|
+ KwpSettlementTrade kwpSettlementTrade = new KwpSettlementTrade();
|
|
|
+ kwpSettlementTrade.setId(new IdWorker(1).nextId());
|
|
|
+ kwpSettlementTrade.setEntId(0L);//todo
|
|
|
+ kwpSettlementTrade.setTLedgerId(kwpLedgerTrade.getId());
|
|
|
+ kwpSettlementTrade.setStOrderNo(String.valueOf(new IdWorker(1).nextId()));
|
|
|
+ kwpSettlementTrade.setName(kwpLedgerTrade.getName());
|
|
|
+ kwpSettlementTrade.setTotalPrice(kwpLedgerTrade.getTotalPrice());
|
|
|
+ kwpSettlementTrade.setActualPrice(kwpLedgerTrade.getActualPrice());
|
|
|
+ kwpSettlementTrade.setRemark("");
|
|
|
+ kwpSettlementTrade.setStatus(0);
|
|
|
+ kwpSettlementTrade.setCreateBy(0L);
|
|
|
+ kwpSettlementTrade.setCreateTime(LocalDateTime.now());
|
|
|
+ kwpSettlementTrade.setUpdateBy(0L);
|
|
|
+ kwpSettlementTrade.setUpdateTime(LocalDateTime.now());
|
|
|
+ kwpSettlementTrade.setDelFlag(0);
|
|
|
+ settlementTradeService.save(kwpSettlementTrade);
|
|
|
|
|
|
+ tradeTrackService.saveTrack(ledgerReq.getId(), "", LedgerTrackEnum.SUCCESS);
|
|
|
+ return "对账完成";
|
|
|
+ }
|
|
|
}
|