diff --git a/pom.xml b/pom.xml index d7146001..40a8e590 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,12 @@ + + com.alibaba + easyexcel + 3.3.2 + + com.fasterxml.jackson.datatype jackson-datatype-jsr310 diff --git a/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java index b9a0a49f..3df444de 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java @@ -5,6 +5,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -32,72 +33,89 @@ public class BirActivityCenterGoods implements Serializable { private Long id; /** 活动费用明细 */ + @ExcelProperty("活动费用明细ID") @NotNull(message = "活动费用明细不能为空") private Long activityCenterGoodsId; /** 年月 */ + @ExcelProperty("年月") @NotNull(message = "年月不能为空") private Integer keyNum; /** 天数 */ + @ExcelProperty("天数") @NotNull(message = "天数不能为空") private Integer days; + @ExcelProperty("当月有多少天") @NotNull(message = "天数不能为空") private Integer dayOfMouth; /** 开始日期 */ + @ExcelProperty("开始日期") @NotNull(message = "开始日期不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate starDate; /** 结束日期 */ + @ExcelProperty("结束日期") @NotNull(message = "结束日期不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate endDate; /** 分配的预算金额 */ + @ExcelProperty("分配的预算金额") @NotNull(message = "分配的预算金额不能为空") private BigDecimal splitAmount; /** 分配的核销金额 */ + @ExcelProperty("分配的核销金额") @NotNull(message = "分配的核销金额不能为空") private BigDecimal splitUsedAmount; /** 分配的释放金额 */ + @ExcelProperty("分配的释放金额") @NotNull(message = "分配的释放金额不能为空") private BigDecimal splitReleaseAmount; /** 成本明细编码 */ + @ExcelProperty("成本明细编码") @Length(max = 30,message = "成本明细编码长度不能超过30字") private String centerGoodsCode; /** 费用申请id */ + @ExcelProperty("费用申请id") @NotNull(message = "费用申请id不能为空") private Long costApplyId; /** 活动id */ + @ExcelProperty("活动id") @NotNull(message = "活动id不能为空") private Long activityId; /** 活动编码 */ + @ExcelProperty("活动编码") @NotBlank(message = "活动编码不能为空") @Length(max = 30,message = "活动编码长度不能超过30字") @TableField(condition = SqlCondition.LIKE) private String activityCode; /** 活动总金额 */ + @ExcelProperty("活动总金额") private BigDecimal activityTotalAmount; /** 活动总核销金额 */ + @ExcelProperty("活动总核销金额") private BigDecimal activityTotalCheckAmount; /** 活动完成主题 */ + @ExcelProperty("活动完成主题") private Integer activityFinishedFlag; /** 活动释放 */ + @ExcelProperty("活动释放金额") private BigDecimal activityTotalReleaseAmount; /** 科目id */ @@ -105,18 +123,21 @@ public class BirActivityCenterGoods implements Serializable { private Long subjectId; /** 科目编码 */ + @ExcelProperty("科目编码") @NotBlank(message = "科目编码不能为空") @Length(max = 50,message = "科目编码长度不能超过50字") @TableField(condition = SqlCondition.LIKE) private String subjectCode; /** 科目名称 */ + @ExcelProperty("科目名称") @NotBlank(message = "科目名称不能为空") @Length(max = 50,message = "科目名称长度不能超过50字") @TableField(condition = SqlCondition.LIKE) private String subjectName; /** 成本中心类型 */ + @ExcelProperty("成本中心类型") @NotBlank(message = "成本中心类型不能为空") @Length(max = 50,message = "成本中心类型长度不能超过50字") private String centerType; @@ -127,38 +148,46 @@ public class BirActivityCenterGoods implements Serializable { private String centerId; /** 成本中心编码 */ + @ExcelProperty("成本中心编码") @NotBlank(message = "成本中心编码不能为空") @Length(max = 50,message = "成本中心编码长度不能超过50字") @TableField(condition = SqlCondition.LIKE) private String centerCode; /** 成本中心名称 */ + @ExcelProperty("成本中心名称") @NotBlank(message = "成本中心名称不能为空") @Length(max = 200,message = "成本中心名称长度不能超过200字") @TableField(condition = SqlCondition.LIKE) private String centerName; /** 成本中心金额 */ + @ExcelProperty("成本中心金额") @NotNull(message = "成本中心金额不能为空") private BigDecimal centerAmount; /** 成本中心占比 */ + @ExcelProperty("成本中心占比") @NotNull(message = "成本中心占比不能为空") private BigDecimal centerRate; /** 费用额度 */ + @ExcelProperty("费用额度") @NotNull(message = "费用额度不能为空") private BigDecimal centerGoodsAmount; /** 费用占比 */ + @ExcelProperty("费用占比") @NotNull(message = "费用占比不能为空") private BigDecimal centerGoodsRate; /** 已用费用 */ + @ExcelProperty("已用费用") @NotNull(message = "已用费用不能为空") private BigDecimal usedAmount; /** 目标类型(brand、category、series、spu、sku) */ + @ExcelProperty("商品维度类型") @NotBlank(message = "目标类型(brand、category、series、spu、sku)不能为空") @Length(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") private String targetType; @@ -168,12 +197,14 @@ public class BirActivityCenterGoods implements Serializable { private Long targetId; /** 目标编码 */ + @ExcelProperty("商品维度编码") @NotBlank(message = "目标编码不能为空") @Length(max = 30,message = "目标编码长度不能超过30字") @TableField(condition = SqlCondition.LIKE) private String targetCode; /** 目标名称 */ + @ExcelProperty("商品维度名称") @NotBlank(message = "目标名称不能为空") @Length(max = 200,message = "目标名称长度不能超过200字") @TableField(condition = SqlCondition.LIKE) @@ -192,10 +223,12 @@ public class BirActivityCenterGoods implements Serializable { private String centerLv1Id; /** 一级成本中心 */ + @ExcelProperty("一级成本中心编码") @Length(max = 50,message = "一级成本中心长度不能超过50字") private String centerLv1Code; /** 一级成本中心 */ + @ExcelProperty("一级成本中心") @Length(max = 255,message = "一级成本中心长度不能超过255字") private String centerLv1Name; @@ -204,10 +237,12 @@ public class BirActivityCenterGoods implements Serializable { private String centerLv2Id; /** 二级成本中心 */ + @ExcelProperty("二级成本中心编码") @Length(max = 50,message = "二级成本中心长度不能超过50字") private String centerLv2Code; /** 二级成本中心 */ + @ExcelProperty("二级成本中心") @Length(max = 255,message = "二级成本中心长度不能超过255字") private String centerLv2Name; @@ -233,30 +268,35 @@ public class BirActivityCenterGoods implements Serializable { private String tenantId; /** 活动开始时间 */ + @ExcelProperty("活动开始时间") @NotNull(message = "活动开始时间不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate actStartDate; /** 活动结束时间 */ + @ExcelProperty("活动结束时间") @NotNull(message = "活动结束时间不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate actEndDate; /** 预算开始时间 */ + @ExcelProperty("预算开始时间") @NotNull(message = "预算开始时间不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate preStartDate; /** 预算结束时间 */ + @ExcelProperty("预算结束时间") @NotNull(message = "预算结束时间不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate preEndDate; /** 预计核销时间 */ + @ExcelProperty("预计核销时间") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate preCheckDate; @@ -266,12 +306,14 @@ public class BirActivityCenterGoods implements Serializable { private Long supplierId; /** 客户编码 */ + @ExcelProperty("客户编码") @NotBlank(message = "客户编码不能为空") @Length(max = 30,message = "客户编码长度不能超过30字") @TableField(condition = SqlCondition.LIKE) private String supplierCode; /** 客户名称 */ + @ExcelProperty("客户名称") @NotBlank(message = "客户名称不能为空") @Length(max = 200,message = "客户名称长度不能超过200字") @TableField(condition = SqlCondition.LIKE) diff --git a/src/main/java/com/qs/serve/modules/exl/common/ExlConst.java b/src/main/java/com/qs/serve/modules/exl/common/ExlConst.java index 6263c2f6..9ff8e8b3 100644 --- a/src/main/java/com/qs/serve/modules/exl/common/ExlConst.java +++ b/src/main/java/com/qs/serve/modules/exl/common/ExlConst.java @@ -14,6 +14,9 @@ public interface ExlConst { String TYPE_MONEY = "money"; String TYPE_STRING = "string"; + + String TABLE_CONFIG_PARAM = "tb_config_cnf_id"; + String PRE_COLUMN_START = "START--"; String PRE_COLUMN_END = "END--"; diff --git a/src/main/java/com/qs/serve/modules/exl/common/TableCreateSqlUtil.java b/src/main/java/com/qs/serve/modules/exl/common/TableCreateSqlUtil.java index d443f11a..1aecf6f7 100644 --- a/src/main/java/com/qs/serve/modules/exl/common/TableCreateSqlUtil.java +++ b/src/main/java/com/qs/serve/modules/exl/common/TableCreateSqlUtil.java @@ -1,6 +1,7 @@ package com.qs.serve.modules.exl.common; import com.alibaba.fastjson.JSONObject; +import com.qs.serve.common.util.Assert; import com.qs.serve.modules.exl.entity.ExlColumnConf; import java.util.HashMap; @@ -47,7 +48,10 @@ public class TableCreateSqlUtil { for (ExlColumnConf columnConf : columnList) { if(columnConf.getKeyFlag().equals(1)){ String val = jsonObject.getString(columnConf.getColumnName()); - val = val == null||val.length()<1? "null_":val+"_"; + if(val==null){ + Assert.throwEx("["+columnConf.getColumnName()+"]不能为空"); + } + val = val+"_"; unionId.append(val); } } diff --git a/src/main/java/com/qs/serve/modules/exl/controller/ExlTableDataController.java b/src/main/java/com/qs/serve/modules/exl/controller/ExlTableDataController.java index e959c5e5..ee72da84 100644 --- a/src/main/java/com/qs/serve/modules/exl/controller/ExlTableDataController.java +++ b/src/main/java/com/qs/serve/modules/exl/controller/ExlTableDataController.java @@ -16,6 +16,7 @@ import com.qs.serve.modules.exl.common.QsSqlSessionUtil; import com.qs.serve.modules.exl.common.TableCreateSqlUtil; import com.qs.serve.modules.exl.entity.ExlColumnConf; import com.qs.serve.modules.exl.entity.ExlTableConf; +import com.qs.serve.modules.exl.entity.dto.ExlBatchSaveBo; import com.qs.serve.modules.exl.entity.dto.ExlConditionDto; import com.qs.serve.modules.exl.entity.dto.ExlQueryFieldDto; import com.qs.serve.modules.exl.entity.dto.ExlTableBo; @@ -55,8 +56,10 @@ public class ExlTableDataController { * 翻页查询 * @return */ - @GetMapping("/page/{tableConfigId}") - public R page(@PathVariable("tableConfigId") Long tableConfigId,@RequestParam Map map){ + @GetMapping("/page") + public R page(@RequestParam Map map){ + String tableConfigId = map.get(ExlConst.TABLE_CONFIG_PARAM); + map.remove(ExlConst.TABLE_CONFIG_PARAM); // table ExlTableConf tableConf = exlTableConfService.getById(tableConfigId); // columns @@ -105,17 +108,32 @@ public class ExlTableDataController { queryMap.put("eqList",eq_conditions); queryMap.put("likeList",like_conditions); String targetTableName = ExlConst.TABLE_NAME_PRE + tableConf.getTableName(); - return R.ok(exlTableConfMapper.listData(targetTableName,queryMap)); + Long count = exlTableConfMapper.countData(targetTableName,queryMap); + PageVo vo = new PageVo(); + vo.initPageByTotal(count); + if(count>0){ + List> list = exlTableConfMapper.listData(targetTableName,queryMap); + vo.setList(list); + }else { + vo.setList(new ArrayList()); + } + return R.ok(vo); } + public R export(){ + return null; + } + /** * 新增 - * @param param + * @param saveBo * @return */ - @PostMapping("/batchSave/{tableConfigId}") - public R batchSave(@PathVariable Long tableConfigId, @RequestBody List param){ + @PostMapping("/batchSave") + public R batchSave( @RequestBody ExlBatchSaveBo saveBo){ + List param = saveBo.getParam(); + String tableConfigId = saveBo.getTb_config_cnf_id(); // table ExlTableConf tableConf = exlTableConfService.getById(tableConfigId); // columns diff --git a/src/main/java/com/qs/serve/modules/exl/entity/dto/ExlBatchSaveBo.java b/src/main/java/com/qs/serve/modules/exl/entity/dto/ExlBatchSaveBo.java new file mode 100644 index 00000000..a4276f32 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/exl/entity/dto/ExlBatchSaveBo.java @@ -0,0 +1,21 @@ +package com.qs.serve.modules.exl.entity.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author YenHex + * @since 2023/8/16 + */ +@Data +public class ExlBatchSaveBo { + + @NotNull + String tb_config_cnf_id; + + @NotNull + List param; + +} diff --git a/src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java b/src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java index e498cef7..138c79f0 100644 --- a/src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java +++ b/src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java @@ -16,6 +16,9 @@ import java.util.Map; public interface ExlTableConfMapper extends BaseMapper { + @InterceptorIgnore(tenantLine = "1") + Long countData(@Param("tableName") String tableName,@Param("query")Map query); + @InterceptorIgnore(tenantLine = "1") List> listData(@Param("tableName") String tableName,@Param("query")Map query); diff --git a/src/main/resources/mapper/exl/ExlTableConfMapper.xml b/src/main/resources/mapper/exl/ExlTableConfMapper.xml index 5a753d2e..08458a96 100644 --- a/src/main/resources/mapper/exl/ExlTableConfMapper.xml +++ b/src/main/resources/mapper/exl/ExlTableConfMapper.xml @@ -30,33 +30,44 @@ exl_table_conf.`create_by`, exl_table_conf.`update_by`, exl_table_conf.`del_flag` - + select * from ${tableName} + limit #{query.startRow},#{query.pageSize} + +