|
@@ -0,0 +1,222 @@
|
|
|
+package com.zhongzheng.modules.top.order.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.zhongzheng.common.exception.CustomException;
|
|
|
+import com.zhongzheng.common.utils.DateUtils;
|
|
|
+import com.zhongzheng.modules.top.financial.bo.TopOrderProceedsBo;
|
|
|
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderAddBo;
|
|
|
+import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
|
|
|
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
|
|
|
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
|
|
|
+import com.zhongzheng.modules.top.order.bo.*;
|
|
|
+import com.zhongzheng.modules.top.order.domain.TopOrderAcceptance;
|
|
|
+import com.zhongzheng.modules.top.order.domain.TopOrderAcceptanceRel;
|
|
|
+import com.zhongzheng.modules.top.order.mapper.TopOrderAcceptanceMapper;
|
|
|
+import com.zhongzheng.modules.top.order.service.ITopOrderAcceptanceRelService;
|
|
|
+import com.zhongzheng.modules.top.order.service.ITopOrderAcceptanceService;
|
|
|
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceStatisticsVo;
|
|
|
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceVo;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 订单网银打款Service业务层处理
|
|
|
+ *
|
|
|
+ * @author hjl
|
|
|
+ * @date 2023-05-08
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class TopOrderAcceptanceServiceImpl extends ServiceImpl<TopOrderAcceptanceMapper, TopOrderAcceptance> implements ITopOrderAcceptanceService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITopOrderAcceptanceRelService iTopOrderAcceptanceRelService;
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderService iTopOldOrderService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TopOrderAcceptanceVo> queryAcceptanceList(TopOrderAcceptanceBo bo) {
|
|
|
+ return baseMapper.queryAcceptanceList(bo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean insertByAddBo(TopOrderAcceptanceAddBo bo) {
|
|
|
+ bo.setAcceptanceType(1);
|
|
|
+ bo.setIncomeType(1);
|
|
|
+ bo.setIncomeDepartment("祥粤学校");
|
|
|
+ bo.setBusinessAffiliation("学校");
|
|
|
+ bo.setAcceptanceStatus(1);
|
|
|
+ bo.setCreateTime(DateUtils.getNowTime());
|
|
|
+ bo.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ TopOrderAcceptance acceptance = BeanUtil.toBean(bo, TopOrderAcceptance.class);
|
|
|
+ //待认款金额
|
|
|
+ acceptance.setUnacceptanceMoney(bo.getIncomeMoney());
|
|
|
+ return save(acceptance);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean deleteByAddBo(TopOrderAcceptanceBo bo) {
|
|
|
+ TopOrderAcceptance acceptance = getById(bo.getAcceptanceId());
|
|
|
+ if (ObjectUtils.isNull(acceptance)){
|
|
|
+ throw new CustomException("信息获取有误");
|
|
|
+ }
|
|
|
+ if (acceptance.getAcceptanceStatus() == 2){
|
|
|
+ throw new CustomException("已认款记录不能删除");
|
|
|
+ }
|
|
|
+ int count = iTopOrderAcceptanceRelService.count(new LambdaQueryWrapper<TopOrderAcceptanceRel>()
|
|
|
+ .eq(TopOrderAcceptanceRel::getAcceptanceId, bo.getAcceptanceId())
|
|
|
+ .eq(TopOrderAcceptanceRel::getStatus, 1));
|
|
|
+ if (count > 0){
|
|
|
+ throw new CustomException("已有认款记录不能删除");
|
|
|
+ }
|
|
|
+ acceptance.setStatus(-1);
|
|
|
+ return updateById(acceptance);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TopOrderAcceptanceStatisticsVo statistics() {
|
|
|
+ List<TopOrderAcceptance> list = list(new LambdaQueryWrapper<TopOrderAcceptance>().eq(TopOrderAcceptance::getStatus, 1));
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
+ return new TopOrderAcceptanceStatisticsVo();
|
|
|
+ }
|
|
|
+ BigDecimal reduce = list.stream().map(TopOrderAcceptance::getIncomeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal reduce2 = list.stream().map(TopOrderAcceptance::getAcceptanceMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal reduce3 = list.stream().map(TopOrderAcceptance::getUnacceptanceMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ TopOrderAcceptanceStatisticsVo vo = new TopOrderAcceptanceStatisticsVo();
|
|
|
+ vo.setIncomeMoney(reduce);
|
|
|
+ vo.setAcceptanceMoney(reduce2);
|
|
|
+ vo.setUnacceptanceMoney(reduce3);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean importData(List<TopOrderAcceptanceExportBo> acceptanceExportBos) {
|
|
|
+ if (CollectionUtils.isEmpty(acceptanceExportBos)){
|
|
|
+ throw new CustomException("请勿导入空表");
|
|
|
+ }
|
|
|
+ List<TopOrderAcceptance> collect = acceptanceExportBos.stream().map(item -> {
|
|
|
+ TopOrderAcceptance bo = BeanUtil.toBean(item, TopOrderAcceptance.class);
|
|
|
+ bo.setIncomeMoney(new BigDecimal(item.getIncomeMoney()));
|
|
|
+ bo.setIncomeTime(DateUtils.dateTimeSec(item.getIncomeTime(),"yyyy/MM/dd"));
|
|
|
+ bo.setAcceptanceType(1);
|
|
|
+ bo.setIncomeType(1);
|
|
|
+ bo.setIncomeDepartment("祥粤学校");
|
|
|
+ bo.setBusinessAffiliation("学校");
|
|
|
+ bo.setAcceptanceStatus(1);
|
|
|
+ bo.setCreateTime(DateUtils.getNowTime());
|
|
|
+ bo.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ return bo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return updateBatchById(collect);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TopOldOrderVo> getAcceptanceOrderList(TopAcceptanceOrderBo bo) {
|
|
|
+ bo.setOrderSign(1);
|
|
|
+ List<TopOldOrderVo> acceptanceOrderList = baseMapper.getAcceptanceOrderList(bo);
|
|
|
+ if (CollectionUtils.isEmpty(acceptanceOrderList)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ acceptanceOrderList.forEach(item -> {
|
|
|
+ List<String> businessNames = iTopOldOrderService.queryOrderBusinessName(item.getOrderSn());
|
|
|
+ item.setBusinessNames(businessNames);
|
|
|
+ if (ObjectUtils.isNotNull(item.getOrderReceived()) && ObjectUtils.isNotNull(item.getOrderRefunded())) {
|
|
|
+ item.setOrderPractical(item.getOrderReceived().subtract(item.getOrderRefunded()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return acceptanceOrderList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean addOrderAcceptanceRel(TopOrderAcceptanceRelBo bo) {
|
|
|
+ TopOrderAcceptance acceptance = getById(bo.getAcceptanceId());
|
|
|
+ if (ObjectUtils.isNull(acceptance)){
|
|
|
+ throw new CustomException("认款记录数据错误!");
|
|
|
+ }
|
|
|
+ if (acceptance.getIncomeMoney().compareTo(BigDecimal.ZERO) <= 0){
|
|
|
+ throw new CustomException("认款记录没有到账金额!");
|
|
|
+ }
|
|
|
+ BigDecimal reduce = bo.getGoodsAcceptanceList().stream().map(TopOrderGoodsAcceptanceBo::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (acceptance.getIncomeMoney().compareTo(reduce) < 0){
|
|
|
+ throw new CustomException("认款到账金额小于本次认款订单金额,不能认款,请重新选择!");
|
|
|
+ }
|
|
|
+ //到账金额
|
|
|
+ BigDecimal incomeMoney = acceptance.getIncomeMoney();
|
|
|
+ //认款金额
|
|
|
+ BigDecimal acceptanceMoney = BigDecimal.ZERO;
|
|
|
+ List<TopOrderAcceptanceRel> acceptanceRels = new ArrayList<>();
|
|
|
+ for (TopOrderGoodsAcceptanceBo acceptanceBo : bo.getGoodsAcceptanceList()) {
|
|
|
+ TopOldOrder item = iTopOldOrderService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, acceptanceBo.getOrderSn()));
|
|
|
+ //本次认款金额
|
|
|
+ BigDecimal money = acceptanceBo.getMoney();
|
|
|
+ //认款
|
|
|
+ if (money.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ TopOrderProceedsBo proceedsBo = new TopOrderProceedsBo();
|
|
|
+ proceedsBo.setOrderSn(item.getOrderSn());
|
|
|
+ proceedsBo.setOrderReceived(money);
|
|
|
+ iTopOldOrderService.orderProceeds(proceedsBo);
|
|
|
+ acceptanceMoney = acceptanceMoney.add(money);
|
|
|
+ incomeMoney = incomeMoney.subtract(money);
|
|
|
+ }
|
|
|
+
|
|
|
+ TopOrderAcceptanceRel acceptanceRel = new TopOrderAcceptanceRel();
|
|
|
+ acceptanceRel.setOrderSn(item.getOrderSn());
|
|
|
+ acceptanceRel.setAcceptanceId(bo.getAcceptanceId());
|
|
|
+ acceptanceRel.setAcceptanceMoney(money);
|
|
|
+ acceptanceRel.setCreateTime(DateUtils.getNowTime());
|
|
|
+ acceptanceRel.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ acceptanceRels.add(acceptanceRel);
|
|
|
+ }
|
|
|
+
|
|
|
+ //已认款金额
|
|
|
+ acceptance.setAcceptanceMoney(acceptance.getAcceptanceMoney().add(acceptanceMoney));
|
|
|
+ acceptance.setUnacceptanceMoney(acceptance.getIncomeMoney().subtract(acceptance.getAcceptanceMoney()));
|
|
|
+ if (acceptance.getUnacceptanceMoney().compareTo(BigDecimal.ZERO) <= 0){
|
|
|
+ acceptance.setAcceptanceStatus(1);//已认款
|
|
|
+ }
|
|
|
+ //保存关联关系
|
|
|
+ iTopOrderAcceptanceRelService.saveBatch(acceptanceRels);
|
|
|
+ return updateById(acceptance);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TopOldOrderVo> getAcceptanceOrderRelList(Long acceptanceId) {
|
|
|
+ TopOrderAcceptance acceptance = getById(acceptanceId);
|
|
|
+ if (ObjectUtils.isNull(acceptance)){
|
|
|
+ throw new CustomException("认款记录数据错误!");
|
|
|
+ }
|
|
|
+ List<TopOrderAcceptanceRel> list = iTopOrderAcceptanceRelService
|
|
|
+ .list(new LambdaQueryWrapper<TopOrderAcceptanceRel>()
|
|
|
+ .eq(TopOrderAcceptanceRel::getAcceptanceId, acceptanceId)
|
|
|
+ .eq(TopOrderAcceptanceRel::getStatus, 1));
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ TopAcceptanceOrderBo orderBo = new TopAcceptanceOrderBo();
|
|
|
+ orderBo.setOrderSnList(list.stream().map(TopOrderAcceptanceRel::getOrderSn).collect(Collectors.toList()));
|
|
|
+ List<TopOldOrderVo> acceptanceOrderList = baseMapper.getAcceptanceOrderList(orderBo);
|
|
|
+ acceptanceOrderList.forEach(item -> {
|
|
|
+ List<String> businessNames = iTopOldOrderService.queryOrderBusinessName(item.getOrderSn());
|
|
|
+ item.setBusinessNames(businessNames);
|
|
|
+ if (ObjectUtils.isNotNull(item.getOrderReceived()) && ObjectUtils.isNotNull(item.getOrderRefunded())) {
|
|
|
+ item.setOrderPractical(item.getOrderReceived().subtract(item.getOrderRefunded()));
|
|
|
+ }
|
|
|
+ for (TopOrderAcceptanceRel acceptanceRel : list) {
|
|
|
+ if (item.getOrderSn().equals(acceptanceRel.getOrderSn())){
|
|
|
+ item.setAcceptanceMoney(acceptanceRel.getAcceptanceMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return acceptanceOrderList;
|
|
|
+ }
|
|
|
+}
|