Browse Source

Merge remote-tracking branch 'origin/v1.0' into v1.0

v1.0
15989082884@163.com 2 years ago
parent
commit
71c27263b1
  1. 6
      pom.xml
  2. 45
      src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java
  3. 42
      src/main/java/com/qs/serve/modules/bir/entity/BirActivityCenterGoods.java
  4. 3
      src/main/java/com/qs/serve/modules/exl/common/ExlConst.java
  5. 6
      src/main/java/com/qs/serve/modules/exl/common/TableCreateSqlUtil.java
  6. 2
      src/main/java/com/qs/serve/modules/exl/controller/ExlTableConfController.java
  7. 91
      src/main/java/com/qs/serve/modules/exl/controller/ExlTableDataController.java
  8. 21
      src/main/java/com/qs/serve/modules/exl/entity/dto/ExlBatchSaveBo.java
  9. 6
      src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java
  10. 2
      src/main/java/com/qs/serve/modules/oss/service/OssService.java
  11. 13
      src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java
  12. 4
      src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java
  13. 2
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  14. 31
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetApplyOperationServiceImpl.java
  15. 6
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java
  16. 4
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java
  17. 2
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java
  18. 2
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java
  19. 2
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java
  20. 9
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java
  21. 11
      src/main/java/com/qs/serve/task/SysTask.java
  22. 28
      src/main/java/com/qs/serve/task/controller/TaskUserController.java
  23. 40
      src/main/resources/mapper/exl/ExlTableConfMapper.xml

6
pom.xml

@ -32,6 +32,12 @@
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>

45
src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java

@ -1,12 +1,18 @@
package com.qs.serve.modules.bir.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.aliyun.oss.OSS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.config.properties.AliYunOssProperties;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.IdUtil;
import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.bir.entity.BirActivityCenterGoods;
@ -23,6 +29,7 @@ import com.qs.serve.modules.bms.service.BmsChannelPointService;
import com.qs.serve.modules.bms.service.BmsChannelService;
import com.qs.serve.modules.bms.service.BmsSupplierChannelService;
import com.qs.serve.modules.his.service.HisUserChannelPointService;
import com.qs.serve.modules.oss.service.OssService;
import com.qs.serve.modules.tbs.entity.TbsActivityChannel;
import com.qs.serve.modules.tbs.service.TbsActivityChannelService;
import lombok.AllArgsConstructor;
@ -31,7 +38,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@ -46,6 +56,8 @@ import java.util.stream.Collectors;
@RequestMapping("bir/centerGoods")
public class BirActivityCenterGoodsController {
private OssService ossService;
private AliYunOssProperties aliYunOSSProperties;
private BirActivityCenterGoodsService centerGoodsService;
/**
@ -77,7 +89,7 @@ public class BirActivityCenterGoodsController {
*/
@GetMapping("/export")
@PreAuthorize("hasRole('bms:channel:query')")
public R<List<BirActivityCenterGoods>> export(BirActivityCenterGoods param){
public R<?> export(BirActivityCenterGoods param){
LambdaQueryWrapper<BirActivityCenterGoods> channelWrapper = new LambdaQueryWrapper<>(param);
if(param.getKeyNumStart()!=null){
Integer keyNumStart = Integer.parseInt(param.getKeyNumStart().replace("-",""));
@ -88,7 +100,36 @@ public class BirActivityCenterGoodsController {
channelWrapper.le(BirActivityCenterGoods::getKeyNum,keyNumEnd);
}
List<BirActivityCenterGoods> list = centerGoodsService.list(channelWrapper);
return R.ok(list);
String templateFileName = "tempFiles";
InputStream inputStream = null;
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
ExcelWriter excelWriter = EasyExcel.write().withTemplate(templateFileName).file(os).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(list, writeSheet);
excelWriter.finish();
byte[] buffer = os.toByteArray();
inputStream = new ByteArrayInputStream(buffer);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM/dd");
String prefix = aliYunOSSProperties.getPrefix();
String dir = prefix + "/" + sdf.format(new Date())+"/";
String fileName = dir + IdUtil.getSnowflakeNextId() + ".xlsx";
OSS oss = ossService.getOSSClient();
oss.putObject(aliYunOSSProperties.getBucket(),fileName,inputStream);
return R.ok(fileName,"ok");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return R.error();
}
}

42
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)

3
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--";

6
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);
}
}

2
src/main/java/com/qs/serve/modules/exl/controller/ExlTableConfController.java

@ -55,7 +55,7 @@ public class ExlTableConfController {
* @param param
* @return
*/
//@GetMapping("/list")
@GetMapping("/list")
public R<List<ExlTableConf>> getList(ExlTableConf param){
LambdaQueryWrapper<ExlTableConf> lqw = new LambdaQueryWrapper<>(param);
List<ExlTableConf> list = exlTableConfService.list(lqw);

91
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;
@ -24,6 +25,7 @@ import com.qs.serve.modules.exl.service.ExlColumnConfService;
import com.qs.serve.modules.exl.service.ExlTableConfService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.web.bind.annotation.*;
@ -36,7 +38,7 @@ import java.util.Map;
import java.util.stream.Collectors;
/**
* 动态Excel表 表配置
* 动态Excel表 数据查询
* @author YenHex
* @since 2023-08-11
*/
@ -52,17 +54,42 @@ public class ExlTableDataController {
private ExlTableConfMapper exlTableConfMapper;
/**
* test
* 翻页查询
* @return
*/
@GetMapping("/page/{tableConfigId}")
public R<?> test(@PathVariable("tableConfigId") Long tableConfigId,@RequestParam Map<String,String> map){
@GetMapping("/page")
public R<?> page(@RequestParam Map<String,String> map){
String tableConfigId = map.get(ExlConst.TABLE_CONFIG_PARAM);
map.remove(ExlConst.TABLE_CONFIG_PARAM);
// table
ExlTableConf tableConf = exlTableConfService.getById(tableConfigId);
// columns
LambdaQueryWrapper<ExlColumnConf> columnLqw = new LambdaQueryWrapper<>();
columnLqw.eq(ExlColumnConf::getTableConfId,tableConfigId);
List<ExlColumnConf> columnList = exlColumnConfService.list(columnLqw);
// query
Map<String, Object> queryMap = buildQueryMap(map, columnList);
String targetTableName = ExlConst.TABLE_NAME_PRE + tableConf.getTableName();
Long count = exlTableConfMapper.countData(targetTableName,queryMap);
PageVo vo = new PageVo();
vo.initPageByTotal(count);
if(count>0){
// page
Integer pageSize = PageUtil.getPageSize();
Integer startRow = PageUtil.getStartRow();
queryMap.put("startRow",startRow);
queryMap.put("pageSize",pageSize);
List<Map<String,Object>> list = exlTableConfMapper.listData(targetTableName,queryMap);
vo.setList(list);
}else {
vo.setList(new ArrayList());
}
return R.ok(vo);
}
@NotNull
private Map<String, Object> buildQueryMap(Map<String, String> map, List<ExlColumnConf> columnList) {
Map<String,Object> queryMap = new HashMap<>(10);
// condition
List<ExlConditionDto> ge_conditions = new ArrayList<>();
List<ExlConditionDto> le_conditions = new ArrayList<>();
@ -93,29 +120,44 @@ public class ExlTableDataController {
}
}
}
// page
Integer pageSize = PageUtil.getPageSize();
Integer startRow = PageUtil.getStartRow();
// query
Map<String,Object> queryMap = new HashMap<>(10);
queryMap.put("startRow",startRow);
queryMap.put("pageSize",pageSize);
queryMap.put("leList",le_conditions);
queryMap.put("geList",ge_conditions);
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));
return queryMap;
}
/**
* 导出数据
* @param map
* @return
*/
@GetMapping("/export")
public R<?> export(@RequestParam Map<String,String> map){
String tableConfigId = map.get(ExlConst.TABLE_CONFIG_PARAM);
map.remove(ExlConst.TABLE_CONFIG_PARAM);
// table
ExlTableConf tableConf = exlTableConfService.getById(tableConfigId);
// columns
LambdaQueryWrapper<ExlColumnConf> columnLqw = new LambdaQueryWrapper<>();
columnLqw.eq(ExlColumnConf::getTableConfId,tableConfigId);
List<ExlColumnConf> columnList = exlColumnConfService.list(columnLqw);
// query
Map<String, Object> queryMap = buildQueryMap(map, columnList);
String targetTableName = ExlConst.TABLE_NAME_PRE + tableConf.getTableName();
List<Map<String,Object>> list = exlTableConfMapper.listData(targetTableName,queryMap);
return R.ok(list);
}
/**
* 新增
* @param param
* @param saveBo
* @return
*/
@PostMapping("/batchSave/{tableConfigId}")
public R<?> batchSave(@PathVariable Long tableConfigId, @RequestBody List<Object> param){
@PostMapping("/batchSave")
public R<?> batchSave( @RequestBody ExlBatchSaveBo saveBo){
List<Object> param = saveBo.getParam();
String tableConfigId = saveBo.getTb_config_cnf_id();
// table
ExlTableConf tableConf = exlTableConfService.getById(tableConfigId);
// columns
@ -124,6 +166,23 @@ public class ExlTableDataController {
List<ExlColumnConf> columnList = exlColumnConfService.list(columnLqw);
String targetTableName = ExlConst.TABLE_NAME_PRE + tableConf.getTableName();
//移除旧历史
int keyCount = (int) columnList.stream().filter(a -> a.getKeyFlag().equals(1)).count();
if(keyCount>0){
StringBuilder removeSql = new StringBuilder("delete from "+targetTableName+" where union_row_id in (");
for (int k = 0;k < param.size(); k++) {
Object obj = param.get(k);
JSONObject jsonObject = JSONObject.parseObject(JsonUtil.objectToJson(obj));
String unionId = TableCreateSqlUtil.buildUnionId(columnList,jsonObject);
removeSql.append("'"+unionId+"'");
if(k+1<param.size()){
removeSql.append(",");
}
}
removeSql.append(");");
QsSqlSessionUtil.executeSql(removeSql.toString(),sqlSessionTemplate);
}
//insert into table (cloumns) values (vals),(vals)
StringBuilder insertSql = new StringBuilder("insert into "+targetTableName +"( `union_row_id`,");
for (int i = 0; i < columnList.size(); i++) {

21
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<Object> param;
}

6
src/main/java/com/qs/serve/modules/exl/mapper/ExlTableConfMapper.java

@ -16,6 +16,12 @@ import java.util.Map;
public interface ExlTableConfMapper extends BaseMapper<ExlTableConf> {
@InterceptorIgnore(tenantLine = "1")
Long countData(@Param("tableName") String tableName,@Param("query")Map<String,Object> query);
@InterceptorIgnore(tenantLine = "1")
List<Map<String,Object>> pageData(@Param("tableName") String tableName,@Param("query")Map<String,Object> query);
@InterceptorIgnore(tenantLine = "1")
List<Map<String,Object>> listData(@Param("tableName") String tableName,@Param("query")Map<String,Object> query);

2
src/main/java/com/qs/serve/modules/oss/service/OssService.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.oss.service;
import com.aliyun.oss.OSS;
import com.qs.serve.modules.oss.entity.OssPolicySignVo;
/**
@ -14,5 +15,6 @@ public interface OssService {
*/
OssPolicySignVo getPolicySign();
OSS getOSSClient();
}

13
src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java

@ -25,6 +25,19 @@ public class OssServiceImpl implements OssService {
AliYunOssProperties aliYunOSSProperties;
@Override
public OSS getOSSClient() {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = aliYunOSSProperties.getEndpoint();
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = aliYunOSSProperties.getAccessKeyId();
String accessKeySecret = aliYunOSSProperties.getAccessKeySecret();
// 填写Bucket名称,例如examplebucket。
String bucketName = aliYunOSSProperties.getBucket();
// 创建OSSClient实例。
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
@Override
public OssPolicySignVo getPolicySign() {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。

4
src/main/java/com/qs/serve/modules/tbs/common/util/CostSort2WrapperUtil.java

@ -81,8 +81,8 @@ public class CostSort2WrapperUtil {
//商品排序
Collections.sort(list, (o1, o2) -> {
int len1 = o1.getConditionGoodsIds().split("_").length;
int len2 = o2.getConditionGoodsIds().split("_").length;
int len1 = o1.getConditionGoodsIds()==null?0:o1.getConditionGoodsIds().split("_").length;
int len2 = o2.getConditionGoodsIds()==null?0:o2.getConditionGoodsIds().split("_").length;
log.debug("时间区间相同,len1:{} , len2:{}",len1,len2);
return len2 - len1;
});

2
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -399,7 +399,7 @@ public class TbsActivityController {
@SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.DELETE)
@PreAuthorize("hasRole('tbs:activity:release')")
public R<?> release(@PathVariable("id") Long id){
verificationService.release(id);
verificationService.release(id,true);
return R.ok();
}

31
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetApplyOperationServiceImpl.java

@ -1,18 +1,30 @@
package com.qs.serve.modules.tbs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.modules.seeyon.service.SeeYonOperationService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.tbs.common.TbsBudgetCheckState;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil;
import com.qs.serve.modules.tbs.entity.TbsBudget;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import com.qs.serve.modules.tbs.service.TbsBudgetLogService;
import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 预算申请
* @author YenHex
@ -23,7 +35,9 @@ import org.springframework.stereotype.Service;
@AllArgsConstructor
public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationService {
private TbsBudgetMapper budgetMapper;
private final TbsBudgetMapper budgetMapper;
private final TbsBudgetLogService budgetLogService;
private final TbsScheduleItemBudgetService scheduleItemBudgetService;
@Override
public boolean checkSyFormIdIsNotNull(String targetId) {
@ -68,6 +82,21 @@ public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationServic
//启用预算
tbsBudget.setBudgetState(1);
budgetMapper.updateById(tbsBudget);
SysUser sysUser = getSysUserService().getById(AuthContextUtils.getSysUserId());
LambdaQueryWrapper<TbsScheduleItemBudget> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsScheduleItemBudget::getBudgetId,param.getTargetId());
List<TbsScheduleItemBudget> scheduleItemBudgets = scheduleItemBudgetService.list(lqw);
//保存预算流水日志
List<TbsBudgetLog> budgetLogList = new ArrayList<>();
for (TbsScheduleItemBudget scheduleItemBudget : scheduleItemBudgets) {
TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser, tbsBudget, scheduleItemBudget, BudgetLogOptFlag.State_0,scheduleItemBudget.getBudgetAmount());
if (budgetLog!=null){
budgetLogList.add(budgetLog);
}
}
budgetLogService.saveBatch(budgetLogList);
}
return null;
}

6
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java

@ -103,7 +103,7 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi
}
//更新金额
List<TbsBudgetChangeScheduleItem> changeScheduleItemList = tbsBudgetChangeScheduleItemService.listByChangeId(budgetChange.getId());
if(CollectionUtil.isNotEmpty(changeConditionList)){
if(CollectionUtil.isNotEmpty(changeScheduleItemList)){
List<Long> scheduleItemBudgetIds = changeScheduleItemList.stream().map(TbsBudgetChangeScheduleItem::getSourceId).collect(Collectors.toList());
List<TbsScheduleItemBudget> scheduleItemBudgetList = tbsScheduleItemBudgetService.listByIds(scheduleItemBudgetIds);
for (TbsScheduleItemBudget item : scheduleItemBudgetList) {
@ -127,7 +127,7 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi
boolean changeAmtIsNotNull = changeItem.getBudgetAmount()!=null&&changeItem.getNewBudgetAmount()!=null;
if(changeAmtIsNotNull && changeItem.getBudgetAmount().compareTo(changeItem.getNewBudgetAmount())!=0){
BudgetLogOptFlag optType;
BigDecimal amount = changeItem.getBudgetAmount().subtract(changeItem.getNewBudgetAmount());
BigDecimal amount = changeItem.getNewBudgetAmount().subtract(changeItem.getBudgetAmount());
if(amount.compareTo(BigDecimal.ZERO)>0){
optType = BudgetLogOptFlag.State_2;
}else if(amount.compareTo(BigDecimal.ZERO)<0){
@ -139,7 +139,7 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi
tbsBudgetLogService.save(budgetLog);
}
if(changeItem.getNewPreDispatchAmount()!=null){
item.setPreDispatchAmount(changeItem.getPreDispatchAmount());
item.setPreDispatchAmount(changeItem.getNewPreDispatchAmount());
tbsScheduleItemBudgetService.updateById(item);
}
}

4
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java

@ -140,7 +140,7 @@ public class TbsBudgetChangeServiceImpl extends ServiceImpl<TbsBudgetChangeMappe
TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget);
budgetChange.setOrgAttachIds(budget.getAttachIds());
budgetChange.setNewAttachIds(param.getAttachIds());
budgetChange.setChangeCode(CodeGenUtil.generate(CodeGenUtil.SourceKey.BudgetChange));
budgetChange.setChangeCode("BU"+CodeGenUtil.generate(CodeGenUtil.SourceKey.BudgetChange));
budgetChange.setUserId(sysUser.getId());
budgetChange.setUserCode(sysUser.getCode());
budgetChange.setUserName(sysUser.getName());
@ -185,7 +185,7 @@ public class TbsBudgetChangeServiceImpl extends ServiceImpl<TbsBudgetChangeMappe
resultItem.setChangeId(changeId);
//设置当前项调整的最终金额
for (TbsBudgetLogWithAmount withAmount : budgetLogWithAmountList) {
if(withAmount.getId().equals(scheduleItemBudget.getScheduleItemId())){
if(withAmount.getId().equals(scheduleItemBudget.getId())){
resultItem.setBudgetAmount(withAmount.getAmt());
break;
}

2
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java

@ -172,7 +172,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
budgetConditionService.remove(lqw);
}else {
budget = CopierUtil.copy(budgetBo,new TbsBudget());
budget.setBudgetNumber(CodeGenUtil.generate(CodeGenUtil.SourceKey.Budget));
budget.setBudgetNumber("BM"+CodeGenUtil.generate(CodeGenUtil.SourceKey.Budget));
}
List<Long> skuIds = budgetBo.getSkuIds();
List<Long> spuIds = budgetBo.getSpuIds();

2
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java

@ -280,7 +280,7 @@ public class VtbVerificationApplication {
//释放费用
boolean isRelease = affairCommit.getReleaseFlag()!=null&&affairCommit.getReleaseFlag().equals(1);
if( isRelease &&(isFinish||isStop)){
this.vtbVerificationService.release(verification.getActivityId());
this.vtbVerificationService.release(verification.getActivityId(),false);
}
if(isNext){
//判断是否直接跳过审批的申请

2
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java

@ -33,7 +33,7 @@ public interface VtbVerificationService extends IService<VtbVerification> {
* 释放活动费用
* @param activityId
*/
void release(Long activityId);
void release(Long activityId,Boolean throwEx);
/**
* 冻结

9
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -158,6 +158,8 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
activity.setUsedAmount(finalAmt);
if(finalAmt.compareTo(activity.getTotalAmount())==0) {
activity.setActivityState(TbsActivityState.STATE_1_Finished);
activity.setFinishedFlag(1);
activity.setFinishedTime(LocalDateTime.now());
}
activityService.updateById(activity);
@ -413,10 +415,13 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
@Override
@Transactional(rollbackFor = Exception.class)
public void release(Long activityId) {
public void release(Long activityId,Boolean throwEx) {
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
TbsActivity activity = activityService.getById(activityId);
if(!activity.getActivityState().equals(TbsActivityState.STATE_0_Todo)){
if(!throwEx){
return;
}
Assert.throwEx("活动状态非待核销状态,操作失败");
}
if(activity.getCancelFlag().equals(1)){
@ -515,7 +520,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
activity.setActivityState(TbsActivityState.STATE_1_Baning);
}else {
//解冻
activity.setReopenFlag(0);
activity.setReopenFlag(1);
if(this.checkCommitting(dbAct.getId())){
activity.setActivityState(TbsActivityState.STATE_1_Checking);
}else {

11
src/main/java/com/qs/serve/task/SysTask.java

@ -34,4 +34,15 @@ public class SysTask {
taskUserController.test();
}
/**
* 同步离职
*/
@Scheduled(cron="0 0 2 * * ?")
public void task2(){
AuthContextUtils.setTenant("001");
taskUserController.doLeave();
}
}

28
src/main/java/com/qs/serve/task/controller/TaskUserController.java

@ -5,7 +5,9 @@ import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.JsonUtil;
import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.entity.SysUserLeave;
import com.qs.serve.modules.sys.entity.dto.SyUser;
import com.qs.serve.modules.sys.service.SysUserLeaveService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
import com.qs.serve.modules.wx.service.WxUserService;
@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -35,6 +38,31 @@ public class TaskUserController {
SeeYonRequestBaseService seeYonRequestBaseService;
SysUserService sysUserService;
SysUserLeaveService sysUserLeaveService;
public R<?> doLeave(){
LambdaQueryWrapper<SysUserLeave> lqw = new LambdaQueryWrapper<>();
lqw.select(SysUserLeave::getUserId,SysUserLeave::getId);
lqw.le(SysUserLeave::getLeaveEffectDate, LocalDate.now());
lqw.eq(SysUserLeave::getLeaveStatus,0);
List<SysUserLeave> sysUserLeaves = sysUserLeaveService.list(lqw);
if(sysUserLeaves.size()<1){
return null;
}
for (SysUserLeave userLeaf : sysUserLeaves) {
userLeaf.setLeaveStatus(1);
}
sysUserLeaveService.updateBatchById(sysUserLeaves);
List<String> userIds = sysUserLeaves.stream().map(a->a.getUserId()).collect(Collectors.toList());
LambdaQueryWrapper<SysUser> updLqw = new LambdaQueryWrapper<>();
updLqw.in(SysUser::getId,userIds);
SysUser sysUser = new SysUser();
sysUser.setServingState(0);
sysUser.setServingLeaveDate(LocalDate.now());
sysUserService.update(sysUser,updLqw);
return R.ok();
}
/**
* 同步致远的用户到CRM

40
src/main/resources/mapper/exl/ExlTableConfMapper.xml

@ -30,30 +30,50 @@
exl_table_conf.`create_by`,
exl_table_conf.`update_by`,
exl_table_conf.`del_flag` </sql>
<select id="listData" resultType="java.util.Map">
select * from ${tableName}
<sql id="exlBaseWhere">
<where>
<if test="query.leList!=null and query.leList.size > 0">
<foreach collection="query.leList" item ="item" index="i" open="(" close=")" separator=",">
and ${item.column} &lt;= #{item.value}
and
<foreach collection="query.leList" item ="item" index="i" separator="and">
${item.column} &lt;= #{item.value}
</foreach>
</if>
<if test="query.geList!=null and query.geList.size > 0">
<foreach collection="query.geList" item ="item" index="i" open="(" close=")" separator=",">
and ${item.column} &gt;= #{item.value}
and
<foreach collection="query.geList" item ="item" index="i" separator="and">
${item.column} &gt;= #{item.value}
</foreach>
</if>
<if test="query.eqList!=null and query.eqList.size > 0">
<foreach collection="query.eqList" item ="item" index="i" open="(" close=")" separator=",">
and ${item.column} = #{item.value}
and
<foreach collection="query.eqList" item ="item" index="i" separator="and">
${item.column} = #{item.value}
</foreach>
</if>
<if test="query.likeList!=null and query.likeList.size > 0">
<foreach collection="query.likeList" item ="item" index="i" open="(" close=")" separator=",">
and ${item.column} like concat('%', #{item.value} ,'%')
and
<foreach collection="query.likeList" item ="item" index="i" separator="and">
${item.column} like concat('%', #{item.value} ,'%')
</foreach>
</if>
</where>
</sql>
<select id="listData" resultType="java.util.Map">
select * from ${tableName}
<include refid="exlBaseWhere"></include>
</select>
<select id="countData" resultType="java.lang.Long">
select count(*) from ${tableName}
<include refid="exlBaseWhere"></include>
</select>
<select id="pageData" resultType="java.util.Map">
select * from ${tableName}
<include refid="exlBaseWhere"></include>
limit #{query.startRow},#{query.pageSize}
</select>

Loading…
Cancel
Save