Compare commits

...

2 Commits

Author SHA1 Message Date
zhangwenzan d5fa78dce2 Merge remote-tracking branch 'origin/zhouzhenmin' into test 2025-07-24 16:10:44 +08:00
ZZM fa116ad31f 税务预检使用情况 2025-06-27 17:00:31 +08:00
10 changed files with 263 additions and 19 deletions

View File

@ -5,11 +5,8 @@ import com.kakarote.crm.service.ICrmQyfxjcjgService;
import com.kakarote.crm.service.ICrmUserAnalyseService;
import com.kakarote.crm.service.ICrmQyfxjcjgZbmxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.time.LocalDate;
@RestController
@RequestMapping("/crmGetV3Data")
@ -34,9 +31,9 @@ public class CrmGetV3SysRiskDataController {
return Result.ok(crmQyfxjcjgZbmxService.getQyfxjcjgZbmxListByJcId(jcId));
}
@PostMapping(value = "/getTaxPreCheckUsage/{queryDate}")
public Result getTaxPreCheckUsage(@PathVariable("queryDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate queryDate) throws IOException {
return Result.ok(iCrmUserAnalyseService.addUserAnalyse(queryDate));
@PostMapping(value = "/getTaxPreCheckUsage")
public Result getTaxPreCheckUsage() throws IOException {
return Result.ok(iCrmUserAnalyseService.addUserAnalyse());
}
}

View File

@ -15,6 +15,7 @@ import com.kakarote.crm.constant.CrmEnum;
import com.kakarote.crm.entity.BO.CrmSearchParamsBO;
import com.kakarote.crm.entity.PO.CrmActivity;
import com.kakarote.crm.entity.VO.CrmModelFiledVO;
import com.kakarote.crm.mapper.CrmInstrumentMapper;
import com.kakarote.crm.service.CrmInstrumentService;
import com.kakarote.crm.service.ICrmInstrumentSortService;
import com.kakarote.crm.service.ICrmUserAnalyseService;
@ -64,7 +65,6 @@ public class CrmInstrumentController {
private ICrmUserAnalyseService iCrmUserAnalyseService;
@PostMapping("/queryModelSort")
@ApiOperation("查询模块排序")
public Result<JSONObject> queryModelSort() {
@ -308,4 +308,12 @@ public class CrmInstrumentController {
}
@PostMapping("/getTaxPreCheckUsage")
@ApiOperation("获得税务预检使用情况")
public Result<JSONObject> getTaxPreCheckUsage(@RequestBody BiParams biParams){
System.out.println(biParams.getType());
JSONObject jsonObject = instrumentService.getTaxPreCheckUsage(biParams);
return R.ok(jsonObject);
}
}

View File

@ -43,7 +43,7 @@ public class CrmInstrumentSort implements Serializable {
@ApiModelProperty(value = "用户id")
private Long userId;
@ApiModelProperty(value = "模块id 1、合同金额目标及完成情况 2、数据汇总 3、回款金额目标及完成情况 4、业绩指标完成率 5、销售漏斗 6、遗忘提醒 7、排行榜")
@ApiModelProperty(value = "模块id 1、税务预检使用情况 2、合同金额目标及完成情况 3、数据汇总 4、回款金额目标及完成情况 5、业绩指标完成率 6、销售漏斗 7、遗忘提醒 8、排行榜")
private Integer modelId;
@ApiModelProperty(value = "列 1左侧 2右侧")

View File

@ -1,11 +1,31 @@
package com.kakarote.crm.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.kakarote.core.servlet.BaseMapper;
import com.kakarote.core.utils.BiTimeUtil;
import com.kakarote.crm.entity.PO.CrmUserAnalyse;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.Map;
@Mapper
public interface CrmUserAnalyseMapper extends BaseMapper<CrmUserAnalyse> {
// 自定义按月汇总方法
@Select("SELECT " +
" COALESCE(SUM(hyyhs), 0) AS hyyhs, " +
" COALESCE(SUM(syyhs), 0) AS syyhs, " +
" COALESCE(SUM(add_user), 0) AS add_user, " +
" COALESCE(SUM(add_qys), 0) AS add_qys " +
"FROM wk_crm_user_analyse ${ew.customSqlSegment}")
Map<String, Object> selectMonthlySummary(@Param(Constants.WRAPPER) Wrapper<CrmUserAnalyse> wrapper);
public Map<String, Object> getTaxPreCheckUsage(@Param("time") BiTimeUtil.BiTimeEntity entity, @Param("data") JSONObject object);
public Map<String, Object> getTaxPreCheckUsageMonthly(@Param("data") JSONObject object);
}

View File

@ -14,6 +14,35 @@
<result column="creat_by" jdbcType="VARCHAR" property="createBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
</resultMap>
<select id="getTaxPreCheckUsage" resultType="java.util.HashMap">
SELECT
<choose>
<when test="data.label == 1">syyhs</when>
<when test="data.label == 2">hyyhs</when>
<when test="data.label == 3">add_user</when>
<when test="data.label == 4">add_qys</when>
<otherwise>NULL</otherwise>
</choose> AS value
FROM wk_crm_user_analyse
WHERE time = #{time.beginTime}
ORDER BY time ASC
</select>
<select id="getTaxPreCheckUsageMonthly" resultType="java.util.HashMap">
SELECT
COALESCE(SUM(
<choose>
<when test="data != null and data.label == 1">syyhs</when>
<when test="data != null and data.label == 2">hyyhs</when>
<when test="data != null and data.label == 3">add_user</when>
<when test="data != null and data.label == 4">add_qys</when>
<otherwise>0</otherwise>
</choose>
), 0) AS value
FROM wk_crm_user_analyse
WHERE time BETWEEN #{data.start} AND #{data.end}
ORDER BY time ASC
</select>
</mapper>

View File

@ -73,4 +73,7 @@ public interface CrmInstrumentService {
BasePage<Map<String, Object>> unContactCustomerPageList(BiParams biParams);
JSONObject importRecordList(MultipartFile file,Integer crmType);
//
JSONObject getTaxPreCheckUsage(BiParams biParams);
}

View File

@ -1,18 +1,22 @@
package com.kakarote.crm.service;
import com.alibaba.fastjson.JSONObject;
import com.kakarote.core.feign.crm.entity.BiParams;
import com.kakarote.core.servlet.BaseService;
import com.kakarote.crm.entity.PO.CrmUserAnalyse;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Map;
public interface ICrmUserAnalyseService extends BaseService<CrmUserAnalyse> {
/**
* 添加CrmUserAnalyse
* @param queryDate
* @return
*/
int addUserAnalyse(LocalDate queryDate) throws IOException;
int addUserAnalyse() throws IOException;
}

View File

@ -13,6 +13,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kakarote.core.common.Const;
import com.kakarote.core.common.FieldEnum;
import com.kakarote.core.common.SystemCodeEnum;
@ -25,6 +26,7 @@ import com.kakarote.core.feign.admin.entity.SimpleUser;
import com.kakarote.core.feign.admin.service.AdminService;
import com.kakarote.core.feign.crm.entity.BiAuthority;
import com.kakarote.core.feign.crm.entity.BiParams;
import com.kakarote.core.feign.crm.service.CrmUserAnalyseService;
import com.kakarote.core.servlet.ApplicationContextHolder;
import com.kakarote.core.utils.BiTimeUtil;
import com.kakarote.core.utils.UserCacheUtil;
@ -40,6 +42,7 @@ import com.kakarote.crm.entity.BO.CrmSearchParamsBO;
import com.kakarote.crm.entity.PO.*;
import com.kakarote.crm.mapper.CrmActivityMapper;
import com.kakarote.crm.mapper.CrmInstrumentMapper;
import com.kakarote.crm.mapper.CrmUserAnalyseMapper;
import com.kakarote.crm.service.*;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -50,6 +53,9 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@ -98,6 +104,9 @@ public class CrmInstrumentServiceImpl implements CrmInstrumentService {
@Autowired
private CrmActivityMapper crmActivityMapper;
@Autowired
private CrmUserAnalyseMapper crmUserAnalyseMapper;
@Override
public JSONObject queryBulletin(BiParams biParams) {
BiTimeUtil.BiTimeEntity biTimeEntity = BiTimeUtil.analyzeTime(biParams);
@ -893,4 +902,160 @@ public class CrmInstrumentServiceImpl implements CrmInstrumentService {
throw new CrmException(SystemCodeEnum.SYSTEM_UPLOAD_FILE_ERROR);
}
}
@Override
public JSONObject getTaxPreCheckUsage(BiParams biParams) {
BiTimeUtil.BiTimeEntity record = null;
if (StrUtil.isNotEmpty(biParams.getType())) {
//如果传入的时间是年直接实例化record
if ("year".equals(biParams.getType()) || "lastYear".equals(biParams.getType())) {
record = BiTimeUtil.analyzeTime(biParams);//
} else {
//否则设置默认时间范围近12个月
String endTime = DateUtil.format(new Date(), "yyyy-MM-dd");//
String startTime = DateUtil.format(DateUtil.offsetMonth(new Date(), -12), "yyyy-MM-dd");
biParams.setStartTime(startTime);
biParams.setEndTime(endTime);
}
}
if (StrUtil.isNotEmpty(biParams.getStartTime()) && StrUtil.isNotEmpty(biParams.getEndTime())) {
Integer startMonth = Integer.valueOf(DateUtil.format(DateUtil.parse(biParams.getStartTime()), "yyyyMM"));
Integer endMonth = Integer.valueOf(DateUtil.format(DateUtil.parse(biParams.getEndTime()), "yyyyMM"));
if (endMonth - startMonth < 100) {
String endTime = DateUtil.format(new Date(), "yyyy-MM-dd");
String startTime = DateUtil.format(DateUtil.offsetMonth(new Date(), -12), "yyyy-MM-dd");
biParams.setStartTime(startTime);
biParams.setEndTime(endTime);
}
record = BiTimeUtil.analyzeTime(biParams);
}
if (record == null) {
return new JSONObject().fluentPut("list", new ArrayList<>());
}
Integer cycleNum = record.getCycleNum(); // 获取周期总数如12个月
Integer beginTime = record.getBeginTime(); // 获取起始时间整数格式
List<Map<String, Object>> recordList = new ArrayList<>(); // 装有Map集合的结果数据集
System.out.println("开始时间:"+record.getBeginTime());
System.out.println("结束时间:"+record.getFinalTime());
System.out.println("开始时间:"+record.getBeginDate());
System.out.println("结束时间:"+record.getEndDate());
if ("year".equals(biParams.getType())
|| "lastYear".equals(biParams.getType())
|| "quarter".equals(biParams.getType())
|| "lastQuarter".equals(biParams.getType()) ){
for (int i = 1; i <= cycleNum; i++) {
Map<String, Object> objectMap = new HashMap<>();
// 1. yyyyMM 转换为日期范围
YearMonth yearMonth = parseYearMonth(record.getBeginTime());
LocalDateTime start = yearMonth.atDay(1).atStartOfDay();
LocalDateTime end = yearMonth.plusMonths(1).atDay(1).atStartOfDay();
if (biParams.getLabel() == 0){
// 构建查询条件并执行查询
QueryWrapper<CrmUserAnalyse> wrapper = new QueryWrapper<>();
wrapper.between("time", start, end.minusNanos(1)); // 避免包含下个月第一天
//objectMap = crmUserAnalyseMapper.selectMonthlySummary(wrapper);
Map<String, Object> map = crmUserAnalyseMapper.selectMonthlySummary(wrapper);
objectMap.put("value",map);
} else {
// 构建查询条件并执行查询
JSONObject object = new JSONObject();
object.put("label", biParams.getLabel());
object.put("start", start);
object.put("end", end.minusNanos(1));
objectMap = crmUserAnalyseMapper.getTaxPreCheckUsageMonthly(object);
}
//2.生成前端显示标签
if (StrUtil.isNotEmpty(biParams.getType())) {
if ("yyyyMMdd".equals(record.getDateFormat())) {
objectMap.put("type", DateUtil.parse(beginTime.toString(), record.getDateFormat()).toDateStr().substring(5));
} else if ("yyyyMM".equals(record.getDateFormat())) {
objectMap.put("type", DateUtil.parse(beginTime.toString(), record.getDateFormat()).monthStartFromOne() + "");
}
} else {
objectMap.put("type", DateUtil.parse(beginTime.toString(), "yyyyMM").toString("yyyy-MM"));
}
// 3.收集结果 & 时间递增
recordList.add(objectMap);
beginTime = BiTimeUtil.estimateTime(beginTime); //根据时间格式自动递增
record.setBeginTime(beginTime);
}
}else {
for (int i = 1; i <= cycleNum; i++) {
Map<String, Object> objectMap = new HashMap<>();
if (biParams.getLabel() == 0) {
QueryWrapper<CrmUserAnalyse> wrapper = new QueryWrapper<>();
wrapper.select("syyhs", "hyyhs", "add_qys", "add_user");
wrapper.eq("time", record.getBeginTime());
CrmUserAnalyse userAnalyse = Optional.ofNullable(crmUserAnalyseMapper.selectOne(wrapper))
.orElse(new CrmUserAnalyse());
Map<String, Object> map = new HashMap<>();
map.put("hyyhs", Optional.ofNullable(userAnalyse.getHyyhs()).orElse(0));
map.put("syyhs", Optional.ofNullable(userAnalyse.getSyyhs()).orElse(0));
map.put("addQys", Optional.ofNullable(userAnalyse.getAddQys()).orElse(0));
map.put("addUser", Optional.ofNullable(userAnalyse.getAddUser()).orElse(0));
objectMap.put("value", map);
} else {
// 1 执行数据库查询
JSONObject object = new JSONObject();
object.put("label", biParams.getLabel());
//参数1biParams.getLabel()
//参数2record.getBeginTime()
//objectMap = crmInstrumentMapper.getTaxPreCheckUsage(record, object);
objectMap = Optional.ofNullable(
crmUserAnalyseMapper.getTaxPreCheckUsage(record, object)
)
.orElseGet(Collections::emptyMap) // 如果查询结果为null使用空Map
.entrySet() //一个map方法用来遍历集合中的entry里面放着k-v
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> Optional.ofNullable(entry.getValue()).orElse(0) // 将null值转换为0
));
}
//2.生成前端显示标签
if (StrUtil.isNotEmpty(biParams.getType())) {
if ("yyyyMMdd".equals(record.getDateFormat())) {
objectMap.put("type", DateUtil.parse(beginTime.toString(), record.getDateFormat()).toDateStr().substring(5));
} else if ("yyyyMM".equals(record.getDateFormat())) {
objectMap.put("type", DateUtil.parse(beginTime.toString(), record.getDateFormat()).monthStartFromOne() + "");
}
} else {
objectMap.put("type", DateUtil.parse(beginTime.toString(), "yyyyMM").toString("yyyy-MM"));
}
// 3.收集结果 & 时间递增
recordList.add(objectMap);
beginTime = BiTimeUtil.estimateTime(beginTime); //根据时间格式自动递增
record.setBeginTime(beginTime);
}
}
// 构建最终返回结果
JSONObject jsonObject = new JSONObject();
jsonObject.put("list", recordList);
return jsonObject;
}
// 解析年月参数
private YearMonth parseYearMonth(Integer monthParam) {
String str = String.format("%06d", monthParam); // 确保6位数字
return YearMonth.parse(str, DateTimeFormatter.ofPattern("yyyyMM"));
}
}

View File

@ -37,11 +37,12 @@ public class CrmInstrumentSortServiceImpl extends BaseServiceImpl<CrmInstrumentS
.eq(CrmInstrumentSort::getUserId, UserUtil.getUserId()).orderByAsc(CrmInstrumentSort::getSort).list();
if (list.size() == 0) {
list.add(new CrmInstrumentSort(1, 0, 1));
list.add(new CrmInstrumentSort(5, 0, 1));
list.add(new CrmInstrumentSort(7, 0, 1));
list.add(new CrmInstrumentSort(2, 0, 2));
list.add(new CrmInstrumentSort(4, 0, 2));
list.add(new CrmInstrumentSort(6, 0, 2));
list.add(new CrmInstrumentSort(2, 0, 1));
list.add(new CrmInstrumentSort(6, 0, 1));
list.add(new CrmInstrumentSort(8, 0, 1));
list.add(new CrmInstrumentSort(3, 0, 2));
list.add(new CrmInstrumentSort(5, 0, 2));
list.add(new CrmInstrumentSort(7, 0, 2));
}
Map<Integer, List<CrmInstrumentSort>> collect = list.stream().collect(Collectors.groupingBy(CrmInstrumentSort::getList));
return new JSONObject().fluentPut("left", collect.get(1)).fluentPut("right", collect.get(2));

View File

@ -1,6 +1,9 @@
package com.kakarote.crm.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.gson.Gson;
import com.kakarote.core.feign.crm.entity.BiParams;
import com.kakarote.core.servlet.BaseServiceImpl;
import com.kakarote.crm.entity.DTO.CrmTaxPreCheckUsageDTO;
import com.kakarote.crm.entity.PO.CrmUserAnalyse;
@ -14,8 +17,12 @@ import org.springframework.stereotype.Service;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.util.Date;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
@Service
public class CrmUserAnalyseServiceImpl extends BaseServiceImpl<CrmUserAnalyseMapper, CrmUserAnalyse> implements ICrmUserAnalyseService {
@ -27,7 +34,16 @@ public class CrmUserAnalyseServiceImpl extends BaseServiceImpl<CrmUserAnalyseMap
private String BASE_URL;
@Override
public int addUserAnalyse(LocalDate queryDate) throws IOException {
public int addUserAnalyse() throws IOException {
//测试数据
//LocalDate today = LocalDate.of(2023, 9, 28);
//获取当天凌晨1点的日期
LocalDate today = LocalDate.now();
//再获取昨天的日期
LocalDate queryDate = today.minusDays(1);
CrmUserAnalyse userAnalyse = getCrmUserAnalyse(queryDate);
@ -56,4 +72,5 @@ public class CrmUserAnalyseServiceImpl extends BaseServiceImpl<CrmUserAnalyseMap
return userAnalyse;
}
}