客户所属行业问题修改
This commit is contained in:
parent
324a18f830
commit
9614d17a37
@ -37,7 +37,7 @@ public class CustomerRespVO {
|
|||||||
|
|
||||||
@Schema(description = "所属行业")
|
@Schema(description = "所属行业")
|
||||||
@ExcelProperty("所属行业")
|
@ExcelProperty("所属行业")
|
||||||
private String industry;
|
private Integer industry;
|
||||||
|
|
||||||
@Schema(description = "客户级别.字典", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "客户级别.字典", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@ExcelProperty("客户级别.字典")
|
@ExcelProperty("客户级别.字典")
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
@ -111,5 +112,26 @@ public class ScreenController {
|
|||||||
ExcelUtils.write(response, "大屏数据.xls", "数据", ScreenRespVO.class,
|
ExcelUtils.write(response, "大屏数据.xls", "数据", ScreenRespVO.class,
|
||||||
BeanUtils.toBean(list, ScreenRespVO.class));
|
BeanUtils.toBean(list, ScreenRespVO.class));
|
||||||
}
|
}
|
||||||
|
@GetMapping("/searchUnfinished")
|
||||||
|
@Operation(summary = "获得未完成设计以及为发货的子项目数量")
|
||||||
|
@PermitAll
|
||||||
|
@OperateLog(enable = false)
|
||||||
|
public CommonResult<Map<String,Long>> searchUnfinished() {
|
||||||
|
return success(screenService.searchUnfinished());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/searchOrderInformation")
|
||||||
|
@Operation(summary = "获得按月份的订单数量")
|
||||||
|
@PermitAll
|
||||||
|
@OperateLog(enable = false)
|
||||||
|
public CommonResult<Map<String,Map<String, Integer>>> searchOrderInformation() {
|
||||||
|
return success(screenService.searchOrderInformation());
|
||||||
|
}
|
||||||
|
@GetMapping("/searchOrderByYear")
|
||||||
|
@Operation(summary = "获得按年的订单数量")
|
||||||
|
@PermitAll
|
||||||
|
@OperateLog(enable = false)
|
||||||
|
public CommonResult<Map<String,Integer>> searchOrderByYear() {
|
||||||
|
return success(screenService.searchOrderByYear());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -299,6 +299,13 @@ public class ProjectOrderDO extends BaseDO {
|
|||||||
private BigDecimal waixeiCost;
|
private BigDecimal waixeiCost;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private BigDecimal sumCost;
|
private BigDecimal sumCost;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String month;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Integer blackMold;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Integer coloredMolds;
|
||||||
/**
|
/**
|
||||||
* 变更的字段列表
|
* 变更的字段列表
|
||||||
* */
|
* */
|
||||||
|
|||||||
@ -8,19 +8,20 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderStatusEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderStatusEnum;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
|
||||||
import com.chanko.yunxi.mes.module.infra.dal.dataobject.file.FileDO;
|
import com.chanko.yunxi.mes.module.infra.dal.dataobject.file.FileDO;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import org.apache.ibatis.annotations.Delete;
|
import org.apache.ibatis.annotations.*;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目订单子项目 Mapper
|
* 项目订单子项目 Mapper
|
||||||
@ -151,4 +152,39 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
|
|||||||
}
|
}
|
||||||
@Delete("delete from project_sale_order_sub where project_order_id = #{id}")
|
@Delete("delete from project_sale_order_sub where project_order_id = #{id}")
|
||||||
void delByProjectOrderId(@Param("id") Long id);
|
void delByProjectOrderId(@Param("id") Long id);
|
||||||
|
@Select("SELECT COUNT(sub.id) \n" +
|
||||||
|
"FROM project_sale_order_sub sub\n" +
|
||||||
|
"WHERE sub.id NOT IN (\n" +
|
||||||
|
" SELECT project_sub_id\n" +
|
||||||
|
" FROM pro_process_design\n" +
|
||||||
|
" WHERE process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK') and tenant_id='2' and deleted=0\n" +
|
||||||
|
" GROUP BY project_sub_id\n" +
|
||||||
|
" HAVING \n" +
|
||||||
|
" COUNT(*) = 3 \n" +
|
||||||
|
" AND SUM(CASE WHEN is_over_process = 1 THEN 1 ELSE 0 END) = 3 \n" +
|
||||||
|
") and sub.create_time >='2025-06-01' and sub.tenant_id='2' and sub.deleted=0")
|
||||||
|
Long searchUnfinished();
|
||||||
|
@Select("SELECT COUNT(*)\n" +
|
||||||
|
"FROM project_sale_order_sub sub\n" +
|
||||||
|
"LEFT JOIN project_deliver_order_sub deliver ON sub.id = deliver.sale_order_sub_id and deliver.tenant_id='2' and deliver.deleted=0 \n" +
|
||||||
|
"WHERE deliver.sale_order_sub_id IS NULL and sub.tenant_id='2' and sub.deleted=0 ")
|
||||||
|
Long searchNotDispatched();
|
||||||
|
@Select("SELECT \n" +
|
||||||
|
" MONTH(create_time) AS month,\n" +
|
||||||
|
" SUM(CASE WHEN business_line = 2 THEN 1 ELSE 0 END) AS blackMold,\n" +
|
||||||
|
" SUM(CASE WHEN business_line =1 THEN 1 ELSE 0 END) AS coloredMolds\n" +
|
||||||
|
"FROM project_sale_order\n" +
|
||||||
|
"WHERE YEAR(create_time) = YEAR(CURDATE())\n" +
|
||||||
|
"GROUP BY MONTH(create_time)\n" +
|
||||||
|
"ORDER BY month;")
|
||||||
|
List<ProjectOrderDO> searchOrderInformation();
|
||||||
|
|
||||||
|
@Select("SELECT \n" +
|
||||||
|
" YEAR(create_time) AS year,\n" +
|
||||||
|
" COUNT(id) as amount \n" +
|
||||||
|
"FROM project_sale_order\n" +
|
||||||
|
"WHERE YEAR(create_time) >= YEAR(CURDATE()) - 4 and tenant_id=2 and deleted=0\n" +
|
||||||
|
"GROUP BY YEAR(create_time)\n" +
|
||||||
|
"ORDER BY year;")
|
||||||
|
List<Map<String, Integer>> searchOrderByYear();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -197,13 +197,13 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
// 将每个工艺任务拆分成独立的任务项,方便统一检查
|
// 将每个工艺任务拆分成独立的任务项,方便统一检查
|
||||||
List<TaskItem> allNewItems = new ArrayList<>();
|
List<TaskItem> allNewItems = new ArrayList<>();
|
||||||
for (PlanSubSaveReqVO task : processTasks) {
|
for (PlanSubSaveReqVO task : processTasks) {
|
||||||
if (!task.isHasSaveInBlankDetail() && task.getBlankOwner() != null && task.getStartBlankDate() != null && task.getBlankDate() != null) {
|
if (!task.isHasSaveInBlankDetail() && ObjectUtil.isNotEmpty(task.getBlankOwner()) && ObjectUtil.isNotEmpty(task.getStartBlankDate()) && ObjectUtil.isNotEmpty(task.getBlankDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getBlankOwner()), task.getStartBlankDate(), task.getBlankDate(), "毛坯",task.getProjectNameSim()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getBlankOwner()), task.getStartBlankDate(), task.getBlankDate(), "毛坯",task.getProjectNameSim()));
|
||||||
}
|
}
|
||||||
if (!task.isHasSaveIn2DDetail() && task.getTwoDimOwner() != null && task.getStartTwoDimDate() != null && task.getTwoDimDate() != null) {
|
if (!task.isHasSaveIn2DDetail() && ObjectUtil.isNotEmpty(task.getTwoDimOwner()) && ObjectUtil.isNotEmpty(task.getStartTwoDimDate()) && ObjectUtil.isNotEmpty(task.getTwoDimDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getTwoDimOwner()), task.getStartTwoDimDate(), task.getTwoDimDate(), "2D",task.getProjectSubShortName()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getTwoDimOwner()), task.getStartTwoDimDate(), task.getTwoDimDate(), "2D",task.getProjectSubShortName()));
|
||||||
}
|
}
|
||||||
if (!task.isHasSaveIn3DDetail() && task.getThreeDimOwner() != null && task.getStartThreeDimDate() != null && task.getThreeDimDate() != null) {
|
if (!task.isHasSaveIn3DDetail() &&ObjectUtil.isNotEmpty( task.getThreeDimOwner()) &&ObjectUtil.isNotEmpty(task.getStartThreeDimDate()) && ObjectUtil.isNotEmpty(task.getThreeDimDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getThreeDimOwner()), task.getStartThreeDimDate(), task.getThreeDimDate(), "3D",task.getProjectSubShortName()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getThreeDimOwner()), task.getStartThreeDimDate(), task.getThreeDimDate(), "3D",task.getProjectSubShortName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,16 +230,16 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
private void checkExternalConflicts(List<PlanSubSaveReqVO> processTasks, Map<Long, List<PlanSubDetailDO>> tasksByOwner) {
|
private void checkExternalConflicts(List<PlanSubSaveReqVO> processTasks, Map<Long, List<PlanSubDetailDO>> tasksByOwner) {
|
||||||
for (PlanSubSaveReqVO newTask : processTasks) {
|
for (PlanSubSaveReqVO newTask : processTasks) {
|
||||||
// 检查毛坯任务
|
// 检查毛坯任务
|
||||||
if (!newTask.isHasSaveInBlankDetail() && newTask.getBlankOwner() != null){
|
if (!newTask.isHasSaveInBlankDetail() && ObjectUtil.isNotEmpty(newTask.getBlankOwner())){
|
||||||
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getBlankOwner()), newTask.getStartBlankDate(), newTask.getBlankDate(), "BLUEPRINT_WORKBLANK", tasksByOwner);
|
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getBlankOwner()), newTask.getStartBlankDate(), newTask.getBlankDate(), "BLUEPRINT_WORKBLANK", tasksByOwner);
|
||||||
}
|
}
|
||||||
// 检查2D任务
|
// 检查2D任务
|
||||||
if (!newTask.isHasSaveIn2DDetail() && newTask.getTwoDimOwner() != null){
|
if (!newTask.isHasSaveIn2DDetail() && ObjectUtil.isNotEmpty(newTask.getTwoDimOwner())){
|
||||||
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getTwoDimOwner()), newTask.getStartTwoDimDate(), newTask.getTwoDimDate(), "BLUEPRINT_2D", tasksByOwner);
|
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getTwoDimOwner()), newTask.getStartTwoDimDate(), newTask.getTwoDimDate(), "BLUEPRINT_2D", tasksByOwner);
|
||||||
|
|
||||||
}
|
}
|
||||||
// 检查3D任务
|
// 检查3D任务
|
||||||
if (!newTask.isHasSaveIn3DDetail() && newTask.getThreeDimOwner() != null){
|
if (!newTask.isHasSaveIn3DDetail() && ObjectUtil.isNotEmpty(newTask.getThreeDimOwner())){
|
||||||
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getThreeDimOwner()), newTask.getStartThreeDimDate(), newTask.getThreeDimDate(), "BLUEPRINT_3D", tasksByOwner);
|
checkTaskAgainstExisting(newTask.getProjectNameSim(),Long.valueOf(newTask.getThreeDimOwner()), newTask.getStartThreeDimDate(), newTask.getThreeDimDate(), "BLUEPRINT_3D", tasksByOwner);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -250,12 +250,12 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
* 辅助方法:检查单个新任务与已存在任务的冲突
|
* 辅助方法:检查单个新任务与已存在任务的冲突
|
||||||
*/
|
*/
|
||||||
private void checkTaskAgainstExisting(String name,Long owner, LocalDateTime start, LocalDateTime end, String taskType, Map<Long, List<PlanSubDetailDO>> tasksByOwner) {
|
private void checkTaskAgainstExisting(String name,Long owner, LocalDateTime start, LocalDateTime end, String taskType, Map<Long, List<PlanSubDetailDO>> tasksByOwner) {
|
||||||
if (owner == null || start == null || end == null) {
|
if (ObjectUtil.isEmpty(owner) || ObjectUtil.isEmpty(start) || ObjectUtil.isEmpty(end)) {
|
||||||
return; // 如果责任人或时间为空,则无需检查
|
return; // 如果责任人或时间为空,则无需检查
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PlanSubDetailDO> existingTasksForOwner = tasksByOwner.get(owner);
|
List<PlanSubDetailDO> existingTasksForOwner = tasksByOwner.get(owner);
|
||||||
if (existingTasksForOwner == null) {
|
if (ObjectUtil.isEmpty(existingTasksForOwner)) {
|
||||||
return; // 如果该责任人没有已存在的任务,则无需检查
|
return; // 如果该责任人没有已存在的任务,则无需检查
|
||||||
}
|
}
|
||||||
String typeName = "";
|
String typeName = "";
|
||||||
@ -582,7 +582,7 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
}
|
}
|
||||||
public static boolean hasOverlap(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) {
|
public static boolean hasOverlap(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) {
|
||||||
// 处理 null 值,如果任一时间为 null,则认为该时间范围无效,不产生交集
|
// 处理 null 值,如果任一时间为 null,则认为该时间范围无效,不产生交集
|
||||||
if (start1 == null || end1 == null || start2 == null || end2 == null) {
|
if (ObjectUtil.isEmpty(start1) || ObjectUtil.isEmpty(end1) || ObjectUtil.isEmpty(start2) || ObjectUtil.isEmpty(end2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// 核心判断逻辑
|
// 核心判断逻辑
|
||||||
@ -692,13 +692,13 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
// 将每个工艺任务拆分成独立的任务项,方便统一检查
|
// 将每个工艺任务拆分成独立的任务项,方便统一检查
|
||||||
List<TaskItem> allNewItems = new ArrayList<>();
|
List<TaskItem> allNewItems = new ArrayList<>();
|
||||||
for (PlanSubSaveReqVO task : list) {
|
for (PlanSubSaveReqVO task : list) {
|
||||||
if (!task.isHasSaveInBlankDetail() && task.getBlankOwner() != null && task.getStartBlankDate() != null && task.getBlankDate() != null) {
|
if (!task.isHasSaveInBlankDetail() && ObjectUtil.isNotEmpty(task.getBlankOwner()) && ObjectUtil.isNotEmpty(task.getStartBlankDate()) &&ObjectUtil.isNotEmpty( task.getBlankDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getBlankOwner()), task.getStartBlankDate(), task.getBlankDate(), "毛坯",task.getName()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getBlankOwner()), task.getStartBlankDate(), task.getBlankDate(), "毛坯",task.getName()));
|
||||||
}
|
}
|
||||||
if (!task.isHasSaveIn2DDetail() && task.getTwoDimOwner() != null && task.getStartTwoDimDate() != null && task.getTwoDimDate() != null) {
|
if (!task.isHasSaveIn2DDetail() && ObjectUtil.isNotEmpty(task.getTwoDimOwner()) &&ObjectUtil.isNotEmpty( task.getStartTwoDimDate()) && ObjectUtil.isNotEmpty(task.getTwoDimDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getTwoDimOwner()), task.getStartTwoDimDate(), task.getTwoDimDate(), "2D",task.getName()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getTwoDimOwner()), task.getStartTwoDimDate(), task.getTwoDimDate(), "2D",task.getName()));
|
||||||
}
|
}
|
||||||
if (!task.isHasSaveIn3DDetail() && task.getThreeDimOwner() != null && task.getStartThreeDimDate() != null && task.getThreeDimDate() != null) {
|
if (!task.isHasSaveIn3DDetail() && ObjectUtil.isNotEmpty(task.getThreeDimOwner()) && ObjectUtil.isNotEmpty(task.getStartThreeDimDate()) && ObjectUtil.isNotEmpty(task.getThreeDimDate())) {
|
||||||
allNewItems.add(new TaskItem(Long.valueOf(task.getThreeDimOwner()), task.getStartThreeDimDate(), task.getThreeDimDate(), "3D",task.getName()));
|
allNewItems.add(new TaskItem(Long.valueOf(task.getThreeDimOwner()), task.getStartThreeDimDate(), task.getThreeDimDate(), "3D",task.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -718,7 +718,7 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
}
|
}
|
||||||
for (PlanSubSaveReqVO newTask : list) {
|
for (PlanSubSaveReqVO newTask : list) {
|
||||||
// 检查毛坯任务
|
// 检查毛坯任务
|
||||||
if (!newTask.isHasSaveInBlankDetail() && newTask.getBlankOwner() != null){
|
if (!newTask.isHasSaveInBlankDetail() && ObjectUtil.isNotEmpty(newTask.getBlankOwner())){
|
||||||
Long owner = Long.valueOf(newTask.getBlankOwner());
|
Long owner = Long.valueOf(newTask.getBlankOwner());
|
||||||
// 2. 检查 list1 与 list2 之间的时间冲突
|
// 2. 检查 list1 与 list2 之间的时间冲突
|
||||||
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartBlankDate()) || ObjectUtil.isEmpty(newTask.getBlankDate())) {
|
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartBlankDate()) || ObjectUtil.isEmpty(newTask.getBlankDate())) {
|
||||||
@ -744,7 +744,7 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 检查2D任务
|
// 检查2D任务
|
||||||
if (!newTask.isHasSaveIn2DDetail() && newTask.getTwoDimOwner() != null){
|
if (!newTask.isHasSaveIn2DDetail() && ObjectUtil.isNotEmpty(newTask.getTwoDimOwner())){
|
||||||
Long owner = Long.valueOf(newTask.getTwoDimOwner());
|
Long owner = Long.valueOf(newTask.getTwoDimOwner());
|
||||||
// 2. 检查 list1 与 list2 之间的时间冲突
|
// 2. 检查 list1 与 list2 之间的时间冲突
|
||||||
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartTwoDimDate()) || ObjectUtil.isEmpty(newTask.getTwoDimDate())) {
|
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartTwoDimDate()) || ObjectUtil.isEmpty(newTask.getTwoDimDate())) {
|
||||||
@ -770,7 +770,7 @@ public class PlanSubServiceImpl implements PlanSubService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 检查3D任务
|
// 检查3D任务
|
||||||
if (!newTask.isHasSaveIn3DDetail() && newTask.getThreeDimOwner() != null){
|
if (!newTask.isHasSaveIn3DDetail() && ObjectUtil.isNotEmpty(newTask.getThreeDimOwner())){
|
||||||
Long owner = Long.valueOf(newTask.getThreeDimOwner());
|
Long owner = Long.valueOf(newTask.getThreeDimOwner());
|
||||||
// 2. 检查 list1 与 list2 之间的时间冲突
|
// 2. 检查 list1 与 list2 之间的时间冲突
|
||||||
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartThreeDimDate()) || ObjectUtil.isEmpty(newTask.getThreeDimDate())) {
|
if (ObjectUtil.isEmpty(owner)|| ObjectUtil.isEmpty(newTask.getStartThreeDimDate()) || ObjectUtil.isEmpty(newTask.getThreeDimDate())) {
|
||||||
|
|||||||
@ -234,6 +234,7 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
|
|||||||
lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2);
|
lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2);
|
||||||
lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N");
|
lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N");
|
||||||
lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getCreateTime);
|
lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getCreateTime);
|
||||||
|
lambdaQueryWrapper.last("limit 1");
|
||||||
PlanSubDetailDO planSubDetailDO = planSubDetailMapper.selectOne(lambdaQueryWrapper);
|
PlanSubDetailDO planSubDetailDO = planSubDetailMapper.selectOne(lambdaQueryWrapper);
|
||||||
if (ObjectUtil.isNotEmpty(planSubDetailDO)){
|
if (ObjectUtil.isNotEmpty(planSubDetailDO)){
|
||||||
String type="";
|
String type="";
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.screen.ScreenDO;
|
|||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 大屏数据 Service 接口
|
* 大屏数据 Service 接口
|
||||||
@ -57,4 +58,9 @@ public interface ScreenService {
|
|||||||
|
|
||||||
void updateScreenAll(List<ScreenSaveReqVO> updateReqVOList);
|
void updateScreenAll(List<ScreenSaveReqVO> updateReqVOList);
|
||||||
|
|
||||||
|
Map<String, Long> searchUnfinished();
|
||||||
|
|
||||||
|
Map<String, Map<String, Integer>> searchOrderInformation();
|
||||||
|
|
||||||
|
Map<String, Integer> searchOrderByYear();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.screen;
|
package com.chanko.yunxi.mes.module.heli.service.screen;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.TypeReference;
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@ -39,9 +40,11 @@ import java.math.BigDecimal;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.Year;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.SCREEN_NOT_EXISTS;
|
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.SCREEN_NOT_EXISTS;
|
||||||
@ -140,6 +143,78 @@ public class ScreenServiceImpl implements ScreenService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Long> searchUnfinished() {
|
||||||
|
Map<String, Long> map = new HashMap<>();
|
||||||
|
Long unfinished= projectOrderSubMapper.searchUnfinished();
|
||||||
|
Long notDispatched =projectOrderSubMapper.searchNotDispatched();
|
||||||
|
map.put("unfinished",unfinished);
|
||||||
|
map.put("notDispatched",notDispatched);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Map<String, Integer>> searchOrderInformation() {
|
||||||
|
Map<String, Map<String, Integer>> resultMap = new LinkedHashMap<>();
|
||||||
|
for (int i = 1; i <= 12; i++) {
|
||||||
|
String monthKey = String.valueOf(i);
|
||||||
|
// 创建内层Map并设置默认值
|
||||||
|
Map<String, Integer> innerMap = new HashMap<>();
|
||||||
|
innerMap.put("blackMold", 0);
|
||||||
|
innerMap.put("coloredMolds", 0);
|
||||||
|
resultMap.put(monthKey, innerMap);
|
||||||
|
}
|
||||||
|
List<ProjectOrderDO> projectOrderDOS = projectOrderSubMapper.searchOrderInformation();
|
||||||
|
for (ProjectOrderDO order : projectOrderDOS) {
|
||||||
|
String month = order.getMonth();
|
||||||
|
Map<String, Integer> innerMap = resultMap.get(month);
|
||||||
|
if (ObjectUtil.isNotEmpty(innerMap)){
|
||||||
|
innerMap.put("blackMold", order.getBlackMold());
|
||||||
|
innerMap.put("coloredMolds",order.getColoredMolds());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Integer> searchOrderByYear() {
|
||||||
|
int currentYear = Year.now().getValue();
|
||||||
|
|
||||||
|
// 初始化近5年的年份 map,value 为 null
|
||||||
|
Map<String, Integer> map = IntStream.range(currentYear - 4, currentYear + 1)
|
||||||
|
.boxed()
|
||||||
|
.collect(
|
||||||
|
TreeMap::new,
|
||||||
|
(m, year) -> m.put(String.valueOf(year), null),
|
||||||
|
Map::putAll
|
||||||
|
);
|
||||||
|
|
||||||
|
// 假设这个 list 是从数据库查询出来的,key 是年份,value 是订单数量
|
||||||
|
List<Map<String, Integer>> list = projectOrderSubMapper.searchOrderByYear();
|
||||||
|
Map<String, Integer> dataMap=new HashMap<>();
|
||||||
|
list.forEach(item->{
|
||||||
|
dataMap.put(String.valueOf(item.get("year")),item.get("amount"));
|
||||||
|
});
|
||||||
|
// 第一步:用 list 中的数据赋值
|
||||||
|
for (Map.Entry<String, Integer> entry : dataMap.entrySet()) {
|
||||||
|
String year = entry.getKey();
|
||||||
|
Integer amount = Integer.parseInt(String.valueOf(entry.getValue()));
|
||||||
|
if (map.containsKey(year)) {
|
||||||
|
map.put(year, amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 第二步:处理 map 中 value 为 null 的年份,且不是当前年份的
|
||||||
|
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||||
|
String year = entry.getKey();
|
||||||
|
if (ObjectUtil.isEmpty(entry.getValue()) && Integer.parseInt(year) != currentYear) {
|
||||||
|
// String defaultUserName = userMapper.selectFirstUserName();
|
||||||
|
// map.put(year, defaultUserName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteScreen(Long id) {
|
public void deleteScreen(Long id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
|
|||||||
@ -75,7 +75,11 @@
|
|||||||
<el-table-column label="简码" align="center" min-width="120" prop="brief" />
|
<el-table-column label="简码" align="center" min-width="120" prop="brief" />
|
||||||
<el-table-column label="客户简称" align="center" min-width="120" prop="name" />
|
<el-table-column label="客户简称" align="center" min-width="120" prop="name" />
|
||||||
<el-table-column label="客户全称" align="center" min-width="120" prop="fullName" />
|
<el-table-column label="客户全称" align="center" min-width="120" prop="fullName" />
|
||||||
<el-table-column label="所属行业" align="center" min-width="120" prop="industry" />
|
<el-table-column label="所属行业" align="center" min-width="120" prop="industry" >
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industry" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="客户级别" align="center" min-width="120" prop="level">
|
<el-table-column label="客户级别" align="center" min-width="120" prop="level">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.HELI_CUSTOMER_LEVEL" :value="scope.row.level" />
|
<dict-tag :type="DICT_TYPE.HELI_CUSTOMER_LEVEL" :value="scope.row.level" />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user