|
@@ -0,0 +1,156 @@
|
|
|
|
+package com.dayou.service.impl;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
+import com.dayou.entity.FinanceFine;
|
|
|
|
+import com.dayou.mapper.FinanceFineMapper;
|
|
|
|
+import com.dayou.service.IFinanceFineService;
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import com.dayou.vo.CompileFineAssetsOrder;
|
|
|
|
+import com.dayou.vo.CompileFineMajorOrder;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Objects;
|
|
|
|
+
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * <p>
|
|
|
|
+ * 超期未收款罚款表 服务实现类
|
|
|
|
+ * </p>
|
|
|
|
+ *
|
|
|
|
+ * @author GouGengquan
|
|
|
|
+ * @since 2025-04-07
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, FinanceFine> implements IFinanceFineService {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private FinanceFineMapper financeFineMapper;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
|
+ public Page<FinanceFine> selectPage(Page page, FinanceFine financeFine) {
|
|
|
|
+ return this.page(page, new QueryWrapper<FinanceFine>(financeFine));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public FinanceFine detail(Long id) {
|
|
|
|
+ return this.getById(id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Boolean add(FinanceFine financeFine) {
|
|
|
|
+ return this.save(financeFine);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Boolean update(FinanceFine financeFine) {
|
|
|
|
+ return this.updateById(financeFine);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Boolean delete(Long id) {
|
|
|
|
+ //逻辑删除
|
|
|
|
+ return this.removeById(id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 统计财务收款预警中超过90天的订单或产品新增到罚款表
|
|
|
|
+ *
|
|
|
|
+ * @return Boolean
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public Boolean compileFineOrder() {
|
|
|
|
+ List<CompileFineAssetsOrder> compileFineAssetsOrderList = financeFineMapper.getAssetsOrder();
|
|
|
|
+ List<Long> compileFinePersonalOrderList = financeFineMapper.getPersonalOrder();
|
|
|
|
+ List<CompileFineMajorOrder> compileFineMajorOrderList = financeFineMapper.getMajorOrder();
|
|
|
|
+
|
|
|
|
+ List<FinanceFine> financeFineList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ // 处理资产的信息以插入到罚款表
|
|
|
|
+ for (CompileFineAssetsOrder assetsOrder : compileFineAssetsOrderList) {
|
|
|
|
+ // 获取开票金额的5%作为罚款金额
|
|
|
|
+ BigDecimal fineAmount = financeFineMapper.getInvoiceByFundInfo(assetsOrder.getOrderFundId(), assetsOrder.getProductionFundId());
|
|
|
|
+ // 判断罚款金额是否为null(为null说明没开票,通过其他信息设置罚款金额)
|
|
|
|
+ if (ObjectUtil.isNull(fineAmount)) {
|
|
|
|
+ // 判断应收款是否不为null且不等于1(乱填)
|
|
|
|
+ if (ObjectUtil.isNotNull(assetsOrder.getProductionShouldAmount()) && !Objects.equals(assetsOrder.getProductionShouldAmount(), BigDecimal.valueOf(1))) {
|
|
|
|
+ // 填了应收款,按应收款的5%
|
|
|
|
+ fineAmount = assetsOrder.getProductionShouldAmount().multiply(BigDecimal.valueOf(0.05));
|
|
|
|
+ } else {
|
|
|
|
+ // 没有应收款的话,罚款金额就是 standard_amount * 30% * 5%
|
|
|
|
+ fineAmount = assetsOrder.getStandardAmount().multiply(BigDecimal.valueOf(0.3)).multiply(BigDecimal.valueOf(0.05));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 最低罚款:200元,不⾜200元,按200元罚款 最⾼罚款⾦额:5000元,超出5000元,按5000元罚款
|
|
|
|
+ // 判断罚款金额是否大于 200 小于5000
|
|
|
|
+ // 返回值大于0:第一个BigDecimal大于第二个
|
|
|
|
+ if (fineAmount.compareTo(BigDecimal.valueOf(200)) < 0) { // 金额小于200
|
|
|
|
+ fineAmount = BigDecimal.valueOf(200);
|
|
|
|
+ } else if (fineAmount.compareTo(BigDecimal.valueOf(5000)) > 0) { // 金额大于5000
|
|
|
|
+ fineAmount = BigDecimal.valueOf(5000);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 设置罚款信息
|
|
|
|
+ FinanceFine financeFine = new FinanceFine();
|
|
|
|
+ financeFine.setOrderFundId(assetsOrder.getOrderFundId());
|
|
|
|
+ financeFine.setProductionFundId(assetsOrder.getProductionFundId());
|
|
|
|
+ financeFine.setFineAmount(fineAmount);
|
|
|
|
+ financeFineList.add(financeFine);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 处理个贷的信息以插入到罚款表
|
|
|
|
+ for (Long orderFundId : compileFinePersonalOrderList) {
|
|
|
|
+ // 设置罚款信息
|
|
|
|
+ FinanceFine financeFine = new FinanceFine();
|
|
|
|
+ financeFine.setOrderFundId(orderFundId);
|
|
|
|
+ financeFine.setFineAmount(BigDecimal.valueOf(50));
|
|
|
|
+ financeFineList.add(financeFine);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 处理大中型的信息以插入到罚款表
|
|
|
|
+ for (CompileFineMajorOrder majorOrder : compileFineMajorOrderList) {
|
|
|
|
+ // 获取开票金额的5%作为罚款金额
|
|
|
|
+ BigDecimal fineAmount = financeFineMapper.getInvoiceByFundInfo(majorOrder.getOrderFundId(), majorOrder.getProductionFundId());
|
|
|
|
+ // 判断罚款金额是否为null(为null说明没开票,通过其他信息设置罚款金额)
|
|
|
|
+ if (ObjectUtil.isNull(fineAmount)) {
|
|
|
|
+ // 判断应收款是否不为null且不等于1(乱填)
|
|
|
|
+ if (ObjectUtil.isNotNull(majorOrder.getProductionShouldAmount()) && !Objects.equals(majorOrder.getProductionShouldAmount(), BigDecimal.valueOf(1))) {
|
|
|
|
+ // 填了应收款,按应收款的5%
|
|
|
|
+ fineAmount = majorOrder.getProductionShouldAmount().multiply(BigDecimal.valueOf(0.05));
|
|
|
|
+ } else {
|
|
|
|
+ // 没有应收款的话,罚款金额就是 standard_amount * 30% * 5%
|
|
|
|
+ fineAmount = majorOrder.getStandardAmount().multiply(BigDecimal.valueOf(0.3)).multiply(BigDecimal.valueOf(0.05));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 最低罚款:200元,不⾜200元,按200元罚款 最⾼罚款⾦额:5000元,超出5000元,按5000元罚款
|
|
|
|
+ // 判断罚款金额是否大于 200 小于5000
|
|
|
|
+ // 返回值大于0:第一个BigDecimal大于第二个
|
|
|
|
+ if (fineAmount.compareTo(BigDecimal.valueOf(200)) < 0) { // 金额小于200
|
|
|
|
+ fineAmount = BigDecimal.valueOf(200);
|
|
|
|
+ } else if (fineAmount.compareTo(BigDecimal.valueOf(5000)) > 0) { // 金额大于5000
|
|
|
|
+ fineAmount = BigDecimal.valueOf(5000);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 设置罚款信息
|
|
|
|
+ FinanceFine financeFine = new FinanceFine();
|
|
|
|
+ financeFine.setOrderFundId(majorOrder.getOrderFundId());
|
|
|
|
+ financeFine.setProductionFundId(majorOrder.getProductionFundId());
|
|
|
|
+ financeFine.setFineAmount(fineAmount);
|
|
|
|
+ financeFineList.add(financeFine);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return this.saveBatch(financeFineList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|