Ver Fonte

1.新增表产品选择记录
2.新增产品时新增产品收款信息标准收费
3.选择产品时添加产品选择记录,取号时修改产品选择记录

GouGengquan há 1 ano atrás
pai
commit
a2dd8df565

+ 1 - 1
biz-base/src/main/java/com/dayou/controller/AssetsProductionController.java

@@ -75,7 +75,7 @@ public class AssetsProductionController extends BaseController {
     @FinishTask
     @PostMapping("/save")
     public RestResponse<Boolean> save(@RequestBody TaskRecordDTO<AssetsProduction> taskRecordDTO) {
-        Boolean ret = assetsProductionService.add(taskRecordDTO);
+        Boolean ret = assetsProductionService.add(taskRecordDTO.getTaskData());
         return RestResponse.data(ret);
     }
 

+ 83 - 0
biz-base/src/main/java/com/dayou/controller/BusinessProductionChoiceLogController.java

@@ -0,0 +1,83 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IBusinessProductionChoiceLogService;
+import com.dayou.entity.BusinessProductionChoiceLog;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 产品选择记录
+ *
+ * @author wucl
+ * @since 2024-05-16
+ */
+@RestController
+@RequestMapping("businessProductionChoiceLog")
+@Slf4j
+public class BusinessProductionChoiceLogController extends BaseController {
+    @Autowired
+    private IBusinessProductionChoiceLogService businessProductionChoiceLogService;
+
+    /**
+    * 产品选择记录列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<BusinessProductionChoiceLog>> page(BusinessProductionChoiceLog businessProductionChoiceLog, Page page){
+        Page<BusinessProductionChoiceLog> pages=businessProductionChoiceLogService.selectPage(page,businessProductionChoiceLog);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 产品选择记录详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<BusinessProductionChoiceLog> detail(@PathVariable Long id){
+        BusinessProductionChoiceLog xBusinessProductionChoiceLog =businessProductionChoiceLogService.detail(id);
+        return RestResponse.data(xBusinessProductionChoiceLog);
+     }
+
+    /**
+     * 产品选择记录新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody BusinessProductionChoiceLog businessProductionChoiceLog) {
+        Boolean ret = businessProductionChoiceLogService.add(businessProductionChoiceLog);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 产品选择记录更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody BusinessProductionChoiceLog businessProductionChoiceLog) {
+        Boolean ret = businessProductionChoiceLogService.update(businessProductionChoiceLog);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 产品选择记录删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = businessProductionChoiceLogService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 16 - 0
dao/src/main/java/com/dayou/mapper/BusinessProductionChoiceLogMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.BusinessProductionChoiceLog;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 产品选择记录 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-05-16
+ */
+public interface BusinessProductionChoiceLogMapper extends CustomBaseMapper<BusinessProductionChoiceLog> {
+
+}

+ 27 - 0
dao/src/main/resources/mapper/BusinessProductionChoiceLogMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.BusinessProductionChoiceLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.BusinessProductionChoiceLog">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="created" property="created" />
+        <result column="modified" property="modified" />
+        <result column="business_type" property="businessType" />
+        <result column="business_id" property="businessId" />
+        <result column="target_id" property="targetId" />
+        <result column="production_type" property="productionType" />
+        <result column="take_no_status" property="takeNoStatus" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        business_type, business_id, target_id, production_type, take_no_status
+    </sql>
+
+</mapper>

+ 1 - 1
domain/src/main/java/com/dayou/entity/AssetsEvaluationTarget.java

@@ -132,7 +132,7 @@ public class AssetsEvaluationTarget extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "审核价格")
-    private Double checkValue;
+    private BigDecimal checkValue;
 
     /**
      * 意见书产品号

+ 7 - 0
domain/src/main/java/com/dayou/entity/AssetsProduction.java

@@ -3,6 +3,8 @@ import java.math.BigDecimal;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import com.dayou.annotation.ExcelSheet;
@@ -171,5 +173,10 @@ public class AssetsProduction extends BaseEntity {
      */
     private String assetsName;
 
+    /**
+     * 评估对象id集合
+     */
+    private List<Long> targetIdList;
+
 
 }

+ 60 - 0
domain/src/main/java/com/dayou/entity/BusinessProductionChoiceLog.java

@@ -0,0 +1,60 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 产品选择记录
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-05-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "产品选择记录")
+public class BusinessProductionChoiceLog extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 业务类型
+     */
+    @ImportCell
+    @ExportCell(columnName = "业务类型")
+    private String businessType;
+
+    /**
+     * 业务id
+     */
+    private Long businessId;
+
+    /**
+     * 评估对象id
+     */
+    private Long targetId;
+
+    /**
+     * 产品选择的类型
+     */
+    @ImportCell
+    @ExportCell(columnName = "产品选择的类型")
+    private String productionType;
+
+    /**
+     * 打印数量
+     */
+    private Integer printCount;
+
+    /**
+     * 该记录的取号状态
+     */
+    @ImportCell
+    @ExportCell(columnName = "该记录的取号状态")
+    private Boolean takeNoStatus;
+
+
+}

+ 1 - 1
service/src/main/java/com/dayou/service/IAssetsProductionService.java

@@ -31,7 +31,7 @@ public interface IAssetsProductionService extends IService<AssetsProduction> {
 
         AssetsProduction detail(Long id);
 
-        Boolean add(TaskRecordDTO<AssetsProduction> taskRecordDTO);
+        Boolean add(AssetsProduction assetsProduction);
 
         Boolean update(AssetsProduction assetsProduction);
 

+ 28 - 0
service/src/main/java/com/dayou/service/IBusinessProductionChoiceLogService.java

@@ -0,0 +1,28 @@
+package com.dayou.service;
+import com.dayou.entity.BusinessProductionChoiceLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * <p>
+ * 产品选择记录 服务类
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-05-16
+ */
+public interface IBusinessProductionChoiceLogService extends IService<BusinessProductionChoiceLog> {
+
+        Page<BusinessProductionChoiceLog> selectPage(Page page,BusinessProductionChoiceLog businessProductionChoiceLog);
+
+        BusinessProductionChoiceLog detail(Long id);
+
+        Boolean add(BusinessProductionChoiceLog businessProductionChoiceLog);
+
+        Boolean update(BusinessProductionChoiceLog businessProductionChoiceLog);
+
+        Boolean delete(Long id);
+
+}

+ 42 - 34
service/src/main/java/com/dayou/service/impl/AssetsProductionServiceImpl.java

@@ -54,6 +54,12 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     @Autowired
     private IProductionFundService productionFundService;
 
+    @Autowired
+    private IAssetsEvaluationTargetService assetsEvaluationTargetService;
+
+    @Autowired
+    private IBusinessProductionChoiceLogService choiceLogService;
+
     /**
      * 根据资产业务id查询资产业务产品
      *
@@ -78,8 +84,19 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     }
 
     @Override
-    public Boolean add(TaskRecordDTO<AssetsProduction> taskRecordDTO) {
-        return this.save(taskRecordDTO.getTaskData());
+    public Boolean add(AssetsProduction assetsProduction) {
+        // 选择产品时给当前选择产品的评估对象添加选择产品记录
+        List<BusinessProductionChoiceLog> choiceLogList = new ArrayList<>();
+        for (Long targetId : assetsProduction.getTargetIdList()){
+            BusinessProductionChoiceLog choiceLog = new BusinessProductionChoiceLog();
+            choiceLog.setBusinessType("ASSET_BUSINESS");
+            choiceLog.setProductionType(assetsProduction.getProductionType());
+            choiceLog.setBusinessId(assetsProduction.getBusinessId());
+            choiceLog.setTargetId(targetId);
+            choiceLogList.add(choiceLog);
+        }
+        choiceLogService.saveBatch(choiceLogList);
+        return this.save(assetsProduction);
     }
 
     @Override
@@ -130,14 +147,8 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
         }
         // 生成产品二维码
         assetsProduction.setQrCode(businessProductionService.doCreateNormalCode(assetsProduction.getProductionType(), assetsProduction.getProductionNo()));
-        // 新增收款信息
-//        AssetsProduction productionType = this.getOne(new LambdaQueryWrapper<AssetsProduction>()
-//                .select(AssetsProduction::getProductionType)
-//                .eq(AssetsProduction::getProductionNo, assetsProduction.getProductionNo())
-//                .eq(AssetsProduction::getId, assetsProduction.getId()));
-//        if (ObjectUtil.isNotNull(productionType) && !productionType.getProductionType().equals("STATEMENT")){
-//            addAssetsShouldAmount(assetsProduction);
-//        }
+        // 新增产品收款信息
+        addAssetsProShouldAmount(assetsProduction);
         return assetsProductionMapper.writeAssetsProduction(assetsProduction);
     }
 
@@ -290,35 +301,32 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     }
 
     /**
-     * 新增订单收款信息
-     *
+     * 新增订单产品收款信息
      * @param assetsProduction 资产订单信息
      */
-    public void addAssetsShouldAmount(AssetsProduction assetsProduction) {
-        // 从订单收款表获取应收款信息
-        OrderFund orderFund = new OrderFund();
-        orderFund = orderFundService.getOne(new LambdaQueryWrapper<OrderFund>()
-                .select(OrderFund::getOrderId, OrderFund::getShouldAmount)
-                .eq(OrderFund::getBusinessId, assetsProduction.getBusinessId())
-                .eq(OrderFund::getBusinessType, "ASSET_BUSINESS"));
-
-        if (ObjectUtil.isNotNull(orderFund) && ObjectUtil.isNotNull(orderFund.getShouldAmount())) {
+    public void addAssetsProShouldAmount(AssetsProduction assetsProduction) {
+        // 根据报告号获取评估对象信息
+        List<AssetsEvaluationTarget> targetList = assetsEvaluationTargetService.list(new LambdaQueryWrapper<AssetsEvaluationTarget>()
+                .select(AssetsEvaluationTarget::getCheckValue)
+                .eq(AssetsEvaluationTarget::getReportNo, assetsProduction.getProductionNo()));
+        if (ObjectUtil.isNotNull(targetList) && ObjectUtil.isNotEmpty(targetList)){
+            // 使用流计算审核价格的总和
+            BigDecimal total = targetList.stream()
+                    .map(AssetsEvaluationTarget::getCheckValue)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 新增产品收款信息
+            OrderFund orderFund = orderFundService.getOne(new LambdaQueryWrapper<OrderFund>()
+                    .select(OrderFund::getId)
+                    .eq(OrderFund::getBusinessId, assetsProduction.getBusinessId()));
             ProductionFund productionFund = new ProductionFund();
+            productionFund.setBusinessType("ASSET_BUSINESS");
+            productionFund.setBusinessId(assetsProduction.getBusinessId());
             productionFund.setOrderFundId(orderFund.getId());
-            productionFund.setProductionShouldAmount(orderFund.getShouldAmount());
+            productionFund.setEvaluateAmount(total);
             productionFund.setProductionNo(assetsProduction.getProductionNo());
-            // 新增产品的收款信息
-            productionFundService.save(productionFund);
-        } else {
-            Assets assets = assetsService.getById(assetsProduction.getBusinessId());
-            orderFund.setBusinessId(assets.getId());
-            orderFund.setOrderId(assets.getOrderId());
-            orderFund.setOrderName(assets.getName());
-            orderFund.setBusinessType("ASSET_BUSINESS");
-            orderFund.setShouldAmount(BigDecimal.valueOf(0));
-            orderFundService.save(orderFund);
-            // 订单应收款新增后 继续调用方法添加产品收款信息
-            addAssetsShouldAmount(assetsProduction);
+            productionFund.setProductionType(assetsProduction.getProductionType());
+            productionFundService.add(productionFund);
         }
     }
 }

+ 34 - 0
service/src/main/java/com/dayou/service/impl/AssetsServiceImpl.java

@@ -1,5 +1,10 @@
 package com.dayou.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.entity.BusinessProductionChoiceLog;
+import com.dayou.entity.OrderFund;
+import com.dayou.service.IBusinessProductionChoiceLogService;
+import com.dayou.service.IOrderFundService;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.AssetsRepertoryVo;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -62,6 +67,12 @@ public class AssetsServiceImpl extends ServiceImpl<AssetsMapper, Assets> impleme
     @Autowired
     private AssetsEvaluationTargetMapper assetsEvaluationTargetMapper;
 
+    @Autowired
+    private IOrderFundService orderFundService;
+
+    @Autowired
+    private IBusinessProductionChoiceLogService choiceLogService;
+
     /**
      * 条件查询资产任务列表
      *
@@ -151,11 +162,19 @@ public class AssetsServiceImpl extends ServiceImpl<AssetsMapper, Assets> impleme
      * @return Boolean
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public WorkNodeCommit add(Assets assets) {
         //获取项目编号
         assets.setOrderId(businessNumberService.takeOrderNumber());
         //新增订单信息
         this.save(assets);
+        //新增订单收款信息
+        OrderFund orderFund = new OrderFund();
+        orderFund.setBusinessType("ASSET_BUSINESS");
+        orderFund.setBusinessId(assets.getId());
+        orderFund.setOrderName(assets.getName());
+        orderFund.setOrderId(assets.getOrderId());
+        orderFundService.save(orderFund);
         //发起流程
         return workFlowService.openingOrder(ASSET_BUSINESS, assets.getId(), null, assets.getRemark());
     }
@@ -208,6 +227,21 @@ public class AssetsServiceImpl extends ServiceImpl<AssetsMapper, Assets> impleme
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean takeAssetsProductionNo(TakeAssetsProductionNoDTO dto) {
+
+        // 取号时更新产品选择记录状态
+        List<BusinessProductionChoiceLog> choiceLogList = new ArrayList<>();
+        for (Long targetId : dto.getTargetIdList()){
+            BusinessProductionChoiceLog choiceLog = choiceLogService.getOne(new LambdaQueryWrapper<BusinessProductionChoiceLog>()
+                    .eq(BusinessProductionChoiceLog::getTargetId, targetId)
+                    .eq(BusinessProductionChoiceLog::getBusinessType, "ASSET_BUSINESS")
+                    .eq(BusinessProductionChoiceLog::getBusinessId, dto.getBusinessId())
+                    .eq(BusinessProductionChoiceLog::getTakeNoStatus, 0));
+            choiceLog.setTakeNoStatus(true);
+            choiceLogList.add(choiceLog);
+        }
+        choiceLogService.updateBatchById(choiceLogList);
+        dto.setPrintCount(choiceLogList.get(0).getPrintCount());
+        dto.setProductionType(choiceLogList.get(0).getProductionType());
         String productionNo = genProductionNo(dto);
         //产品添加产品号
         assetsProductionMapper.updateProductionNo(dto.getBusinessId(), dto.getProductionType(), productionNo);

+ 66 - 0
service/src/main/java/com/dayou/service/impl/BusinessProductionChoiceLogServiceImpl.java

@@ -0,0 +1,66 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.BusinessProductionChoiceLog;
+import com.dayou.mapper.BusinessProductionChoiceLogMapper;
+import com.dayou.service.IBusinessProductionChoiceLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dayou.utils.ExcelUtil;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+import java.util.List;
+import java.util.ArrayList;
+import org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 产品选择记录 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-05-16
+ */
+@Service
+public class BusinessProductionChoiceLogServiceImpl extends ServiceImpl<BusinessProductionChoiceLogMapper, BusinessProductionChoiceLog> implements IBusinessProductionChoiceLogService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<BusinessProductionChoiceLog> selectPage(Page page,BusinessProductionChoiceLog businessProductionChoiceLog){
+        return this.page(page, new QueryWrapper<BusinessProductionChoiceLog>(businessProductionChoiceLog));
+    }
+
+
+    @Override
+    public BusinessProductionChoiceLog detail(Long id){
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(BusinessProductionChoiceLog businessProductionChoiceLog){
+        return  this.save(businessProductionChoiceLog);
+    }
+
+    @Override
+    public Boolean update(BusinessProductionChoiceLog businessProductionChoiceLog){
+        return  this.updateById(businessProductionChoiceLog);
+    }
+
+    @Override
+    public Boolean delete(Long id){
+        //逻辑删除
+        return this.removeById(id);
+    }
+}

+ 25 - 1
sql/update_sql.sql

@@ -395,4 +395,28 @@ CREATE TABLE `commission_declare` (
                                       `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                       `modified` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
                                       PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='提成申报';
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='提成申报';
+
+/**
+  日期:2024-05-16
+  修改人:苟耕铨
+ */
+# 新增表产品选择记录
+DROP TABLE IF EXISTS `business_production_choice_log`;
+CREATE TABLE `business_production_choice_log`
+(
+    `id`              bigint(20)                                                    NOT NULL AUTO_INCREMENT COMMENT '产品选择记录id',
+    `business_type`   varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务类型',
+    `business_id`     bigint(20)                                                    NOT NULL COMMENT '业务id',
+    `target_id`       bigint(20)                                                    NOT NULL COMMENT '评估对象id',
+    `production_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '产品选择的类型',
+    `take_no_status`  bit(1)                                                        NOT NULL DEFAULT b'0' COMMENT '该记录的取号状态',
+    `deleted`         bit(1)                                                        NOT NULL DEFAULT b'0' COMMENT '逻辑删除标识:1:删除 0:未删除',
+    `created`         datetime(0)                                                   NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+    `modified`        timestamp(6)                                                  NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB
+  AUTO_INCREMENT = 1
+  CHARACTER SET = utf8mb4
+  COLLATE = utf8mb4_general_ci COMMENT = '产品选择记录'
+  ROW_FORMAT = Dynamic;