Просмотр исходного кода

费用审核-生成相关费用信息

guoweisong 2 лет назад
Родитель
Сommit
8f9eba6a9d

+ 1 - 0
src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java

@@ -49,6 +49,7 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
     public EsmUserCountVO queryUserCount(TeamUserQryVO record);
 
     public List<EsmUserReferrer> queryList(String affiliation);
+    public List<String>  getUpUser(String userId,List<String> list);
 }
 
 

+ 2 - 2
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -120,8 +120,8 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
         return remove(queryWrapper);
     }
 
-
-    List<String>  getUpUser(String userId,List<String> list){
+    @Override
+    public List<String>  getUpUser(String userId,List<String> list){
 
         EsmUserReferrer esmUserReferrer=this.getById(userId);
         list.add(esmUserReferrer.getId());

+ 13 - 27
src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java

@@ -1,55 +1,40 @@
 package com.ydtech.modules.fnc.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.exception.SystemException;
 import com.ydtech.modules.base.controller.BaseController;
-import com.ydtech.modules.fee.service.FeeRuleSchemeService;
-import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
-import com.ydtech.modules.order.components.InsOrdersComponents;
-import com.ydtech.modules.order.entity.BasePageResult;
-import com.ydtech.modules.order.entity.InsAccidentalDriving;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.vo.*;
-import com.ydtech.modules.order.service.InsAccidentalDrivingService;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
-import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.util.ObjectUtils;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Api(tags = "财务-车险结算")
 @RequestMapping("/fnc/carSettle")
 @RestController
 public class CarSettleController extends BaseController {
-
     private final InsOrdersService insOrdersService;
 
     private final InsAreaCompanyService insAreaCompanyService;
 
     private final InsFeeAuditService insFeeAuditService;
 
+
+
     public CarSettleController(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsFeeAuditService insFeeAuditService) {
+
         this.insAreaCompanyService = insAreaCompanyService;
         this.insOrdersService = insOrdersService;
         this.insFeeAuditService = insFeeAuditService;
+
     }
 
     /**
@@ -100,17 +85,18 @@ public class CarSettleController extends BaseController {
                 .eq(StringUtils.isNotEmpty(orderNo),"orderno",orderNo)
                 .eq("orderstatus","3").list();//3已承保
         if(areaList!=null && areaList.size()>0){
-            InsFeeAudit insFeeAudit=new InsFeeAudit();
-            insFeeAudit.setOrderno(orderNo);
-            insFeeAudit.setInsOrderNo(areaList.get(0).getId());
-            insFeeAudit.setAuditstatus("1");
-            insFeeAudit.setAudittime(LocalDateTime.now());
-            insFeeAudit.setAudituser(getUserId());
-            insFeeAuditService.save(insFeeAudit);
+            try{
+                insFeeAuditService.feeAudit( orderNo, areaList.get(0).getId());
+            }catch (Exception e){
+                e.printStackTrace();
+                return HttpResult.error("系统异常");
+            }
+
             return HttpResult.ok();
         }else{
             return HttpResult.error("订单号有误-未承保");
         }
 
     }
+
 }

+ 2 - 0
src/main/java/com/ydtech/modules/fnc/service/InsFeeAuditService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface InsFeeAuditService extends IService<InsFeeAudit> {
 
+    public void feeAudit(String orderNo,String insOrderNo) throws Exception;
+
 }

+ 224 - 0
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -1,10 +1,35 @@
 package com.ydtech.modules.fnc.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.ins.model.InsCommission;
+import com.ydtech.modules.ins.model.InsCompanyFee;
+import com.ydtech.modules.ins.model.InsDeptFee;
+import com.ydtech.modules.ins.service.InsCommissionService;
+import com.ydtech.modules.ins.service.InsCompanyFeeService;
+import com.ydtech.modules.ins.service.InsDeptFeeService;
+import com.ydtech.modules.order.dao.InsOrdersMapper;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsFeeOrderService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.utils.DateUtil;
 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.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +42,203 @@ import org.springframework.stereotype.Service;
 @Service
 public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> implements InsFeeAuditService {
 
+    private final InsOrdersMapper insOrdersMapper;
+
+    private final InsFeeOrderService insFeeOrderService;
+
+    private final InsAreaCompanyService insAreaCompanyService;
+
+    private final InsDeptFeeService insDeptFeeService;
+    private final InsCommissionService insCommissionService;
+    private final InsCompanyFeeService insCompanyFeeService;
+    private final EsmUserReferrerService esmUserReferrerService;
+
+    private final SysUserService sysUserService;
+
+
+    public InsFeeAuditServiceImpl(InsAreaCompanyService insAreaCompanyService, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService) {
+        this.insAreaCompanyService = insAreaCompanyService;
+        this.insOrdersMapper = insOrdersMapper;
+        this.insFeeOrderService=insFeeOrderService;
+        this.insDeptFeeService=insDeptFeeService;
+        this.esmUserReferrerService=esmUserReferrerService;
+        this.sysUserService=sysUserService;
+        this.insCommissionService=insCommissionService;
+        this.insCompanyFeeService=insCompanyFeeService;
+    }
+    @Override
+    @Transactional
+    public void feeAudit(String orderNo, String insOrderNo) throws Exception{
+        InsFeeAudit insFeeAudit=new InsFeeAudit();
+        insFeeAudit.setOrderno(orderNo);
+        insFeeAudit.setInsOrderNo(insOrderNo);
+        insFeeAudit.setAuditstatus("1");
+        insFeeAudit.setAudittime(LocalDateTime.now());
+        insFeeAudit.setAudituser(StpUtil.getLoginId().toString());
+        this.save(insFeeAudit);
+
+        InsOrders order=insOrdersMapper.selectById(orderNo);
+        InsFeeOrder insFeeOrder=insFeeOrderService.getByInsOrderNo(insFeeAudit.getInsOrderNo());
+        //生成机构费用
+        gene_deptfee( order, insFeeOrder);
+        //生成分销费用
+        saveRetail(order,insFeeOrder);
+        //个代费用生成
+        saveInsCompanyFee(order,insFeeOrder);
+    }
+
+    /**
+     * 生成机构费用
+     * @param order
+     * @param insFeeOrder
+     * @throws Exception
+     */
+    private void gene_deptfee( InsOrders order, InsFeeOrder insFeeOrder) throws Exception{
+        InsDeptFee deptFee = new InsDeptFee();
+        deptFee.setOrderno(order.getOrderno());
+        deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
+        deptFee.setAgreeid(insFeeOrder.getAgreementId());
+        deptFee.setAuditstatus("1");
+        deptFee.setSettlestatus("0");
+        if (insFeeOrder.getFirstDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(order.getDeptid().substring(0, 2));  //99140302M01D01
+            deptFee.setKeeprate(insFeeOrder.getFirstDeptProportion().doubleValue() * 0.01);
+            deptFee.setKeepamount(insFeeOrder.getFirstDeptPremiums().doubleValue());
+            deptFee.setComlevel("一级");
+            insDeptFeeService.insert(deptFee);
+        } else if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(order.getDeptid().substring(0, 4));  //99140302M01D01
+            deptFee.setKeeprate(insFeeOrder.getSecondDeptProportion().doubleValue() * 0.01);
+            deptFee.setKeepamount(insFeeOrder.getSecondDeptPremiums().doubleValue());
+            deptFee.setComlevel("二级");
+            insDeptFeeService.insert(deptFee);
+        }else if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(order.getDeptid().substring(0, 6));  //99140302M01D01
+            deptFee.setKeeprate(insFeeOrder.getThirdDeptProportion().doubleValue() * 0.01);
+            deptFee.setKeepamount(insFeeOrder.getThirdDeptPremiums().doubleValue());
+            deptFee.setComlevel("三级");
+            insDeptFeeService.insert(deptFee);
+        }else if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(order.getDeptid().substring(0, 8));  //99140302M01D01
+            deptFee.setKeeprate(insFeeOrder.getForthDeptProportion().doubleValue() * 0.01);
+            deptFee.setKeepamount(insFeeOrder.getForthDeptPremiums().doubleValue());
+            deptFee.setComlevel("四级");
+            insDeptFeeService.insert(deptFee);
+        }else if (insFeeOrder.getFifthDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(order.getDeptid().substring(0, 11));  //99140302M01D01
+            deptFee.setKeeprate(insFeeOrder.getFifthDeptProportion().doubleValue() * 0.01);
+            deptFee.setKeepamount(insFeeOrder.getFifthDeptPremiums().doubleValue());
+            deptFee.setComlevel("五级");
+            insDeptFeeService.insert(deptFee);
+        }
+    }
+
+    /**
+     * 三级分销费用保存
+     *
+     * @param order
+     * @return
+     */
+    public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder) throws Exception{
+        List<String> userlist=new ArrayList<>();
+        esmUserReferrerService.getUpUser(order.getUserid(),userlist);
+        //userlist:包括本人在内向上所有人
+        if(userlist.size()-1>0){
+            if(userlist.size()-1>=1
+                    &&insFeeOrder.getThirdRetailPremiums().doubleValue()>0)
+            {//三级分销
+                SysUser user=sysUserService.getById(userlist.get(1));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(order.getOrderno());
+                commission.setQuoteno(insFeeOrder.getInsOrderNo());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()* 0.01);
+                commission.setCommissionamount(insFeeOrder.getThirdRetailPremiums().doubleValue());
+                commission.setLevel("3");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+                insCommissionService.insert(commission);
+            }
+            if(userlist.size()-1>=2
+                    &&insFeeOrder.getSecondRetailPremiums().doubleValue()>0)
+            {//二级分销
+                SysUser user=sysUserService.getById(userlist.get(2));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(order.getOrderno());
+                commission.setQuoteno(insFeeOrder.getInsOrderNo());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()* 0.01);
+                commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
+                commission.setLevel("2");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+
+                insCommissionService.insert(commission);
+            }
+            if(userlist.size()-1>=3
+                    &&insFeeOrder.getFirstRetailPremiums().doubleValue()>0)
+            {//一级分销
+                SysUser user=sysUserService.getById(userlist.get(3));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(order.getOrderno());
+                commission.setQuoteno(insFeeOrder.getInsOrderNo());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()* 0.01);
+                commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
+                commission.setLevel("1");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+
+                insCommissionService.insert(commission);
+            }
+        }
+    }
+
+    /**
+     * 生成个代费用
+     * @param order
+     * @param insFeeOrder
+     * @throws Exception
+     */
+    public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder) throws Exception {
+        InsAreaCompany insAreaCompany=insAreaCompanyService.getById(insFeeOrder.getInsOrderNo());
+
+        InsCompanyFee insCompanyFee = new InsCompanyFee();
+        insCompanyFee.setOrderno(order.getOrderno());
+        BigDecimal dept_rate=insFeeOrder.getFirstDeptProportion()
+                .add(insFeeOrder.getSecondDeptProportion())
+                .add(insFeeOrder.getThirdDeptProportion())
+                .add(insFeeOrder.getForthDeptProportion())
+                .add(insFeeOrder.getFifthDeptProportion());
+        BigDecimal retail_rate=insFeeOrder.getFirstRetailProportion()
+                .add(insFeeOrder.getSecondRetailProportion())
+                .add(insFeeOrder.getThirdRetailProportion());
+        //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
+        insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
+        //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
+        insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
+        insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
+        insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
+        insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
+        insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
+        insCompanyFee.setFrameNo(order.getFrameno());
+        insCompanyFee.setLicenseNo(order.getLicenseno());
+        insCompanyFee.setInscompany(insAreaCompany.getCompanyId());
+        insCompanyFee.setAgreeid(insFeeOrder.getAgreementId());
+        insCompanyFee.setUserid(order.getUserid());
+        insCompanyFee.setUsername(order.getUsername());
+        insCompanyFee.setDeptid(order.getDeptid());
+        insCompanyFee.setDeptname(order.getDeptname());
+        insCompanyFee.setSettletype("B");
+        insCompanyFee.setSettlestatus("0");
+        insCompanyFee.setCreatetime(DateUtil.formatFullTime(insAreaCompany.getAudittime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
+        //保存业务员费用
+        insCompanyFeeService.insert(insCompanyFee);
+    }
 }