18 Commits

Author SHA1 Message Date
king
94bef88b74 综合销售情况表 调整月度,年度 报表数据 2026-03-24 18:35:39 +08:00
king
68717ae34f Merge branch 'refs/heads/master' into dev_js_20260323 2026-03-24 17:32:39 +08:00
king
27b8892c06 综合销售情况表 调整月度报表数据 2026-03-24 17:32:13 +08:00
shih
2731903d46 处理人员选择框查询问题,保养管理-保养方案列表启用停用实现 2026-03-24 16:24:07 +08:00
NewName
cadd79f47d Merge remote-tracking branch 'origin/master' 2026-03-24 11:11:04 +08:00
king
495c1bdfa4 Merge branch 'refs/heads/dev_js_20260323' 2026-03-24 08:22:11 +08:00
king
4d91edae40 综合销售情况表 调整合计值逻辑 2026-03-24 08:21:58 +08:00
king
8d59bd9dd9 Merge branch 'refs/heads/dev_js_20260323' 2026-03-23 19:12:27 +08:00
king
8e4b6326b6 综合销售情况表 调整合计值 2026-03-23 19:12:01 +08:00
NewName
43c0959060 Merge remote-tracking branch 'origin/master' 2026-03-23 19:05:00 +08:00
shih
70aac257c0 保养管理-保养计划、保养方案、保养工单、保养记录、保养记录相关后台代码 2026-03-23 18:59:28 +08:00
NewName
77f434ddaa Merge branch 'dev_2026-03-23' 2026-03-23 18:59:18 +08:00
king
1ebbc22aaf Merge branch 'refs/heads/dev_js_20260317' 2026-03-23 16:53:03 +08:00
king
d7128d6e67 综合销售情况表 查询合计值 2026-03-23 16:52:51 +08:00
king
57a88b6dba Merge branch 'refs/heads/dev_js_20260317' 2026-03-23 16:43:16 +08:00
king
813660cf93 综合销售情况表 查询合计值 2026-03-23 16:43:05 +08:00
king
5d6814bdef Merge branch 'refs/heads/dev_js_20260317' 2026-03-23 16:40:57 +08:00
king
e7bc45add5 综合销售情况表 查询合计值 2026-03-23 16:38:05 +08:00
34 changed files with 1758 additions and 268 deletions

View File

@@ -0,0 +1,39 @@
package com.lideeyunji.core.framework.controller;
import com.lideeyunji.core.framework.service.IByglByfaService;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import com.lideeyunji.tool.framework.constants.FrameErrorCodeConstants;
import com.lideeyunji.tool.framework.yunji.model.global.BaseWebResult;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Tag(name = "保养管理-保养方案")
@RestController
@AllArgsConstructor
@RequestMapping(lideeYunJiBaseConstant.REQUEST_URL_START + "/bygl")
public class ByglController extends BaseController {
private final IByglByfaService byglByfaService;
@PostMapping("/changeFaState")
public BaseWebResult save(@RequestBody Map<String,Object> model) {
String state = lideeYunJiUtils.getMap2Str(model, "state");
String id = lideeYunJiUtils.getMap2Str(model, "id");
if(StringUtils.isBlank(id)){
return BaseWebResult.error(FrameErrorCodeConstants.FRAME_OP_ERROR);
}
byglByfaService.changeFaState(id, state);
return BaseWebResult.success("成功");
}
}

View File

@@ -0,0 +1,87 @@
package com.lideeyunji.core.framework.controller;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount;
import com.lideeyunji.core.framework.params.SaAggParam;
import com.lideeyunji.core.framework.service.INewGrBiSaAggMonthCountService;
import com.lideeyunji.core.framework.service.INewGrBiSaAggYearCountService;
import com.lideeyunji.core.framework.utils.FuncWeb;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import com.lideeyunji.tool.framework.tenant.core.aop.TenantIgnore;
import com.lideeyunji.tool.framework.yunji.model.global.BaseWebResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 综合销售情况月维度Controller
*
* @author king
* @date 2026-03-19
*/
@TenantIgnore
@RestController
@RequestMapping(lideeYunJiBaseConstant.REQUEST_URL_START+"/agg/month")
public class NewGrBiSaAggMonthCountController extends BaseController
{
@Autowired
private INewGrBiSaAggMonthCountService newGrBiSaAggMonthCountService;
@Autowired
private INewGrBiSaAggYearCountService newGrBiSaAggYearCountService;
/**
* 查询综合销售情况月维度-总计
*/
// @PreAuthorize("@ss.hasPermission('agg:month:total:detail')")
@PostMapping("/total/detail")
public BaseWebResult getTotalDetail(HttpServletRequest req)
{
Map<String, Object> params = FuncWeb.getParameterBodyMap(req);
String groupField = params.containsKey("Group by") ? "usemonth" :params.get("Group by").toString();
SaAggParam saAggParam = new SaAggParam();
if (params.containsKey("usemonth")){
saAggParam.setUseMonth(params.get("usemonth").toString());
}
if(params.containsKey("useyear")){
saAggParam.setUseYear(params.get("useyear").toString());
}else{
saAggParam.setUseYear(new SimpleDateFormat("yyyy").format(new Date()));
}
if(params.containsKey("customname")){
saAggParam.setCustomName(Arrays.asList(params.get("customname").toString().split(",")));
}
if (params.containsKey("zonename")){
saAggParam.setZoneName(Arrays.asList(params.get("zonename").toString().split( ",")));
}
if (params.containsKey("saletypename")){
saAggParam.setSaleTypeName(Arrays.asList(params.get("saletypename").toString().split( ",")));
}
if (params.containsKey("salername")){
saAggParam.setSalerName(Arrays.asList(params.get("salername").toString().split( ",")));
}
if (params.containsKey("dosagename")){
saAggParam.setDosageName(Arrays.asList(params.get("dosagename").toString().split( ",")));
}
if (params.containsKey("stdGoodsName")){
saAggParam.setStdGoodsName(Arrays.asList(params.get("stdGoodsName").toString().split( ",")));
}
if (params.containsKey("usemonth") || groupField.contains("usemonth")){
List<NewGrBiSaAggMonthCount> list = newGrBiSaAggMonthCountService.getTotalDetail(saAggParam);
return BaseWebResult.success(list);
}else{
List<NewGrBiSaAggYearCount> list = newGrBiSaAggYearCountService.getTotalDetail(saAggParam);
return BaseWebResult.success(list);
}
}
}

View File

@@ -0,0 +1,96 @@
package com.lideeyunji.core.framework.controller;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount;
import com.lideeyunji.core.framework.params.SaAggParam;
import com.lideeyunji.core.framework.service.INewGrBiSaAggYearCountService;
import com.lideeyunji.core.framework.utils.FuncWeb;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import com.lideeyunji.tool.framework.tenant.core.aop.TenantIgnore;
import com.lideeyunji.tool.framework.yunji.model.global.BaseWebResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 综合销售情况年维度Controller
*
* @author king
* @date 2026-03-19
*/
@TenantIgnore
@RestController
@RequestMapping(lideeYunJiBaseConstant.REQUEST_URL_START+"/agg/year")
public class NewGrBiSaAggYearCountController extends BaseController
{
@Autowired
private INewGrBiSaAggYearCountService newGrBiSaAggYearCountService;
// /**
// * 查询综合销售情况年维度-总计
// */
//// @PreAuthorize("@ss.hasPermi('agg:month:total:detail')")
// @PostMapping("/total/detail")
// public BaseWebResult getTotalDetail(HttpServletRequest req) {
// Map<String, Object> params = FuncWeb.getParameterBodyMap(req);
// SaAggParam saAggParam = new SaAggParam();
// String groupField = params.get("Group by").toString();
// LinkedList<String> groupFieldList = new LinkedList<>(Arrays.asList(groupField.split(",")));
//
// if (params.containsKey("useyear")) {
// saAggParam.setUseYear(params.get("useyear").toString());
// if (!groupField.contains("useyear")) {
// groupFieldList.addFirst("useyear");
// }
// }
// if (params.containsKey("customname")) {
// saAggParam.setCustomName(Arrays.asList(params.get("customname").toString().split( ",")));
// if (!groupField.contains("customname")) {
// groupFieldList.addLast("customname");
// }
// }
// if (params.containsKey("zonename")) {
// saAggParam.setZoneName(Arrays.asList(params.get("zonename").toString().split( ",")));
// if (!groupField.contains("zonename")) {
// groupFieldList.addLast("zonename");
// }
// }
// if (params.containsKey("saletypename")) {
// saAggParam.setSaleTypeName(Arrays.asList(params.get("saletypename").toString().split( ",")));
// if (!groupField.contains("saletypename")) {
// groupFieldList.addLast("saletypename");
// }
// }
//
// if (params.containsKey("salername")) {
// saAggParam.setSalerName(Arrays.asList(params.get("salername").toString().split( ",")));
// if (!groupField.contains("salername")) {
// groupFieldList.addLast("salername");
// }
// }
// if (params.containsKey("dosagename")) {
// saAggParam.setDosageName(Arrays.asList(params.get("dosagename").toString().split( ",")));
// if (!groupField.contains("dosagename")) {
// groupFieldList.addLast("dosagename");
// }
// }
// if (params.containsKey("stdGoodsName")) {
// saAggParam.setStdGoodsName(Arrays.asList(params.get("stdGoodsName").toString().split( ",")));
// if (!groupField.contains("stdGoodsName")) {
// groupFieldList.addLast("stdGoodsName");
// }
// }
// saAggParam.setGroupFieldList(groupFieldList);
// List<NewGrBiSaAggYearCount> list = newGrBiSaAggYearCountService.getTotalDetail(saAggParam);
// return BaseWebResult.success(list);
// }
}

View File

@@ -0,0 +1,70 @@
package com.lideeyunji.core.framework.enhance.example.report.bygl;
import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext;
import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin;
import com.lideeyunji.core.framework.mapper.ByglByjhMapper;
import com.lideeyunji.core.framework.utils.Func;
import com.lideeyunji.tool.framework.common.constant.ByglConstant;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
/**
* 保养管理-保养方案
*/
@Slf4j
@Component("byglByfaPlugin")
public class ByglByfaPlugin implements AroundAdvicePlugin {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
private static final String SCHEME_ID_PREFIX = "FA";
@Autowired
private ByglByjhMapper byglByjhMapper;
@Override
public void beforeExecute(EnhanceContext enhanceContext) {
Map<String, Object> params = enhanceContext.getParam().getParams();
//新增方法默认状态字段(1启用)
params.put("state", ByglConstant.FA_STATE_QY);
// 获取并验证scheme_id
String scheme_id = lideeYunJiUtils.getMap2Str(params, "scheme_id");
boolean needGenerateNewId = shouldGenerateNewSchemeId(scheme_id);
if(needGenerateNewId){
String newSchemeId = generateSchemeId();
params.put("scheme_id", newSchemeId);
log.info("生成新方案ID: {}", newSchemeId);
}
}
@Override
public void afterExecute(EnhanceContext enhanceContext) {
}
/**
* 判断是否需要生成新的方案ID
*/
private boolean shouldGenerateNewSchemeId(String scheme_id) {
if(StringUtils.isBlank(scheme_id)){
return true;
}
Map<String, Object> existingScheme = byglByjhMapper.getSchemeBySchemeId(scheme_id);
return Func.isNotEmpty(existingScheme);
}
/**
* 生成方案ID
* 格式FA + 时间戳yyyyMMddHHmmss
*/
private String generateSchemeId() {
return SCHEME_ID_PREFIX + LocalDateTime.now().format(DATE_TIME_FORMATTER);
}
}

View File

@@ -0,0 +1,176 @@
package com.lideeyunji.core.framework.enhance.example.report.bygl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.lideeyunji.core.framework.adapter.FrameWorkAdapter;
import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext;
import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin;
import com.lideeyunji.core.framework.entity.ByManagementGd;
import com.lideeyunji.core.framework.entity.ByManagementJl;
import com.lideeyunji.core.framework.entity.ByManagementYs;
import com.lideeyunji.core.framework.mapper.ByManagementGdMapper;
import com.lideeyunji.core.framework.mapper.ByManagementJlMapper;
import com.lideeyunji.core.framework.mapper.ByManagementYsMapper;
import com.lideeyunji.core.framework.mapper.ByglByjhMapper;
import com.lideeyunji.tool.framework.common.constant.ByglConstant;
import com.lideeyunji.tool.framework.common.util.object.BeanUtils;
import com.lideeyunji.tool.framework.yunji.tool.spring.SpringUtils;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Map;
/**
* 保养管理-保养工单编辑
*/
@Slf4j
@Component("byglBygdBjPlugin")
public class ByglBygdBjPlugin implements AroundAdvicePlugin {
/**
* 操作类型常量
*/
private static final String SUBMIT_TYPE_CL = "cl";
private static final String SUBMIT_TYPE_YS = "ys";
/**
* 状态常量
*/
private static final int NOT_DELETED = 0;
@Autowired
private ByglByjhMapper byglByjhMapper;
@Autowired
private ByManagementJlMapper byManagementJlMapper;
@Autowired
private ByManagementYsMapper byManagementYsMapper;
@Autowired
private ByManagementGdMapper byManagementGdMapper;
@Override
public void beforeExecute(EnhanceContext enhanceContext) {
Map<String, Object> params = enhanceContext.getParam().getParams();
String submit_type = lideeYunJiUtils.getMap2Str(params, "submit_type");
log.info("开始处理工单操作submit_type: {}", submit_type);
if(StringUtils.isBlank(submit_type)){
log.info("submit_type为空跳过处理");
return;
}
String id = lideeYunJiUtils.getMap2Str(params, "id");
validateParams(id, submit_type);
FrameWorkAdapter adapter = SpringUtils.getBean(FrameWorkAdapter.class);
switch (submit_type) {
case SUBMIT_TYPE_CL://处理操作
handleClOperation(id, params, adapter);
break;
case SUBMIT_TYPE_YS://验收操作
handleYsOperation(id, params, adapter);
break;
}
}
@Override
public void afterExecute(EnhanceContext enhanceContext) {
}
/**
* 验收操作
*/
private void handleYsOperation(String id, Map<String, Object> params, FrameWorkAdapter adapter) {
String gdys_yj = lideeYunJiUtils.getMap2Str(params, "gdys_yj");
String pjxj = lideeYunJiUtils.getMap2Str(params, "pjxj");
ByManagementJl jl = byManagementJlMapper.selectById(id);
jl.setYsTime(DateUtil.now());
jl.setPjxj(pjxj);
jl.setState(ByglConstant.YSZT_STATE_YYS);
jl.setGdysYj(gdys_yj);
jl.setUpdateTime(LocalDateTime.now());
jl.setUpdateUser(adapter.getOnlineUserId());
byManagementJlMapper.updateById(jl);
ByManagementYs ys = BeanUtils.toBean(jl, ByManagementYs.class);
if(ys == null){
throw new RuntimeException("对象转换失败");
}
byManagementYsMapper.updateById(ys);
log.info("工单验收成功ID: {}", id);
}
/**
* 处理操作
*/
private void handleClOperation(String id, Map<String, Object> params, FrameWorkAdapter adapter) {
String bygd_cljg = lideeYunJiUtils.getMap2Str(params, "bygd_cljg");
int result = byglByjhMapper.updateClBygd(id, bygd_cljg, ByglConstant.BY_STATE_YWC);
if (result <= 0) {
log.info("工单处理失败ID: {}", id);
return;
}
ByManagementGd gd = byManagementGdMapper.selectById(id);
ByManagementJl jl = createByManagementJl(gd, adapter);
byManagementJlMapper.insert(jl);
syncToYsTable(jl);
log.info("工单处理成功ID: {}", id);
}
/**
* 创建保养记录
*/
private ByManagementJl createByManagementJl(ByManagementGd gd, FrameWorkAdapter adapter) {
ByManagementJl jl = new ByManagementJl();
jl.setId(IdWorker.getId());
jl.setOrderId(gd.getOrderId());
jl.setOrderName(gd.getOrderName());
jl.setEquipmentInfo(gd.getEquipmentInfo());
jl.setUpkeepLevel(gd.getUpkeepLevel());
jl.setUpkeepTime(gd.getUpkeepTime());
jl.setPriority(gd.getPriority());
jl.setState(ByglConstant.YSZT_STATE_DYS);
jl.setExecutor(gd.getExecutor());
jl.setCreateTime(LocalDateTime.now());
jl.setCreateUser(adapter.getOnlineUserId());
jl.setIsDeleted(NOT_DELETED);
return jl;
}
/**
* 同步到验收表
*/
private void syncToYsTable(ByManagementJl jl) {
ByManagementYs ys = BeanUtils.toBean(jl, ByManagementYs.class);
if(ys == null){
throw new RuntimeException("对象转换失败");
}
byManagementYsMapper.insert(ys);
}
/**
* 参数校验
*/
private void validateParams(String id, String submit_type) {
if(StringUtils.isBlank(id)){
throw new IllegalArgumentException("工单ID不能为空");
}
if(!SUBMIT_TYPE_CL.equals(submit_type) && !SUBMIT_TYPE_YS.equals(submit_type)){
throw new IllegalArgumentException("不支持的操作类型: " + submit_type);
}
}
}

View File

@@ -0,0 +1,68 @@
package com.lideeyunji.core.framework.enhance.example.report.bygl;
import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext;
import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin;
import com.lideeyunji.core.framework.mapper.ByglByjhMapper;
import com.lideeyunji.core.framework.utils.Func;
import com.lideeyunji.tool.framework.common.constant.ByglConstant;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
/**
* 保养管理-保养工单
*/
@Slf4j
@Component("byglBygdPlugin")
public class ByglBygdPlugin implements AroundAdvicePlugin {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
private static final String ORDER_ID_PREFIX = "GD";
@Autowired
private ByglByjhMapper byglByjhMapper;
@Override
public void beforeExecute(EnhanceContext enhanceContext) {
Map<String, Object> params = enhanceContext.getParam().getParams();
//新增方法默认状态字段
params.put("order_state",ByglConstant.GD_STATE_DKS);
String order_id = lideeYunJiUtils.getMap2Str(params, "order_id");
boolean needGenerateNewId = shouldGenerateNewOrderId(order_id);
if(needGenerateNewId){
String newOrderId = generateOrderId();
params.put("order_id",newOrderId);
log.info("生成新工单ID: {}", newOrderId);
}
}
@Override
public void afterExecute(EnhanceContext enhanceContext) {
}
/**
* 判断是否需要生成新的工单ID
*/
private boolean shouldGenerateNewOrderId(String order_id) {
if(StringUtils.isBlank(order_id)){
return true;
}
Map<String, Object> existingOrder = byglByjhMapper.getOrderByPlanId(order_id);
return Func.isNotEmpty(existingOrder);
}
/**
* 生成工单ID
* 格式GD + 时间戳yyyyMMddHHmmss
*/
private String generateOrderId() {
return ORDER_ID_PREFIX + LocalDateTime.now().format(DATE_TIME_FORMATTER);
}
}

View File

@@ -0,0 +1,43 @@
package com.lideeyunji.core.framework.enhance.example.report.bygl;
import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext;
import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin;
import com.lideeyunji.core.framework.mapper.ByglByjhMapper;
import com.lideeyunji.core.framework.utils.Func;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 保养管理-保养计划-列表
*/
@Slf4j
@Component("byglByjlLbPlugin")
public class ByglByjhLbPlugin implements AroundAdvicePlugin {
@Autowired
private ByglByjhMapper byglByjhMapper;
@Override
public void beforeExecute(EnhanceContext enhanceContext) {
}
@Override
public void afterExecute(EnhanceContext enhanceContext) {
List<Map<String, Object>> records = enhanceContext.getResult().getRecords();
if (Func.isEmpty(records)) {
return;
}
for (Map<String, Object> record : records) {
String plan_id = lideeYunJiUtils.getMap2Str(record, "plan_id");
Map<String, Object> countByPlanId = byglByjhMapper.getCountByPlanId(plan_id);
record.put("plan_count",lideeYunJiUtils.getMap2Long(countByPlanId,"jhs"));
record.put("completed_count",lideeYunJiUtils.getMap2Long(countByPlanId,"wcs"));
}
}
}

View File

@@ -0,0 +1,70 @@
package com.lideeyunji.core.framework.enhance.example.report.bygl;
import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext;
import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin;
import com.lideeyunji.core.framework.mapper.ByglByjhMapper;
import com.lideeyunji.core.framework.utils.Func;
import com.lideeyunji.tool.framework.common.constant.ByglConstant;
import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
/**
* 保养管理-保养计划-新增
*/
@Slf4j
@Component("byglByjhPlugin")
public class ByglByjhPlugin implements AroundAdvicePlugin {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
private static final String PLAN_ID_PREFIX = "BYJH";
@Autowired
private ByglByjhMapper byglByjhMapper;
@Override
public void beforeExecute(EnhanceContext enhanceContext) {
Map<String, Object> params = enhanceContext.getParam().getParams();
//新增方法默认状态字段
params.put("plan_state", ByglConstant.JH_STATE_JXZ);
String plan_id = lideeYunJiUtils.getMap2Str(params, "plan_id");
boolean needGenerateNewId = shouldGenerateNewPlanId(plan_id);
if(needGenerateNewId){
String newPlanId = generatePlanId();
params.put("plan_id",newPlanId);
log.info("生成新计划ID: {}", newPlanId);
}
}
@Override
public void afterExecute(EnhanceContext enhanceContext) {
}
/**
* 判断是否需要生成新的计划ID
*/
private boolean shouldGenerateNewPlanId(String plan_id) {
if(StringUtils.isBlank(plan_id)){
return true;
}
Map<String, Object> existingPlan = byglByjhMapper.getPlanByPlanId(plan_id);
return Func.isNotEmpty(existingPlan);
}
/**
* 生成计划ID
* 格式BYJH + 时间戳yyyyMMddHHmmss
*/
private String generatePlanId() {
return PLAN_ID_PREFIX + LocalDateTime.now().format(DATE_TIME_FORMATTER);
}
}

View File

@@ -3,10 +3,13 @@ package com.lideeyunji.core.framework.enhance.example.report.xtsy;
import com.lideeyunji.core.framework.config.aspect.enhancereport.model.EnhanceReportContext;
import com.lideeyunji.core.framework.config.aspect.enhancereport.plugin.ReportBeforeAdvicePlugin;
import com.lideeyunji.tool.framework.exception.lideeYunJiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -22,8 +25,14 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
log.info("进入=======>zhxsqkLineReportEnhance=======>execute");
Map<String, Object> params = enhanceContext.getParam().getParams();
if (params.containsKey("Group by")) {
if(params.containsKey("goodsname")){
throw new lideeYunJiException("在选择维度时,“货品名称”不能有值!");
}
List<String> groupFieldList = Arrays.asList(params.get("Group by").toString().split(","));
String sql;
if(!params.containsKey("useyear")){
params.put("useyear", new SimpleDateFormat("yyyy").format(new Date()));
}
if((groupFieldList.contains("usemonth") || params.containsKey("usemonth"))){
sql = geroupMonthSql(params, groupFieldList);
}else {
@@ -56,143 +65,233 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" current_year_data.std_goods_name as stdGoodsName, \n");
}
executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year_data.province_id ORDER BY current_year_data.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID
executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year_data.province_name ORDER BY current_year_data.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称
executePluginSql.append(" current_year_data.province_id as province_id, \n"); //行政区域ID
executePluginSql.append(" current_year_data.province_name as province_name, \n"); //行政区域名称
executePluginSql.append(" SUM(current_year_data.this_year_sa_qty) AS thissaqty, \n"); //本年销量
executePluginSql.append(" ROUND(SUM(current_year_data.this_year_sa_money) / 10000, 2) AS thissamoney, \n"); //本年销售金额(元)
executePluginSql.append(" ROUND(SUM(current_year_data.this_year_profit) / 10000, 2) AS thisprofit, \n"); //本年毛利额(元)
executePluginSql.append(" ROUND(SUM(current_year_data.this_year_cost) / 10000, 2) AS thiscost, \n");//本年销售成本(元)
executePluginSql.append(" SUM(last_year_data.last_year_sa_qty) AS lastYearSaQty, \n"); //上年销量
executePluginSql.append(" ROUND(SUM(last_year_data.last_year_sa_money) / 10000, 2) AS lastYearSaMoney, \n"); //上年销售金额(元)
executePluginSql.append(" ROUND(SUM(last_year_data.last_year_profit) / 10000, 2) AS lastYearProfit, \n");//上年毛利额(元)
executePluginSql.append(" ROUND(SUM(last_year_data.last_year_cost) / 10000, 2) AS lastYearCost, \n"); //上年销售成本(元)
executePluginSql.append(" current_year_data.this_year_sa_qty AS thissaqty, \n"); //本年销量
executePluginSql.append(" ROUND(current_year_data.this_year_sa_money / 10000, 2) AS thissamoney, \n"); //本年销售金额(元)
executePluginSql.append(" ROUND(current_year_data.this_year_profit / 10000, 2) AS thisprofit, \n"); //本年毛利额(元)
executePluginSql.append(" ROUND(current_year_data.this_year_cost / 10000, 2) AS thiscost, \n");//本年销售成本(元)
executePluginSql.append(" last_year_data.last_year_sa_qty AS lastYearSaQty, \n"); //上年销量
executePluginSql.append(" ROUND(last_year_data.last_year_sa_money / 10000, 2) AS lastYearSaMoney, \n"); //上年销售金额(元)
executePluginSql.append(" ROUND(last_year_data.last_year_profit / 10000, 2) AS lastYearProfit, \n");//上年毛利额(元)
executePluginSql.append(" ROUND(last_year_data.last_year_cost / 10000, 2) AS lastYearCost, \n"); //上年销售成本(元)
// executePluginSql.append(" ROUND(avg(current_year_data.profit_change), 2) as profitchange, \n"); //毛利变动(元)
// executePluginSql.append(" ROUND(avg(current_year_data.profit_growth), 2) as profitgrowth, \n"); //毛利额增长率
// executePluginSql.append(" ROUND(avg(current_year_data.this_profit_rate), 2) as thisprofitrate, \n"); //本年毛利率
executePluginSql.append(" COALESCE(ROUND(sum(current_year_data.this_year_sa_money) / SUM(total_year_data.this_year_sa_money_sum) * 100, 2), 0) AS this_year_sa_money_share, \n");//上年销售金额占比
executePluginSql.append(" COALESCE (ROUND( sum(current_year_data.this_year_profit)/SUM(total_year_data.this_year_profit_sum) * 100, 2), 0 ) as thisprofitshare, \n"); //本年毛利额占比
// executePluginSql.append(" CONCAT(ROUND((max(total_year_data.this_year_sa_money_sum))/100000000 ,2), '亿') AS thissamoney_s, \n");
// executePluginSql.append(" CONCAT(ROUND((max(total_year_data.this_year_profit_sum))/100000000 ,2), '亿') AS thisprofit_s, \n");
executePluginSql.append(" COALESCE(ROUND(current_year_data.this_year_sa_money / total_year_data.this_year_sa_money_sum * 100, 2), 0) AS this_year_sa_money_share, \n");//上年销售金额占比
executePluginSql.append(" COALESCE (ROUND(current_year_data.this_year_profit/total_year_data.this_year_profit_sum * 100, 2), 0 ) as thisprofitshare, \n"); //本年毛利额占比
executePluginSql.append(" -- 数量同比(原有) \n");
executePluginSql.append(" CASE \n");
executePluginSql.append(" WHEN (CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_qty = 0 THEN IF(current_year_data.this_year_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_qty - last_year_data.last_year_sa_qty) / last_year_data.last_year_sa_qty * 100 END) > 0 THEN \n");;
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_year_data.last_year_sa_qty = 0 THEN IF(current_year_data.this_year_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_qty - last_year_data.last_year_sa_qty) / last_year_data.last_year_sa_qty * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_qty = 0 THEN IF(current_year_data.this_year_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_qty - last_year_data.last_year_sa_qty) / last_year_data.last_year_sa_qty * 100 END) < 0 THEN \n");;
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_year_data.last_year_sa_qty = 0 THEN IF(current_year_data.this_year_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_qty - last_year_data.last_year_sa_qty) / last_year_data.last_year_sa_qty * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS saqty_yoy, \n"); //数量同比
executePluginSql.append(" -- 销售金额同比(原有新增) \n");
executePluginSql.append(" CASE \n");
executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比
executePluginSql.append(" -- 新增:毛利同比 \n");
executePluginSql.append(" CASE \n");
executePluginSql.append(" CASE \n");
executePluginSql.append(" -- 正数红色圆点emoji + 数值 + % \n");
executePluginSql.append("WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year_data.this_year_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year_data.this_year_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_profit = 0 THEN IF(current_year_data.this_year_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_profit - last_year_data.last_year_profit) / last_year_data.last_year_profit * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_year_data.last_year_profit = 0 THEN IF(current_year_data.this_year_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_profit - last_year_data.last_year_profit) / last_year_data.last_year_profit * 100 END), 2)) \n");
executePluginSql.append(" -- 负数绿色圆点emoji + 数值 + % \n");
executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year_data.this_year_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year_data.this_year_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_profit = 0 THEN IF(current_year_data.this_year_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_profit - last_year_data.last_year_profit) / last_year_data.last_year_profit * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_year_data.last_year_profit = 0 THEN IF(current_year_data.this_year_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_profit - last_year_data.last_year_profit) / last_year_data.last_year_profit * 100 END), 2)) \n");
executePluginSql.append(" -- 0值直接显示 \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS profit_yoy, \n"); //本年毛利同比
executePluginSql.append(" CASE WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" CASE \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END) > 0 THEN \n");;
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END) < 0 THEN \n");;
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_year_data.last_year_sa_money = 0 THEN IF(current_year_data.this_year_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_year_data.this_year_sa_money - last_year_data.last_year_sa_money) / last_year_data.last_year_sa_money * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS samoneygrowth \n"); //本年销售金额增长率
executePluginSql.append(" FROM \n");
executePluginSql.append(" new_gr_bi_sa_agg_year_count as current_year_data \n");
executePluginSql.append(" (SELECT use_year , \n");
executePluginSql.append(" use_year AS ny, \n");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" custom_name , \n");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" std_goods_name, \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" zone_name, \n");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" sale_type_name, \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" dosage_name, \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id, \n");
executePluginSql.append(" saler_name, \n");
}
executePluginSql.append(" GROUP_CONCAT(DISTINCT province_id ORDER BY province_id SEPARATOR ',') AS province_id, \n");
executePluginSql.append(" GROUP_CONCAT(DISTINCT province_name ORDER BY province_name SEPARATOR ',') AS province_name, \n");
executePluginSql.append(" sum(this_year_sa_qty) AS this_year_sa_qty, \n");
executePluginSql.append(" sum(this_year_sa_money) AS this_year_sa_money, \n");
executePluginSql.append(" sum(this_year_cost) AS this_year_cost, \n");
executePluginSql.append(" sum(this_year_profit) AS this_year_profit \n");
executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n");
appendWhere(params,executePluginSql);
executePluginSql.append(" GROUP BY use_year,");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id,");
executePluginSql.append(" custom_name,");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" std_goods_name,");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" zone_id,");
executePluginSql.append(" zone_name,");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id,");
executePluginSql.append(" sale_type_name,");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id,");
executePluginSql.append(" dosage_name,");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id,");
executePluginSql.append(" saler_name,");
}
executePluginSql.deleteCharAt(executePluginSql.length() - 1);
executePluginSql.append(" ) as current_year_data \n");
executePluginSql.append(" LEFT JOIN (SELECT use_year, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id, \n");
appendSelectField(params, groupFieldList,executePluginSql);
// executePluginSql.append(" custom_id, \n");
// executePluginSql.append(" zone_id, \n");
// executePluginSql.append(" std_goods_name, \n");
// // executePluginSql.append(" province_id, \n");
// executePluginSql.append(" sale_type_id, \n");
// executePluginSql.append(" dosage_id, \n");
// executePluginSql.append(" saler_id, \n");
executePluginSql.append(" SUM(this_year_sa_qty) AS last_year_sa_qty, \n");
executePluginSql.append(" SUM(this_year_sa_money) AS last_year_sa_money, \n");
executePluginSql.append(" SUM(this_year_cost) AS last_year_cost, \n");
executePluginSql.append(" SUM(this_year_profit) AS last_year_profit \n");
executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n");
executePluginSql.append(" GROUP BY use_year, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id) AS last_year_data \n");
executePluginSql.append(" ON current_year_data.std_goods_name = last_year_data.std_goods_name \n");
executePluginSql.append(" AND current_year_data.zone_id = last_year_data.zone_id \n");
executePluginSql.append(" AND current_year_data.province_id = last_year_data.province_id \n");
executePluginSql.append(" AND current_year_data.sale_type_id = last_year_data.sale_type_id \n");
executePluginSql.append(" AND current_year_data.dosage_id = last_year_data.dosage_id \n");
executePluginSql.append(" AND current_year_data.custom_id = last_year_data.custom_id \n");
executePluginSql.append(" AND current_year_data.saler_id = last_year_data.saler_id \n");
executePluginSql.append(" AND last_year_data.use_year = current_year_data.use_year - 1 \n");
if(params.containsKey("useyear")){
params.put("useyear", Integer.parseInt(params.get("useyear").toString()) - 1);
}
appendWhere(params, executePluginSql);
if(params.containsKey("useyear")){
params.put("useyear", Integer.parseInt(params.get("useyear").toString() ) + 1);
}
executePluginSql.append(" GROUP BY use_year,");
// executePluginSql.append(" custom_id, \n");
// executePluginSql.append(" zone_id, \n");
// executePluginSql.append(" std_goods_name, \n");
//// executePluginSql.append(" province_id, \n");
// executePluginSql.append(" sale_type_id, \n");
// executePluginSql.append(" dosage_id,saler_id \n");
appendGroupByField(params, groupFieldList,executePluginSql);
executePluginSql.append(" ) AS last_year_data \n");
executePluginSql.append(" ON last_year_data.use_year = current_year_data.use_year - 1 \n");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" AND current_year_data.custom_id = last_year_data.custom_id \n");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" AND current_year_data.std_goods_name = last_year_data.std_goods_name \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" AND current_year_data.zone_id = last_year_data.zone_id \n");
}
// executePluginSql.append(" AND current_month.province_id = last_year_data.province_id \n");
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" AND current_year_data.sale_type_id = last_year_data.sale_type_id \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" AND current_year_data.dosage_id = last_year_data.dosage_id \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" AND current_year_data.saler_id = last_year_data.saler_id \n");
}
// executePluginSql.append(" ON current_year_data.std_goods_name = last_year_data.std_goods_name \n");
// executePluginSql.append(" AND current_year_data.zone_id = last_year_data.zone_id \n");
//// executePluginSql.append(" AND current_year_data.province_id = last_year_data.province_id \n");
// executePluginSql.append(" AND current_year_data.sale_type_id = last_year_data.sale_type_id \n");
// executePluginSql.append(" AND current_year_data.dosage_id = last_year_data.dosage_id \n");
// executePluginSql.append(" AND current_year_data.custom_id = last_year_data.custom_id \n");
// executePluginSql.append(" AND current_year_data.saler_id = last_year_data.saler_id \n");
executePluginSql.append(" LEFT JOIN (SELECT use_year, \n");
executePluginSql.append(" SUM(this_year_sa_money) AS this_year_sa_money_sum, \n");
executePluginSql.append(" SUM(this_year_profit) AS this_year_profit_sum \n");
executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n");
executePluginSql.append(" WHERE use_year = 2026 \n");
executePluginSql.append(" GROUP BY use_year) as total_year_data \n");
executePluginSql.append(" ON total_year_data.use_year = current_year_data.use_year \n");
executePluginSql.append(" GROUP BY \n");
if (groupFieldList.contains("customname") || params.containsKey("customname")) {
executePluginSql.append(" current_year_data.custom_id,");
executePluginSql.append(" current_year_data.custom_name,");
}
if (groupFieldList.contains("useyear") || params.containsKey("useyear")) {
executePluginSql.append(" current_year_data.use_year,");
}
if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) {
executePluginSql.append(" current_year_data.use_month,");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) {
executePluginSql.append(" current_year_data.zone_id,");
executePluginSql.append(" current_year_data.zone_name,");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) {
executePluginSql.append(" current_year_data.sale_type_id,");
executePluginSql.append(" current_year_data.sale_type_name,");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) {
executePluginSql.append(" current_year_data.saler_id,");
executePluginSql.append(" current_year_data.saler_name,");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) {
executePluginSql.append(" current_year_data.dosage_id,");
executePluginSql.append(" current_year_data.dosage_name,");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" current_year_data.std_goods_name,");
}
executePluginSql.deleteCharAt(executePluginSql.length() - 1);
// executePluginSql.append(" GROUP BY \n");
// if (groupFieldList.contains("customname") || params.containsKey("customname")) {
// executePluginSql.append(" current_year_data.custom_id,");
// executePluginSql.append(" current_year_data.custom_name,");
// }
// if (groupFieldList.contains("useyear") || params.containsKey("useyear")) {
// executePluginSql.append(" current_year_data.use_year,");
// }
// if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) {
// executePluginSql.append(" current_year_data.use_month,");
// }
// if (groupFieldList.contains("zonename") || params.containsKey("zonename")) {
// executePluginSql.append(" current_year_data.zone_id,");
// executePluginSql.append(" current_year_data.zone_name,");
// }
// if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) {
// executePluginSql.append(" current_year_data.sale_type_id,");
// executePluginSql.append(" current_year_data.sale_type_name,");
// }
// if (groupFieldList.contains("salername") || params.containsKey("salername")) {
// executePluginSql.append(" current_year_data.saler_id,");
// executePluginSql.append(" current_year_data.saler_name,");
// }
// if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) {
// executePluginSql.append(" current_year_data.dosage_id,");
// executePluginSql.append(" current_year_data.dosage_name,");
// }
// if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
// executePluginSql.append(" current_year_data.std_goods_name,");
// }
//
// executePluginSql.deleteCharAt(executePluginSql.length() - 1);
sql = executePluginSql.toString();
}
params.put("executePluginSql", sql);
@@ -204,19 +303,19 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
private String geroupMonthSql(Map<String, Object> params, List<String> groupFieldList) {
StringBuilder executePluginSql = new StringBuilder();
executePluginSql.append("select");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" current_month.custom_id as customid, \n");
executePluginSql.append(" current_month.custom_name as customname, \n");
}
if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月
executePluginSql.append(" current_month.use_year as useyear,");
executePluginSql.append(" current_month.use_month as usemonth, \n");
if(groupFieldList.contains("useyear") || params.containsKey("useyear")){
executePluginSql.append(" MAX(CONCAT(current_month.use_year, LPAD(current_month.use_month, 2, '0'))) as ny, \n"); //年月
executePluginSql.append(" current_month.ny, \n"); //年月
}else{
executePluginSql.append(" MAX(LPAD(current_month.use_month, 2, '0')) as ny, \n");
executePluginSql.append(" LPAD(current_month.use_month, 2, '0') as ny, \n");
}
}
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" current_month.custom_id as customid, \n");
executePluginSql.append(" current_month.custom_name as customname, \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" current_month.zone_id, \n");
executePluginSql.append(" current_month.zone_name as zonename, \n");
@@ -236,200 +335,349 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" current_month.std_goods_name as stdGoodsName, \n");
}
executePluginSql.append(" SUM(current_month.this_month_sa_qty) as thisMonthSaQty, "); //本月销售数量(件)
executePluginSql.append(" ROUND(SUM(current_month.this_month_sa_money) / 10000, 2) as thisMonthSaMoney, "); //本月销售金额(元)
executePluginSql.append(" ROUND(SUM(current_month.this_month_profit) / 10000, 2) as thisMonthProfit, "); //本月毛利额(元)
executePluginSql.append(" ROUND(SUM(current_month.this_month_cost) / 10000, 2) as thisMonthCost, "); //本月成本(元)
executePluginSql.append(" SUM(last_month_data.last_month_sa_qty) as lastMonthSaQty, "); //上月销售数量(件)
executePluginSql.append(" ROUND(SUM(last_month_data.last_month_sa_money) / 10000, 2) as lastMonthSaMoney, "); //上月销售金额(元)
executePluginSql.append(" ROUND(SUM(last_month_data.last_month_profit) / 10000, 2) as lastMonthProfit, "); //上月毛利额(元)
executePluginSql.append(" ROUND(SUM(last_month_data.last_month_cost) / 10000, 2) as lastMonthCost, "); //上月成本(元)
executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_qty)/ 10000, 2) as yoyMonthSaQty, "); //同比月销售数量(件)
executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_money) / 10000, 2) as yoyMonthSaMoney, "); //同比月销售金额(元)
executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_profit) / 10000, 2) as yoyMonthProfit, "); //同比月毛利额(元)
executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_cost) / 10000, 2) as yoyMonthCost, "); //同比月成本(元)
executePluginSql.append(" GROUP_CONCAT(DISTINCT current_month.province_id ORDER BY current_month.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID
executePluginSql.append(" GROUP_CONCAT(DISTINCT current_month.province_name ORDER BY current_month.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称
executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END) > 0 THEN\n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END), 2))\n");
executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END) < 0 THEN\n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END), 2))\n");
executePluginSql.append(" ELSE '0.00'\n");
executePluginSql.append(" current_month.this_month_sa_qty AS thisMonthSaQty, \n"); //本月销售数量(件)
executePluginSql.append(" ROUND(current_month.this_month_sa_money / 10000, 2) AS thisMonthSaMoney, \n"); //本月销售金额(元)
executePluginSql.append(" ROUND(current_month.this_month_profit / 10000, 2) AS thisMonthProfit, \n"); //本月毛利额(元)
executePluginSql.append(" ROUND(current_month.this_month_cost / 10000, 2) AS thisMonthCost, \n"); //本月成本(元)
executePluginSql.append(" last_month_data.last_month_sa_qty AS lastMonthSaQty, \n"); //上月销售数量(件)
executePluginSql.append(" ROUND(last_month_data.last_month_sa_money / 10000, 2) AS lastMonthSaMoney, \n"); //上月销售金额(元)
executePluginSql.append(" ROUND(last_month_data.last_month_profit / 10000, 2) AS lastMonthProfit, \n"); //上月毛利额(元)
executePluginSql.append(" ROUND(last_month_data.last_month_cost / 10000, 2) AS lastMonthCost, \n"); //上月成本(元)
executePluginSql.append(" ROUND(yoy_month.yoy_month_sa_qty / 10000, 2) AS yoyMonthSaQty, \n"); //同比月销售数量(件)
executePluginSql.append(" ROUND(yoy_month.yoy_month_sa_money / 10000, 2) AS yoyMonthSaMoney, \n"); //同比月销售金额(元)
executePluginSql.append(" ROUND(yoy_month.yoy_month_profit / 10000, 2) AS yoyMonthProfit, \n"); //同比月毛利额(元)
executePluginSql.append(" ROUND(yoy_month.yoy_month_cost / 10000, 2) AS yoyMonthCost, \n"); //同比月成本(元)
executePluginSql.append(" current_month.province_id AS province_id, \n"); //行政区域ID
executePluginSql.append(" current_month.province_name AS province_name, \n"); //行政区域名称
executePluginSql.append(" CASE WHEN (CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END), 2)) \n");
executePluginSql.append(" END AS monthsaqty_yoy,\n"); //本月销量同比
executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" CASE WHEN (CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS monthsamoney_yoy, \n"); //本月销售金额同比
executePluginSql.append(" CASE WHEN (CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" CASE WHEN (CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本月销售金额增长率
executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" CASE WHEN (CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比
executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n");
executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" CASE WHEN (CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END) > 0 THEN \n");
executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END), 2)) \n");
executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END) < 0 THEN \n");
executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n");
executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END), 2)) \n");
executePluginSql.append(" ELSE '0.00' \n");
executePluginSql.append(" END AS monthprofit_yoy, \n"); //本月毛利同比
executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_sa_money)/SUM(total_month_data.this_month_sa_money_sum) * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月销售金额占比
executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_profit)/SUM(total_month_data.this_month_profit_sum) * 100, 2), 0 ) as this_month_profit_share \n"); //本月毛利额占比
executePluginSql.append(" from new_gr_bi_sa_agg_month_count as current_month \n");
executePluginSql.append(" COALESCE (ROUND( current_month.this_month_sa_money/total_month_data.this_month_sa_money_sum * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月销售金额占比
executePluginSql.append(" COALESCE (ROUND( current_month.this_month_profit/total_month_data.this_month_profit_sum * 100, 2), 0 ) as this_month_profit_share \n"); //本月毛利额占比
executePluginSql.append(" FROM (SELECT \n");
executePluginSql.append(" use_year AS use_year, \n");
executePluginSql.append(" use_month AS use_month, \n");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" custom_name , \n");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName") ) { //标准品名
executePluginSql.append(" std_goods_name, \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename") ) { //业务区域
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" zone_name, \n");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" sale_type_name, \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" dosage_name, \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id, \n");
executePluginSql.append(" saler_name, \n");
}
executePluginSql.append(" MAX(CONCAT(use_year, LPAD(use_month, 2, '0'))) AS ny, \n");
executePluginSql.append(" GROUP_CONCAT(DISTINCT province_id ORDER BY province_id SEPARATOR ',') AS province_id, \n");
executePluginSql.append(" GROUP_CONCAT(DISTINCT province_name ORDER BY province_name SEPARATOR ',') AS province_name, \n");
executePluginSql.append(" sum(this_month_sa_qty) AS this_month_sa_qty, \n");
executePluginSql.append(" sum(this_month_sa_money) AS this_month_sa_money, \n");
executePluginSql.append(" sum(this_month_cost) AS this_month_cost, \n");
executePluginSql.append(" sum(this_month_profit) AS this_month_profit \n");
executePluginSql.append(" FROM \n");
executePluginSql.append(" new_gr_bi_sa_agg_month_count \n");
appendWhere(params, executePluginSql);
executePluginSql.append(" GROUP BY use_year,use_month,");
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id,");
executePluginSql.append(" custom_name,");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" std_goods_name,");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" zone_id,");
executePluginSql.append(" zone_name,");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id,");
executePluginSql.append(" sale_type_name,");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id,");
executePluginSql.append(" dosage_name,");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id,");
executePluginSql.append(" saler_name,");
}
executePluginSql.deleteCharAt(executePluginSql.length() - 1);
executePluginSql.append(" ) AS current_month \n"); //current_month 本月数据
executePluginSql.append(" LEFT JOIN (SELECT \n");
executePluginSql.append(" use_year, \n");
executePluginSql.append(" use_month, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id, \n");
appendSelectField(params, groupFieldList, executePluginSql);
executePluginSql.append(" SUM(this_month_sa_qty) AS last_month_sa_qty, \n");
executePluginSql.append(" SUM(this_month_sa_money) AS last_month_sa_money, \n");
executePluginSql.append(" SUM(this_month_cost) AS last_month_cost, \n");
executePluginSql.append(" SUM(this_month_profit) AS last_month_profit \n");
executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count \n");
executePluginSql.append(" GROUP BY use_year, \n");
executePluginSql.append(" use_month, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id) AS last_month_data \n");
executePluginSql.append(" ON current_month.std_goods_name = last_month_data.std_goods_name \n");
executePluginSql.append(" AND current_month.zone_id = last_month_data.zone_id \n");
executePluginSql.append(" AND current_month.province_id = last_month_data.province_id \n");
executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id \n");
executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id \n");
executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id \n");
executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id \n");
executePluginSql.append(" AND last_month_data.use_year = current_month.use_year - (current_month.use_month = 1)\n");
// appendWhere(params, executePluginSql);
executePluginSql.append(" GROUP BY use_year,use_month,");
appendGroupByField(params, groupFieldList, executePluginSql);
executePluginSql.append(" ) AS last_month_data \n"); // last_month_data 上月数据
executePluginSql.append(" ON last_month_data.use_year = current_month.use_year - (current_month.use_month = 1)\n");
executePluginSql.append(" AND last_month_data.use_month = IF(current_month.use_month = 1, 12, current_month.use_month - 1)\n");
if (groupFieldList.contains("customname") || params.containsKey("customname") ) { //客户名称
executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id \n");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" AND current_month.std_goods_name = last_month_data.std_goods_name \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" AND current_month.zone_id = last_month_data.zone_id \n");
}
// executePluginSql.append(" AND current_month.province_id = last_month_data.province_id \n");
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id \n");
}
executePluginSql.append(" LEFT JOIN (SELECT use_year, \n");
executePluginSql.append(" use_month, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id, \n");
// executePluginSql.append(" custom_id, \n");
// executePluginSql.append(" zone_id, \n");
// executePluginSql.append(" std_goods_name, \n");
//// executePluginSql.append(" province_id, \n");
// executePluginSql.append(" sale_type_id, \n");
// executePluginSql.append(" dosage_id, \n");
// executePluginSql.append(" saler_id, \n");
appendSelectField(params, groupFieldList, executePluginSql);
executePluginSql.append(" SUM(this_month_sa_qty) AS yoy_month_sa_qty, \n"); // 同比月销量
executePluginSql.append(" SUM(this_month_sa_money) AS yoy_month_sa_money, \n"); // 同比月销售金额
executePluginSql.append(" SUM(this_month_cost) as yoy_month_cost, \n"); // 同比月销售成本
executePluginSql.append(" SUM(this_month_profit) AS yoy_month_profit \n"); // 同比月毛利额
executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count ");
// if(params.containsKey("useyear")){
// executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1));
// }
executePluginSql.append(" GROUP BY use_year, \n");
executePluginSql.append(" use_month, \n");
executePluginSql.append(" custom_id, \n");
executePluginSql.append(" zone_id, \n");
executePluginSql.append(" std_goods_name, \n");
executePluginSql.append(" province_id, \n");
executePluginSql.append(" sale_type_id, \n");
executePluginSql.append(" dosage_id, \n");
executePluginSql.append(" saler_id) yoy_month ON yoy_month.use_year = current_month.use_year - 1 \n");
if(params.containsKey("useyear")){
params.put("useyear", Integer.parseInt(params.get("useyear").toString()) - 1);
}
appendWhere(params, executePluginSql);
if(params.containsKey("useyear")){
params.put("useyear", Integer.parseInt(params.get("useyear").toString() ) + 1);
}
executePluginSql.append(" GROUP BY use_year,use_month,");
appendGroupByField(params, groupFieldList, executePluginSql);
executePluginSql.append(" ) yoy_month ON yoy_month.use_year = current_month.use_year - 1 \n"); // 同比月数据
executePluginSql.append(" AND yoy_month.use_month = current_month.use_month \n");
executePluginSql.append(" AND yoy_month.std_goods_name = current_month.std_goods_name \n");
executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id \n");
executePluginSql.append(" AND yoy_month.province_id = current_month.province_id \n");
executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id \n");
executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id \n");
executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id \n");
executePluginSql.append(" AND yoy_month.saler_id = current_month.saler_id \n");
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" AND yoy_month.std_goods_name = current_month.std_goods_name \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id \n");
}
// executePluginSql.append(" AND yoy_month.province_id = current_month.province_id \n");
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id \n");
}
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" AND yoy_month.saler_id = current_month.saler_id \n");
}
executePluginSql.append(" LEFT JOIN (\n");
executePluginSql.append(" SELECT \n");
executePluginSql.append(" use_year, \n");
executePluginSql.append(" use_month, \n");
executePluginSql.append(" SUM( this_month_sa_money ) AS this_month_sa_money_sum, \n");
executePluginSql.append(" SUM(this_month_profit) AS this_month_profit_sum \n");
executePluginSql.append(" FROM new_gr_bi_sa_agg \n");
// if(params.containsKey("useyear")){
// executePluginSql.append(" where use_year = " + params.get("useyear"));
// }
executePluginSql.append(" GROUP BY \n");
executePluginSql.append(" use_year, use_month\n");
executePluginSql.append(" use_year\n");
executePluginSql.append(" ) total_month_data ON total_month_data.use_year = current_month.use_year \n");
executePluginSql.append(" AND total_month_data.use_month = current_month.use_month \n");
// executePluginSql.append(" AND total_month_data.use_month = current_month.use_month \n");
if(params.containsKey("useyear")){
executePluginSql.append(" where current_month.use_year = " + params.get("useyear"));
if(params.containsKey("usemonth")){
executePluginSql.append(" and current_month.use_month = " + params.get("usemonth"));
}
}
executePluginSql.append(" GROUP BY \n");
if (groupFieldList.contains("customname") || params.containsKey("customname")) {
executePluginSql.append(" current_month.custom_id,");
executePluginSql.append(" current_month.custom_name,");
}
if (groupFieldList.contains("useyear") || params.containsKey("useyear")) {
executePluginSql.append(" current_month.use_year,");
}
if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) {
executePluginSql.append(" current_month.use_month,");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) {
executePluginSql.append(" current_month.zone_id,");
executePluginSql.append(" current_month.zone_name,");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) {
executePluginSql.append(" current_month.sale_type_id,");
executePluginSql.append(" current_month.sale_type_name,");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) {
executePluginSql.append(" current_month.saler_id,");
executePluginSql.append(" current_month.saler_name,");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) {
executePluginSql.append(" current_month.dosage_id,");
executePluginSql.append(" current_month.dosage_name,");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" current_month.std_goods_name,");
}
executePluginSql.deleteCharAt(executePluginSql.length() - 1);
// executePluginSql.append(" GROUP BY \n");
// if (groupFieldList.contains("customname") || params.containsKey("customname")) {
// executePluginSql.append(" current_month.custom_id,");
// executePluginSql.append(" current_month.custom_name,");
// }
// if (groupFieldList.contains("useyear") || params.containsKey("useyear")) {
// executePluginSql.append(" current_month.use_year,");
// }
// if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) {
// executePluginSql.append(" current_month.use_month,");
// }
// if (groupFieldList.contains("zonename") || params.containsKey("zonename")) {
// executePluginSql.append(" current_month.zone_id,");
// executePluginSql.append(" current_month.zone_name,");
// }
// if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) {
// executePluginSql.append(" current_month.sale_type_id,");
// executePluginSql.append(" current_month.sale_type_name,");
// }
// if (groupFieldList.contains("salername") || params.containsKey("salername")) {
// executePluginSql.append(" current_month.saler_id,");
// executePluginSql.append(" current_month.saler_name,");
// }
// if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) {
// executePluginSql.append(" current_month.dosage_id,");
// executePluginSql.append(" current_month.dosage_name,");
// }
// if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
// executePluginSql.append(" current_month.std_goods_name,");
// }
//
// executePluginSql.deleteCharAt(executePluginSql.length() - 1);
return executePluginSql.toString();
}
private void appendGroupByField(Map<String, Object> params, List<String> groupFieldList, StringBuilder executePluginSql) {
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id,");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" std_goods_name,");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" zone_id,");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id,");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id,");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id,");
}
executePluginSql.deleteCharAt(executePluginSql.length() - 1);
}
private void appendSelectField(Map<String, Object> params, List<String> groupFieldList, StringBuilder executePluginSql) {
if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称
executePluginSql.append(" custom_id, \n");
}
if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名
executePluginSql.append(" std_goods_name, \n");
}
if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域
executePluginSql.append(" zone_id, \n");
}
if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型
executePluginSql.append(" sale_type_id, \n");
}
if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型
executePluginSql.append(" dosage_id, \n");
}
if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员
executePluginSql.append(" saler_id, \n");
}
}
private void appendWhere(Map<String, Object> params, StringBuilder executePluginSql) {
executePluginSql.append(" where");
if (params.containsKey("useyear")) {
executePluginSql.append(" use_year = '").append(Integer.parseInt(params.get("useyear").toString())).append("'");
}
if (params.containsKey("usemonth")) {
executePluginSql.append(" AND use_month = '").append(Integer.parseInt(params.get("usemonth").toString())).append("'");
}
if (params.containsKey("customname")) {
executePluginSql.append(" AND custom_name IN ('").append(params.get("customname").toString().replaceAll(",", "','")).append("')");
}
if (params.containsKey("stdGoodsName")) {
executePluginSql.append(" AND std_goods_name IN ('").append(params.get("stdGoodsName").toString().replaceAll(",", "','")).append("')");
}
if (params.containsKey("zonename")) {
executePluginSql.append(" AND zone_name IN ('").append(params.get("zonename").toString().replaceAll(",", "','")).append("')");
}
if (params.containsKey("saletypename")) {
executePluginSql.append(" AND sale_type_name IN ('").append(params.get("saletypename").toString().replaceAll(",", "','")).append("')");
}
if (params.containsKey("dosagename")) {
executePluginSql.append(" AND dosage_name IN ('").append(params.get("dosagename").toString().replaceAll(",", "','")).append("')");
}
if (params.containsKey("salername")) {
executePluginSql.append(" AND saler_name IN ('").append(params.get("salername").toString().replaceAll(",", "','")).append("')");
}
}
}

View File

@@ -0,0 +1,114 @@
package com.lideeyunji.core.framework.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lideeyunji.tool.framework.yunji.model.global.BaseTenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 保养管理-保养工单
*/
@TableName("by_management_gd")
@Data
@EqualsAndHashCode
public class ByManagementGd extends BaseTenantEntity {
/**
* ID
*/
private Long id;
/**
* 工单编号
*/
private String orderId;
/**
* 工单名称
*/
private String orderName;
/**
* 设备类型
*/
private String deviceTypeName;
/**
*设备
*/
private String equipmentInfo;
/**
*设备编号
*/
private String equipmentCode;
/**
*保养级别
*/
private String upkeepLevel;
/**
*优先级
*/
private String priority;
/**
*可能更换零件
*/
private String possibleReplacements;
/**
*计划保养时间
*/
private String planUpkeepTime;
/**
*是否申请备件
*/
private String applyForParts;
/**
*是否已停机
*/
private String isStopped;
/**
*执行人
*/
private String executor;
/**
*状态
*/
private String orderState;
/**
* 备注
*/
private String remark;
/**
* 完成时间
*/
private String upkeepTime;
/**
* 保养方案
*/
private String schemeId;
/**
* 处理结果
*/
private String bygdCljg;
/**
* 计划id
*/
private String planId;
}

View File

@@ -0,0 +1,77 @@
package com.lideeyunji.core.framework.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lideeyunji.tool.framework.yunji.model.global.BaseTenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 保养管理-保养记录
*/
@TableName("by_management_jl")
@Data
@EqualsAndHashCode
public class ByManagementJl extends BaseTenantEntity {
/**
* ID
*/
private Long id;
/**
* 工单编号
*/
private String orderId;
/**
* 工单名称
*/
private String orderName;
/**
*设备
*/
private String equipmentInfo;
/**
*优先级
*/
private String priority;
/**
*保养级别
*/
private String upkeepLevel;
/**
*完成时间
*/
private String upkeepTime;
/**
*状态
*/
private String state;
/**
*执行人
*/
private String executor;
/**
*验收时间
*/
private String ysTime;
/**
*评价星级
*/
private String pjxj;
/**
*验收意见
*/
private String gdysYj;
}

View File

@@ -0,0 +1,68 @@
package com.lideeyunji.core.framework.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.lideeyunji.tool.framework.yunji.model.global.BaseTenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 保养管理-保养验收
*/
@TableName("by_management_ys")
@Data
@EqualsAndHashCode
public class ByManagementYs extends BaseTenantEntity {
/**
* ID
*/
private Long id;
/**
* 工单编号
*/
private String orderId;
/**
* 工单名称
*/
private String orderName;
/**
*设备
*/
private String equipmentInfo;
/**
*优先级
*/
private String priority;
/**
*保养级别
*/
private String upkeepLevel;
/**
*完成时间
*/
private String upkeepTime;
/**
*状态
*/
private String state;
/**
*执行人
*/
private String executor;
/**
*验收时间
*/
private String ysTime;
}

View File

@@ -3,6 +3,7 @@ package com.lideeyunji.core.framework.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import jdk.nashorn.internal.ir.annotations.Ignore;
import lombok.Data;
import java.io.Serializable;
@@ -149,7 +150,11 @@ public class NewGrBiSaAggMonthCount implements Serializable
private BigDecimal thisMonthProfitShare;
@TableField(value = "thissamoney_s")
private BigDecimal thisMonthSaMoney_s;
@TableField(value = "thisprofit_s")
private BigDecimal thisMonthProfit_s;
}

View File

@@ -145,8 +145,10 @@ public class NewGrBiSaAggYearCount implements Serializable
@TableField(value = "this_year_profit_change")
private BigDecimal thisYearProfitChange;
@TableField(value = "this_year_sa_money_s")
private BigDecimal thissamoney_s;
@TableField(value = "this_year_profit_s")
private BigDecimal thisprofit_s;
}

View File

@@ -0,0 +1,13 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.entity.ByManagementGd;
/**
* 保养管理-保养工单Mapper接口
*
* @date 2026-03-20
*/
public interface ByManagementGdMapper extends BaseMapper<ByManagementGd> {
}

View File

@@ -0,0 +1,13 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.entity.ByManagementJl;
/**
* 保养管理-保养记录Mapper接口
*
* @date 2026-03-20
*/
public interface ByManagementJlMapper extends BaseMapper<ByManagementJl> {
}

View File

@@ -0,0 +1,13 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.entity.ByManagementYs;
/**
* 保养管理-保养验收Mapper接口
*
* @date 2026-03-20
*/
public interface ByManagementYsMapper extends BaseMapper<ByManagementYs> {
}

View File

@@ -0,0 +1,13 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.dynamic.datasource.annotation.Master;
/**
*保养管理-保养方案
*/
@Master
public interface ByglByfaMapper {
int changeFaState(String id, String state);
}

View File

@@ -0,0 +1,23 @@
package com.lideeyunji.core.framework.mapper;
import com.baomidou.dynamic.datasource.annotation.Master;
import java.util.Map;
/**
*
*/
@Master
public interface ByglByjhMapper{
Map<String,Object> getCountByPlanId(String plan_id);
Map<String,Object> getPlanByPlanId(String plan_id);
Map<String, Object> getOrderByPlanId(String order_id);
Map<String, Object> getSchemeBySchemeId(String scheme_id);
int updateClBygd(String id, String bygd_cljg, String order_state);
}

View File

@@ -1,8 +1,12 @@
package com.lideeyunji.core.framework.mapper;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.params.SaAggParam;
import org.apache.ibatis.annotations.Param;
/**
* 综合销售情况月维度Mapper接口
@@ -59,4 +63,7 @@ public interface NewGrBiSaAggMonthCountMapper extends BaseMapper<NewGrBiSaAggMon
* @return 结果
*/
public int deleteNewGrBiSaAggMonthCountByIds(Long[] ids);
@DS(value = "#dataSourceType")
List<NewGrBiSaAggMonthCount> getTotalDetail(@Param("dataSourceType") String dataSourceType, @Param("saAggParam") SaAggParam saAggParam);
}

View File

@@ -1,8 +1,12 @@
package com.lideeyunji.core.framework.mapper;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lideeyunji.core.framework.params.SaAggParam;
import org.apache.ibatis.annotations.Param;
/**
* 综合销售情况年维度Mapper接口
@@ -59,4 +63,8 @@ public interface NewGrBiSaAggYearCountMapper extends BaseMapper<NewGrBiSaAggYear
* @return 结果
*/
public int deleteNewGrBiSaAggYearCountByIds(Long[] ids);
@DS(value = "#dataSourceType")
List<NewGrBiSaAggYearCount> getTotalDetail(@Param("dataSourceType") String dataSourceType,@Param("saAggParam") SaAggParam saAggParam);
}

View File

@@ -0,0 +1,19 @@
package com.lideeyunji.core.framework.params;
import lombok.Data;
import java.util.List;
@Data
public class SaAggParam {
private String useYear;
private String useMonth;
private List<String> customName;
private List<String> zoneName;
private List<String> saleTypeName;
private List<String> salerName;
private List<String> dosageName;
private List<String> stdGoodsName;
private List<String> groupFieldList;
}

View File

@@ -0,0 +1,10 @@
package com.lideeyunji.core.framework.service;
/**
* 保养管理-保养方案
*/
public interface IByglByfaService {
int changeFaState(String id, String state);
}

View File

@@ -2,6 +2,7 @@ package com.lideeyunji.core.framework.service;
import java.util.List;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount;
import com.lideeyunji.core.framework.params.SaAggParam;
/**
* 综合销售情况月维度Service接口
@@ -58,4 +59,6 @@ public interface INewGrBiSaAggMonthCountService
* @return 结果
*/
public int deleteNewGrBiSaAggMonthCountById(Long id);
List<NewGrBiSaAggMonthCount> getTotalDetail(SaAggParam saAggParam);
}

View File

@@ -2,6 +2,7 @@ package com.lideeyunji.core.framework.service;
import java.util.List;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount;
import com.lideeyunji.core.framework.params.SaAggParam;
/**
* 综合销售情况年维度Service接口
@@ -58,4 +59,6 @@ public interface INewGrBiSaAggYearCountService
* @return 结果
*/
public int deleteNewGrBiSaAggYearCountById(Long id);
List<NewGrBiSaAggYearCount> getTotalDetail(SaAggParam saAggParam);
}

View File

@@ -0,0 +1,24 @@
package com.lideeyunji.core.framework.service.impl;
import com.lideeyunji.core.framework.mapper.ByglByfaMapper;
import com.lideeyunji.core.framework.service.IByglByfaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*保养管理-保养方案
*/
@Service
public class ByglByfaServiceImpl implements IByglByfaService {
@Autowired
private ByglByfaMapper byglByfaMapper;
@Override
public int changeFaState(String id, String state) {
int result = byglByfaMapper.changeFaState(id, state);
return result;
}
}

View File

@@ -1,7 +1,10 @@
package com.lideeyunji.core.framework.service.impl;
import java.util.Collections;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lideeyunji.core.framework.params.SaAggParam;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import org.springframework.stereotype.Service;
import com.lideeyunji.core.framework.mapper.NewGrBiSaAggMonthCountMapper;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount;
@@ -87,4 +90,9 @@ public class NewGrBiSaAggMonthCountServiceImpl extends ServiceImpl<NewGrBiSaAggM
{
return this.baseMapper.deleteNewGrBiSaAggMonthCountById(id);
}
@Override
public List<NewGrBiSaAggMonthCount> getTotalDetail(SaAggParam saAggParam) {
return this.baseMapper.getTotalDetail(lideeYunJiBaseConstant.DS_ERP_BI_DATA, saAggParam);
}
}

View File

@@ -1,7 +1,10 @@
package com.lideeyunji.core.framework.service.impl;
import java.util.Collections;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lideeyunji.core.framework.params.SaAggParam;
import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant;
import org.springframework.stereotype.Service;
import com.lideeyunji.core.framework.mapper.NewGrBiSaAggYearCountMapper;
import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount;
@@ -87,4 +90,9 @@ public class NewGrBiSaAggYearCountServiceImpl extends ServiceImpl<NewGrBiSaAggYe
{
return this.baseMapper.deleteNewGrBiSaAggYearCountById(id);
}
@Override
public List<NewGrBiSaAggYearCount> getTotalDetail(SaAggParam saAggParam) {
return this.baseMapper.getTotalDetail(lideeYunJiBaseConstant.DS_ERP_BI_DATA, saAggParam);
}
}

View File

@@ -0,0 +1,8 @@
<?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.lideeyunji.core.framework.mapper.ByglByfaMapper">
<update id="changeFaState">
update by_management_fa set state = #{state} where id = #{id}
</update>
</mapper>

View File

@@ -0,0 +1,50 @@
<?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.lideeyunji.core.framework.mapper.ByglByjhMapper">
<select id="getCountByPlanId" resultType="java.util.Map">
SELECT
COUNT(*) AS jhs,
COUNT(CASE WHEN order_state = '1' THEN 1 ELSE NULL END) AS wcs
FROM
by_management_gd
WHERE
is_deleted = 0
AND plan_id = #{plan_id}
</select>
<select id="getPlanByPlanId" resultType="java.util.Map">
SELECT
*
FROM
by_management_plan
WHERE
is_deleted = 0
AND plan_id = #{plan_id}
</select>
<select id="getOrderByPlanId" resultType="java.util.Map">
SELECT
*
FROM
by_management_gd
WHERE
is_deleted = 0
AND order_id = #{order_id}
</select>
<select id="getSchemeBySchemeId" resultType="java.util.Map">
SELECT
*
FROM
by_management_fa
WHERE
is_deleted = 0
AND scheme_id = #{scheme_id}
</select>
<update id="updateClBygd">
update by_management_gd set bygd_cljg = #{bygd_cljg}, order_state = #{order_state}, upkeep_time = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') where id = #{id}
</update>
</mapper>

View File

@@ -77,7 +77,9 @@
FROM
system_users s_user
where s_user.is_deleted =0
and s_user.tenant_id =#{tenantId}
<if test="tenantId!=null and tenantId!=''">
and s_user.tenant_id =#{tenantId}
</if>
<if test="params.nickName!=null and params.nickName!=''">
and s_user.nickname like #{params.nickName}
</if>
@@ -105,7 +107,9 @@
system_users s_user
INNER JOIN (select user_id from system_user_role where is_deleted = 0 AND role_id = #{roleId} group by user_id) sur ON s_user.id = sur.user_id
where s_user.is_deleted =0
and s_user.tenant_id =#{tenantId}
<if test="tenantId!=null and tenantId!=''">
and s_user.tenant_id =#{tenantId}
</if>
<if test="params.nickName!=null and params.nickName!=''">
and s_user.nickname like #{params.nickName}
</if>
@@ -155,7 +159,9 @@
system_user_dept sud
INNER JOIN system_dept sd on sud.dept_id =sd.id
where sud.is_deleted=0 and sd.is_deleted=0
and sd.tenant_id =#{tenantId}
<if test="tenantId!=null and tenantId!=''">
and sd.tenant_id =#{tenantId}
</if>
<if test="deptIdList!=null and deptIdList.size()>0">
and sud.dept_id in
<foreach collection="deptIdList" index="index" item="item" open="(" separator="," close=")">

View File

@@ -38,12 +38,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="lastMonthProfitShare" column="last_month_profit_share" />
<result property="thisMonthSaMoneyShare" column="this_month_sa_money_share" />
<result property="thisMonthProfitShare" column="this_month_profit_share" />
<result property="thisMonthSaMoney_s" column="thissamoney_s" />
<result property="thisMonthProfit_s" column="thisprofit_s" />
</resultMap>
<sql id="selectNewGrBiSaAggMonthCountVo">
select id, use_year, use_month, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, std_goods_name, province_id, province_name, saler_id, saler_name, this_month_sa_qty, last_month_sa_qty, yoy_month_sa_qty, this_month_sa_money, last_month_sa_money, yoy_month_sa_money, this_month_profit, last_month_profit, yoy_month_profit, this_month_cost, last_month_cost, yoy_month_cost, this_month_profit_rate, last_month_profit_rate, last_month_profit_share, this_month_sa_money_share, this_month_profit_share from new_gr_bi_sa_agg_month_count
</sql>
<select id="getTotalDetail" parameterType="com.lideeyunji.core.framework.params.SaAggParam" resultMap="NewGrBiSaAggMonthCountResult">
SELECT
ROUND(SUM(this_month_sa_money) / 10000, 2) AS thissamoney_s,
ROUND(SUM(this_month_profit) / 10000, 2) AS thisprofit_s
FROM new_gr_bi_sa_agg_month_count
<where>
<if test="saAggParam.useYear != null and saAggParam.useYear != ''"> and use_year = #{saAggParam.useYear}</if>
<if test="saAggParam.useMonth != null and saAggParam.useMonth != ''"> and use_month = #{saAggParam.useMonth}</if>
<if test="saAggParam.customName != null and saAggParam.customName != ''"> and custom_name in
<foreach collection="saAggParam.customName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.zoneName != null and saAggParam.zoneName != ''"> and zone_name in
<foreach collection="saAggParam.zoneName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.saleTypeName != null and saAggParam.saleTypeName != ''"> and sale_type_name in
<foreach collection="saAggParam.saleTypeName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.salerName != null and saAggParam.salerName != '' "> and saler_name in
<foreach collection="saAggParam.salerName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.dosageName != null and saAggParam.dosageName != ''"> and dosage_name in
<foreach collection="saAggParam.dosageName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.stdGoodsName != null and saAggParam.stdGoodsName != '' "> and std_goods_name in
<foreach item="field" collection="saAggParam.stdGoodsName" separator="," open="(" close=")">#{field}</foreach>
</if>
</where>
</select>
<select id="selectNewGrBiSaAggMonthCountList" parameterType="com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount" resultMap="NewGrBiSaAggMonthCountResult">
<include refid="selectNewGrBiSaAggMonthCountVo"/>
<where>

View File

@@ -37,12 +37,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="thisYearSaMoneyGrowth" column="this_year_sa_money_growth" />
<result property="thisYearProfitGrowth" column="this_year_profit_growth" />
<result property="thisYearProfitChange" column="this_year_profit_change" />
<result property="thissamoney_s" column="this_year_sa_money_s" />
<result property="thisprofit_s" column="this_year_profit_s" />
</resultMap>
<sql id="selectNewGrBiSaAggYearCountVo">
select id, use_year, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, std_goods_name, province_id, province_name, saler_id, saler_name, this_year_sa_qty, last_year_sa_qty, this_year_sa_money, last_year_sa_money, this_year_profit, last_year_profit, this_year_cost, last_year_cost, this_year_profit_rate, last_year_profit_rate, this_year_profit_share, last_year_profit_share, this_year_sa_money_share, last_year_sa_money_share, this_year_sa_money_growth, this_year_profit_growth, this_year_profit_change from new_gr_bi_sa_agg_year_count
</sql>
<select id="getTotalDetail" parameterType="com.lideeyunji.core.framework.params.SaAggParam" resultMap="NewGrBiSaAggYearCountResult">
SELECT
ROUND(SUM(this_year_sa_money) / 10000, 2) AS this_year_sa_money_s,
ROUND(SUM(this_year_profit) / 10000, 2) AS this_year_profit_s
FROM new_gr_bi_sa_agg_year_count
<where>
<if test="saAggParam.useYear != null and saAggParam.useYear != ''"> and use_year = #{saAggParam.useYear}</if>
<if test="saAggParam.customName != null and saAggParam.customName != ''"> and custom_name in
<foreach collection="saAggParam.customName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.zoneName != null and saAggParam.zoneName != ''"> and zone_name in
<foreach collection="saAggParam.zoneName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.saleTypeName != null and saAggParam.saleTypeName != ''"> and sale_type_name in
<foreach collection="saAggParam.saleTypeName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.salerName != null and saAggParam.salerName != '' "> and saler_name in
<foreach collection="saAggParam.salerName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.dosageName != null and saAggParam.dosageName != ''"> and dosage_name in
<foreach collection="saAggParam.dosageName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
<if test="saAggParam.stdGoodsName != null and saAggParam.stdGoodsName != '' "> and std_goods_name in
<foreach collection="saAggParam.stdGoodsName" item="field" separator="," open="(" close=")">#{field}</foreach>
</if>
</where>
<!-- <if test="saAggParam.groupFieldList != null and saAggParam.groupFieldList.size() > 0">-->
<!-- &lt;!&ndash; 这里根据前端传入的参数拼接动态的 GROUP BY 子句 &ndash;&gt;-->
<!-- GROUP BY-->
<!-- <foreach item="field" collection="saAggParam.groupFieldList" separator=",">-->
<!-- #{field}-->
<!-- </foreach>-->
<!-- </if>-->
</select>
<select id="selectNewGrBiSaAggYearCountList" parameterType="com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount" resultMap="NewGrBiSaAggYearCountResult">
<include refid="selectNewGrBiSaAggYearCountVo"/>
<where>

View File

@@ -0,0 +1,30 @@
package com.lideeyunji.tool.framework.common.constant;
/**
* 保养管理
*/
public interface ByglConstant {
/**进行中*/
String JH_STATE_JXZ = "0";
/**已完成*/
String JH_STATE_YWC = "1";
/**待开始*/
String GD_STATE_DKS = "0";
/**已完成*/
String BY_STATE_YWC = "1";
/**方案停用*/
String FA_STATE_TY = "0";
/**方案启用*/
String FA_STATE_QY = "1";
/**待验收*/
String YSZT_STATE_DYS = "0";
/**已验收*/
String YSZT_STATE_YYS = "1";
}