瀏覽代碼

Merge remote-tracking branch 'origin/test' into test

hxl13994548489 2 年之前
父節點
當前提交
50fa5fddea

+ 43 - 0
src/main/java/com/ydtech/constants/enums/dict/BusinessPropertyEnum.java

@@ -0,0 +1,43 @@
+package com.ydtech.constants.enums.dict;
+
+import com.ydtech.aop.request.DictEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 收支业务属性
+ */
+@Getter
+@AllArgsConstructor
+@DictEnum(key = "property", desc = "收支金钱属性")
+public enum BusinessPropertyEnum implements IBaseEnum{
+
+
+
+    PS1("1","手续费佣金",1,0),
+    PS2("2","非跟单佣金",2,0),
+    PS3("3","推广佣金",3,0),
+    PS4("4","手续费+跟单",3,0),
+    PS5("5","退款",3,0),
+    PS6("6","提现",3,0);
+
+
+    // 编号
+    private final String code;
+    // 说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+
+
+    public static String getDescByCode(String code){
+        for (BusinessPropertyEnum segment : BusinessPropertyEnum.values()) {
+            if (segment.getCode().equals(code)) {
+                return segment.getDesc();
+            }
+        }
+        return "";
+    }
+}

+ 8 - 10
src/main/java/com/ydtech/constants/enums/dict/BusinessSegmentsEnum.java

@@ -8,13 +8,11 @@ import lombok.Getter;
 @AllArgsConstructor
 @DictEnum(key = "businessSegmentsType", desc = "预收业务板块")
 public enum BusinessSegmentsEnum implements IBaseEnum {
-  BT001("1", "车险", 1, 0);
-  private String code;
-  private String desc;
-  //排序
-  private Integer sort;
-  //状态  0 启用  1 不启用
-  private Integer status;
-
-
- }
+    BT001("1", "车险", 1, 0);
+    private String code;
+    private String desc;
+    //排序
+    private Integer sort;
+    //状态  0 启用  1 不启用
+    private Integer status;
+}

+ 8 - 0
src/main/java/com/ydtech/constants/enums/dict/BusinessSegmentsSZEnum.java

@@ -18,5 +18,13 @@ public enum BusinessSegmentsSZEnum implements IBaseEnum {
   //状态  0 启用  1 不启用
   private Integer status;
 
+  public static String getDescByCode(String code){
+    for (BusinessSegmentsEnum segment : BusinessSegmentsEnum.values()) {
+      if (segment.getCode().equals(code)) {
+        return segment.getDesc();
+      }
+    }
+    return "";
+  }
 
  }

+ 75 - 0
src/main/java/com/ydtech/modules/order/controller/ExcelExportController.java

@@ -0,0 +1,75 @@
+package com.ydtech.modules.order.controller;
+
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.ExcelExportService;
+import com.ydtech.utils.ExcelUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.apache.xmlbeans.ResourceLoader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.InputStream;
+import java.util.List;
+
+@Api(tags = "excel导出表 API")
+@RestController
+@RequestMapping("/api/excelExport")
+@RequiredArgsConstructor
+public class ExcelExportController extends BaseController {
+
+    @Autowired
+    private ExcelExportService excelExportService;
+
+    @Value("${upload.file.path}")
+    private String uploadPath;
+
+    private String EXCEL_PATH = "excel//";
+
+    private String UPLOAD_PATH = "upload//excel//";
+
+
+    @PostMapping("/carBusinessDetailExcelExport")
+    @ApiOperation("车险业务明细表导出")
+    public HttpResult<QuoteRespVo> carBusinessDetail(@RequestBody CarBusinessDetailQueryVo carBusinessDetailQueryVo) {
+        List<CarBusinessDetailVo> carBusinessDetailList = excelExportService.getCarBusinessDetailList(getUserId(), carBusinessDetailQueryVo);
+        ExcelUtils<CarBusinessDetailVo> excelUtils = new ExcelUtils<CarBusinessDetailVo>();
+        //读取模版文件
+        String templatePath = ResourceLoader.class.getClassLoader().getResource("template/car_business_detail.xlsx").getPath();
+        String fileName = "车险业务明细" + System.currentTimeMillis() + ".xlsx";
+        String saveFilePath = uploadPath+"//" + EXCEL_PATH + fileName;
+        String resultPath = UPLOAD_PATH + fileName;
+        String sheetName = "车险业务明细表";
+        if(excelUtils.writeExcel(templatePath,saveFilePath,sheetName, CarBusinessDetailVo.class,carBusinessDetailList)){
+            return HttpResult.ok(resultPath);
+        }else{
+            return HttpResult.error("导出车险业务明细表失败");
+        }
+    }
+
+    @PostMapping("/revenueExpenditureDetailExcelExport")
+    @ApiModelProperty("收支明细表导出")
+    public HttpResult<QuoteRespVo> revenueExpenditureDetailExcelExport(@RequestBody CarBusinessDetailQueryVo carBusinessDetailQueryVo) {
+        List<RevenueExpenditureDetailVo> revenueExpenditureDetailList = excelExportService.getRevenueExpenditureDetailList(getUserId(), carBusinessDetailQueryVo);
+        ExcelUtils<RevenueExpenditureDetailVo> excelUtils = new ExcelUtils<RevenueExpenditureDetailVo>();
+        //读取模版文件
+        String templatePath = ResourceLoader.class.getClassLoader().getResource("template/revenue_expenditure_detail.xlsx").getPath();
+        String fileName = "收支明细表" + System.currentTimeMillis() + ".xlsx";
+        String saveFilePath = uploadPath+"//" + EXCEL_PATH + fileName;
+        String resultPath = UPLOAD_PATH + fileName;
+        String sheetName = "收支明细表";
+        if(excelUtils.writeExcel(templatePath,saveFilePath,sheetName, RevenueExpenditureDetailVo.class,revenueExpenditureDetailList)){
+            return HttpResult.ok(resultPath);
+        }else{
+            return HttpResult.error("导出收支明细表失败");
+        }
+    }
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java

@@ -90,4 +90,20 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
     int getExpirationInsureCount(@Param("userId") String userId,@Param("startDate") String startTime,@Param("endDate") String endTime,@Param("isJq")Integer isJq,@Param("param") String param);
 
     Page<OrderExpirationVo> getExpirationInsure(@Param("page") Page page,@Param("userId") String userId,@Param("startDate") String startTime,@Param("endDate") String endTime,@Param("isJq")Integer isJq,@Param("param") String param);
+
+
+    /**
+     * 获取车险业务明细表
+     * @return
+     */
+    List<CarBusinessDetailVo> getCarBusinessDetailList(@Param("userId") String userId,@Param("param") CarBusinessDetailQueryVo carBusinessDetailQueryVo);
+
+    /**
+     * 获取收支明细表
+     * @param userId
+     * @param carBusinessDetailQueryVo
+     * @return
+     */
+    List<RevenueExpenditureDetailVo> getRevenueExpenditureDetailList(@Param("userId") String userId,@Param("param") CarBusinessDetailQueryVo carBusinessDetailQueryVo);
+
 }

+ 30 - 0
src/main/java/com/ydtech/modules/order/entity/vo/CarBusinessDetailQueryVo.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.order.entity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "车辆业务明细查询")
+public class CarBusinessDetailQueryVo {
+
+    @ApiModelProperty("签单日期起始时间")
+    private String signStartDate;
+
+    @ApiModelProperty("签单日期终止时间")
+    private String signEndDate;
+
+    @ApiModelProperty("车牌号")
+    private String licenseNo;
+
+    @ApiModelProperty("被保险人")
+    private String applyName;
+
+    @ApiModelProperty("保险公司")
+    private String company;
+
+    @ApiModelProperty("险种")
+    private String productId;
+
+
+}

+ 75 - 0
src/main/java/com/ydtech/modules/order/entity/vo/CarBusinessDetailVo.java

@@ -0,0 +1,75 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class CarBusinessDetailVo {
+
+    @ApiModelProperty("业务员名称")
+    @ExcelProperty("业务员名称")
+    private String username;
+
+    @ApiModelProperty("签单日期")
+    @ExcelProperty("签单日期")
+    private String signDate;
+
+    @ApiModelProperty("车牌号")
+    @ExcelProperty("车牌号")
+    private String licenseNo;
+
+    @ApiModelProperty("被保险人名称")
+    @ExcelProperty("被保险人名称")
+    private String applyName;
+
+    @ApiModelProperty("保险公司")
+    @ExcelProperty("保险公司")
+    private String inscompany;
+
+
+    @ApiModelProperty("险种")
+    @ExcelProperty("险种")
+    private String product;
+
+    @ApiModelProperty("交强保费")
+    @ExcelProperty("交强保费")
+    private String jqpremium;
+
+    @ApiModelProperty("商业保费")
+    @ExcelProperty("商业保费")
+    private String sypremium;
+
+    @ApiModelProperty("非车保费")
+    @ExcelProperty("非车保费")
+    private String jypremium;
+
+    @ApiModelProperty("车船税")
+    @ExcelProperty("车船税")
+    private String taxamount;
+
+    @ApiModelProperty("交强比例")
+    @ExcelProperty("交强比例")
+    private String jqExportProportion;
+
+    @ApiModelProperty("商业比例")
+    @ExcelProperty("商业比例")
+    private String syExportProportion;
+
+    @ApiModelProperty("非车比例")
+    @ExcelProperty("非车比例")
+    private String noExportProportion;
+
+    @ApiModelProperty("结算金额")
+    @ExcelProperty("结算金额")
+    private String settlement;
+
+    @ApiModelProperty("审核状态")
+    @ExcelProperty("审核状态")
+    private String auditType;
+
+    @ApiModelProperty("审核日期")
+    @ExcelProperty("审核日期")
+    private String auditDate;
+
+}

+ 35 - 0
src/main/java/com/ydtech/modules/order/entity/vo/RevenueExpenditureDetailVo.java

@@ -0,0 +1,35 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 收支明细vo
+ */
+@Data
+public class RevenueExpenditureDetailVo {
+    @ApiModelProperty("交易时间")
+    @ExcelProperty("交易时间")
+    private String createTime;
+
+    @ApiModelProperty("车牌号")
+    @ExcelProperty("车牌号")
+    private String licenseNo;
+
+    @ApiModelProperty("交易金额")
+    @ExcelProperty("交易金额")
+    private String amount;
+
+    @ApiModelProperty("业务板块")
+    @ExcelProperty("业务板块")
+    private String businessEegmentsType;
+
+    @ApiModelProperty("收支类型")
+    @ExcelProperty("收支类型")
+    private String documentary;
+
+    @ApiModelProperty("交易类型")
+    @ExcelProperty("交易类型")
+    private String property;
+}

+ 26 - 0
src/main/java/com/ydtech/modules/order/service/ExcelExportService.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.order.service;
+
+import com.ydtech.modules.order.entity.vo.CarBusinessDetailQueryVo;
+import com.ydtech.modules.order.entity.vo.CarBusinessDetailVo;
+import com.ydtech.modules.order.entity.vo.RevenueExpenditureDetailVo;
+
+import java.util.List;
+
+public interface ExcelExportService {
+
+    /**
+     * 获取车险业务明细
+     * @param userId
+     * @param carBusinessDetailQueryVo
+     * @return
+     */
+    List<CarBusinessDetailVo> getCarBusinessDetailList(String userId, CarBusinessDetailQueryVo carBusinessDetailQueryVo);
+
+    /**
+     * 获取收支明细表
+     * @param userId
+     * @param carBusinessDetailQueryVo
+     * @return
+     */
+    List<RevenueExpenditureDetailVo> getRevenueExpenditureDetailList(String userId,CarBusinessDetailQueryVo carBusinessDetailQueryVo);
+}

+ 63 - 0
src/main/java/com/ydtech/modules/order/service/impl/ExcelExportServiceImpl.java

@@ -0,0 +1,63 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.ydtech.constants.enums.dict.BusinessPropertyEnum;
+import com.ydtech.constants.enums.dict.BusinessSegmentsEnum;
+import com.ydtech.constants.enums.dict.BusinessSegmentsSZEnum;
+import com.ydtech.modules.order.dao.InsOrdersMapper;
+import com.ydtech.modules.order.entity.vo.CarBusinessDetailQueryVo;
+import com.ydtech.modules.order.entity.vo.CarBusinessDetailVo;
+import com.ydtech.modules.order.entity.vo.RevenueExpenditureDetailVo;
+import com.ydtech.modules.order.service.ExcelExportService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+@Service
+public class ExcelExportServiceImpl implements ExcelExportService {
+
+    @Autowired
+    private InsOrdersMapper insOrdersMapper;
+
+    /**
+     * 获取车险业务明细
+     * @param userId
+     * @param carBusinessDetailQueryVo
+     * @return
+     */
+    @Override
+    public List<CarBusinessDetailVo> getCarBusinessDetailList(String userId, CarBusinessDetailQueryVo carBusinessDetailQueryVo) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime halfYearAgo = now.minusMonths(6);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        carBusinessDetailQueryVo.setSignStartDate(halfYearAgo.format(formatter));
+        carBusinessDetailQueryVo.setSignEndDate(now.format(formatter));
+
+        List<CarBusinessDetailVo> carBusinessDetailList = insOrdersMapper.getCarBusinessDetailList(userId, carBusinessDetailQueryVo);
+        return carBusinessDetailList;
+    }
+
+    @Override
+    public List<RevenueExpenditureDetailVo> getRevenueExpenditureDetailList(String userId, CarBusinessDetailQueryVo carBusinessDetailQueryVo) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime halfYearAgo = now.minusMonths(6);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        carBusinessDetailQueryVo.setSignStartDate(halfYearAgo.format(formatter));
+        carBusinessDetailQueryVo.setSignEndDate(now.format(formatter));
+        List<RevenueExpenditureDetailVo> revenueExpenditureDetailList = insOrdersMapper.getRevenueExpenditureDetailList(userId, carBusinessDetailQueryVo);
+        revenueExpenditureDetailList.forEach(item->{
+            item.setBusinessEegmentsType(BusinessSegmentsSZEnum.getDescByCode(item.getBusinessEegmentsType()));
+            item.setProperty(BusinessPropertyEnum.getDescByCode(item.getProperty()));
+            if(item.getDocumentary().equals("1")){
+                item.setDocumentary("提现");
+            }else if(item.getDocumentary().equals("2")){
+                item.setDocumentary("收入");
+            }
+        });
+        return revenueExpenditureDetailList;
+    }
+
+}

+ 89 - 0
src/main/java/com/ydtech/modules/order/utils/excel/CarBusinessDetailDataListener.java

@@ -0,0 +1,89 @@
+package com.ydtech.modules.order.utils.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.alibaba.excel.util.ListUtils;
+import com.ydtech.modules.inv.model.excel.InvSourceExcel;
+import com.ydtech.modules.order.entity.vo.CarBusinessDetailVo;
+
+import java.lang.reflect.Field;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+public class CarBusinessDetailDataListener implements ReadListener<CarBusinessDetailVo> {
+
+    /**
+     * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
+     */
+    private static final int BATCH_COUNT = 100;
+    /**
+     * 缓存的数据
+     */
+    private List<CarBusinessDetailVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+
+
+    public CarBusinessDetailDataListener() {
+        // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
+
+    }
+
+    public CarBusinessDetailDataListener(List<CarBusinessDetailVo> carBusinessDetailVos) {
+        carBusinessDetailVos.addAll(cachedDataList);
+    }
+
+
+    /**
+     * 这个每一条数据解析都会来调用
+     *
+     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
+     * @param context
+     */
+    @Override
+    public void invoke(CarBusinessDetailVo data, AnalysisContext context) {
+        Field[] fields = data.getClass().getDeclaredFields();
+        for(Field field:fields){
+            field.setAccessible(true);
+            try {
+                    //处理日期格式
+                    if("clearingTime".equals(field.getName()) || "signingTime".equals(field.getName())){
+                        if("0".equals(field.get(data)) || field.get(data) == null){
+                            field.set(data,"0");
+                        }else{
+                            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                            DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy年MM月d日");
+                            String dateString = field.get(data).toString().replaceAll("(\\D)(\\d)(\\D)", "$10$2$3");
+                            LocalDate o = LocalDate.parse(dateString,formatter1);
+                            field.set(data,formatter.format(o));
+                        }
+                    }else{
+                        if(field.get(data) == null){
+                            field.set(data,"0");
+                        }else{
+                            field.set(data,field.get(data).toString());
+                        }
+                    }
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+        cachedDataList.add(data);
+        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
+        if (cachedDataList.size() >= BATCH_COUNT) {
+            // 存储完成清理 list
+            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+        }
+    }
+
+    /**
+     * 所有数据解析完成了 都会来调用
+     *
+     * @param context
+     */
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
+        System.out.printf(context.toString());
+    }
+
+}

+ 29 - 0
src/main/java/com/ydtech/utils/ExcelUtils.java

@@ -0,0 +1,29 @@
+package com.ydtech.utils;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.metadata.WriteSheet;
+
+import java.util.List;
+
+/**
+ * excel操作类  使用 easyexcel类库
+ */
+public class ExcelUtils<T> {
+
+    /**
+     * 写入到Xls文件中
+     * @param templatePath  模板路径
+     * @param saveFileName  保存的文件名称
+     * @param sheetName     sheet名称
+     * @param cls           写入得数据实体类
+     * @param data          数据
+     */
+    public boolean writeExcel(String templatePath,String saveFileName, String sheetName, Class cls, List<T> data){
+        try {
+            EasyExcel.write(saveFileName, cls).withTemplate(templatePath).sheet(sheetName).doWrite(data);
+            return true;
+        }catch(Exception e){
+            return false;
+        }
+    }
+}

+ 53 - 0
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -1306,4 +1306,57 @@
         ORDER BY
             difference DESC
     </select>
+
+
+    <select id="getCarBusinessDetailList" resultType="com.ydtech.modules.order.entity.vo.CarBusinessDetailVo">
+        SELECT
+            io.username,
+            iac.signing_time as sign_time,
+            io.licenseno,
+            JSON_UNQUOTE(json_extract(io.applyinfo, '$.name')) as applyname,
+            io.product,
+            iac.jqpremium,
+            iac.sypremium,
+            iac.jypremium,
+            iac.taxamount,
+            ifo.jq_costs_export_proportion+ifo.jq_export_other_costs_proportion as jq_export_proportion,
+            ifo.sy_costs_export_proportion+ifo.sy_export_other_costs_proportion as sy_export_proportion,
+            ifo.no_costs_export_proportion+ifo.no_export_other_costs_proportion as no_export_proportion,
+            ifo.jq_export_supervise_costs_premiums + ifo.sy_export_supervise_costs_premiums + ifo.no_export_supervise_costs_premiums + ifo.jq_export_other_costs_premiums + ifo.sy_export_other_costs_premiums + ifo.no_export_other_costs_premiums as settlement,
+            CASE ifa.auditstatus
+                WHEN 1 THEN
+                    '已审核'
+                ELSE
+                    '未审核'
+                END as audittype,
+            ifa.audittime as audit_date
+
+        FROM
+            ins_orders io
+        LEFT JOIN ins_area_company iac ON io.orderno = iac.orderno
+        LEFT JOIN ins_fee_order_new ifo ON iac.id = ifo.ins_order_no
+        left join ins_fee_audit ifa on ifo.ins_order_no = ifa.ins_order_no
+        WHERE
+            io.userid = #{userId}
+          AND io.orderstatus = 3
+          AND iac.signing_time BETWEEN #{param.signStartDate} and #{param.signEndDate}
+    </select>
+
+    <select id="getRevenueExpenditureDetailList" resultType="com.ydtech.modules.order.entity.vo.RevenueExpenditureDetailVo">
+        SELECT
+            sua.create_time,
+            io.licenseno,
+            sua.amount,
+            sua.business_eegments_type,
+            sua.documentary,
+            sua.property
+        FROM
+            sys_user_account_history sua
+                left join ins_area_company iac on sua.suborder = iac.id
+                left join ins_orders io on iac.orderno = io.orderno
+        WHERE
+            user_id = #{userId}
+          AND
+            sua.create_time BETWEEN #{param.signStartDate} and #{param.signEndDate}
+    </select>
 </mapper>

二進制
src/main/resources/template/car_business_detail.xlsx


二進制
src/main/resources/template/revenue_expenditure_detail.xlsx