diff --git a/crm/src/main/java/com/kakarote/crm/controller/CrmGetV3SysRiskDataController.java b/crm/src/main/java/com/kakarote/crm/controller/CrmGetV3SysRiskDataController.java index 607d7d3..42fb942 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/CrmGetV3SysRiskDataController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/CrmGetV3SysRiskDataController.java @@ -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()); } } diff --git a/crm/src/main/java/com/kakarote/crm/controller/CrmInstrumentController.java b/crm/src/main/java/com/kakarote/crm/controller/CrmInstrumentController.java index 73a2d59..90241b7 100644 --- a/crm/src/main/java/com/kakarote/crm/controller/CrmInstrumentController.java +++ b/crm/src/main/java/com/kakarote/crm/controller/CrmInstrumentController.java @@ -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 io.swagger.annotations.Api; @@ -58,7 +59,6 @@ public class CrmInstrumentController { private CrmInstrumentService instrumentService; - @PostMapping("/queryModelSort") @ApiOperation("查询模块排序") public Result queryModelSort() { @@ -302,4 +302,12 @@ public class CrmInstrumentController { } + @PostMapping("/getTaxPreCheckUsage") + @ApiOperation("获得税务预检使用情况") + public Result getTaxPreCheckUsage(@RequestBody BiParams biParams){ + System.out.println(biParams.getType()); + JSONObject jsonObject = instrumentService.getTaxPreCheckUsage(biParams); + return R.ok(jsonObject); + } + } diff --git a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmInstrumentSort.java b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmInstrumentSort.java index 3456931..9e0677c 100644 --- a/crm/src/main/java/com/kakarote/crm/entity/PO/CrmInstrumentSort.java +++ b/crm/src/main/java/com/kakarote/crm/entity/PO/CrmInstrumentSort.java @@ -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右侧") diff --git a/crm/src/main/java/com/kakarote/crm/mapper/CrmUserAnalyseMapper.java b/crm/src/main/java/com/kakarote/crm/mapper/CrmUserAnalyseMapper.java index 41d3b51..d931cb1 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/CrmUserAnalyseMapper.java +++ b/crm/src/main/java/com/kakarote/crm/mapper/CrmUserAnalyseMapper.java @@ -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 { + // 自定义按月汇总方法 + @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 selectMonthlySummary(@Param(Constants.WRAPPER) Wrapper wrapper); + + public Map getTaxPreCheckUsage(@Param("time") BiTimeUtil.BiTimeEntity entity, @Param("data") JSONObject object); + + public Map getTaxPreCheckUsageMonthly(@Param("data") JSONObject object); } diff --git a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmUserAnalyseMapper.xml b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmUserAnalyseMapper.xml index 298cb91..6351c51 100644 --- a/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmUserAnalyseMapper.xml +++ b/crm/src/main/java/com/kakarote/crm/mapper/xml/CrmUserAnalyseMapper.xml @@ -14,6 +14,35 @@ - + + + + diff --git a/crm/src/main/java/com/kakarote/crm/service/CrmInstrumentService.java b/crm/src/main/java/com/kakarote/crm/service/CrmInstrumentService.java index cad543c..df340a3 100644 --- a/crm/src/main/java/com/kakarote/crm/service/CrmInstrumentService.java +++ b/crm/src/main/java/com/kakarote/crm/service/CrmInstrumentService.java @@ -73,4 +73,7 @@ public interface CrmInstrumentService { BasePage> unContactCustomerPageList(BiParams biParams); JSONObject importRecordList(MultipartFile file,Integer crmType); + + // + JSONObject getTaxPreCheckUsage(BiParams biParams); } diff --git a/crm/src/main/java/com/kakarote/crm/service/ICrmUserAnalyseService.java b/crm/src/main/java/com/kakarote/crm/service/ICrmUserAnalyseService.java index 686ced0..e7a34a5 100644 --- a/crm/src/main/java/com/kakarote/crm/service/ICrmUserAnalyseService.java +++ b/crm/src/main/java/com/kakarote/crm/service/ICrmUserAnalyseService.java @@ -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 - * @param queryDate * @return */ - int addUserAnalyse(LocalDate queryDate) throws IOException; + int addUserAnalyse() throws IOException; + + } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentServiceImpl.java index 13bec75..2ae8ff0 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentServiceImpl.java @@ -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> 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 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 wrapper = new QueryWrapper<>(); + wrapper.between("time", start, end.minusNanos(1)); // 避免包含下个月第一天 + //objectMap = crmUserAnalyseMapper.selectMonthlySummary(wrapper); + Map 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 objectMap = new HashMap<>(); + + if (biParams.getLabel() == 0) { + QueryWrapper 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 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()); + //参数1:biParams.getLabel() + //参数2,record.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")); + } } diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentSortServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentSortServiceImpl.java index ebb0a89..5afa477 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentSortServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmInstrumentSortServiceImpl.java @@ -37,11 +37,12 @@ public class CrmInstrumentSortServiceImpl extends BaseServiceImpl> collect = list.stream().collect(Collectors.groupingBy(CrmInstrumentSort::getList)); return new JSONObject().fluentPut("left", collect.get(1)).fluentPut("right", collect.get(2)); diff --git a/crm/src/main/java/com/kakarote/crm/service/impl/CrmUserAnalyseServiceImpl.java b/crm/src/main/java/com/kakarote/crm/service/impl/CrmUserAnalyseServiceImpl.java index be296dd..d13a2ad 100644 --- a/crm/src/main/java/com/kakarote/crm/service/impl/CrmUserAnalyseServiceImpl.java +++ b/crm/src/main/java/com/kakarote/crm/service/impl/CrmUserAnalyseServiceImpl.java @@ -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 implements ICrmUserAnalyseService { @@ -27,7 +34,16 @@ public class CrmUserAnalyseServiceImpl extends BaseServiceImpl