diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java index 007a5165..4567ebc0 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java @@ -40,7 +40,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** - * 订单管理Controller + * 订单管理 * * @author ruoyi * @date 2025-05-30 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Cnarea.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Cnarea.java index e3cfa85e..93a76179 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Cnarea.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Cnarea.java @@ -70,6 +70,7 @@ public class Cnarea { */ private Double lat; + private String shortCode; } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java index 7597c1ba..6086189f 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java @@ -48,8 +48,11 @@ public class ProjectInfo extends BaseEntity private String industryType; /** 属地 */ - @Excel(name = "属地") - private String province; +// @Excel(name = "属地") +// private String province; + /** 代表处 */ + private String agentCode; + private String agentName; /** 项目把握度 */ @Excel(name = "项目把握度") private String projectGraspDegree; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java index 778fc477..57af71c1 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java @@ -35,6 +35,7 @@ public class ProjectOrderInfo extends BaseEntity { private String projectName; private String customerName; private String industryType; + private String province; /** diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java index 3d3d7137..06430451 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java @@ -60,4 +60,6 @@ public interface ProjectOrderInfoMapper public int deleteProjectOrderInfoByIds(String[] ids); List selectProjectOrderInfoByProjectId(List projectId); + + int selectMaxOrderCode(String province); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CnareaServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CnareaServiceImpl.java index acb15655..5811842e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CnareaServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CnareaServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.sip.service.impl; import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.sip.domain.Cnarea; import com.ruoyi.sip.mapper.CnareaMapper; import com.ruoyi.sip.service.ICnareaService; @@ -31,11 +32,13 @@ public class CnareaServiceImpl implements ICnareaService { */ @Override public List queryAll(Cnarea cnarea) { - if (CacheUtils.get(cnarea.getParentCode()) != null) { + if (StringUtils.isNotEmpty(cnarea.getParentCode()) && CacheUtils.get(cnarea.getParentCode()) != null) { return (List) CacheUtils.get(cnarea.getParentCode()); } List dataList = cnareaMapper.queryAll(cnarea); - CacheUtils.put(cnarea.getParentCode(), dataList); + if (StringUtils.isNotEmpty(cnarea.getParentCode())) { + CacheUtils.put(cnarea.getParentCode(), dataList); + } return dataList; } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java index 430fdbc5..0b45e754 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java @@ -43,6 +43,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { @Autowired private IProjectOperateLogService operateLogService; + @Autowired private IProjectOrderInfoService orderInfoService; private static final String PROJECT_CODE_PREFIX = "V"; @@ -167,11 +168,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { // 获取更新前的项目信息 ProjectInfo oldProjectInfo = this.selectProjectInfoById(projectInfo.getId()); //变更属地校验 - if (!projectInfo.getProvince().equals(oldProjectInfo.getProvince())) { + if (!projectInfo.getAgentCode().equals(oldProjectInfo.getAgentCode())) { //查询订单信息 如果有抛出异常 List projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(projectInfo.getId())); if (CollUtil.isNotEmpty(projectOrderInfos)) { - throw new ServiceException("该项目存在订单流转,无法更改属地"); + throw new ServiceException("该项目存在订单流转,无法更改代表处"); } //如果没有 变更编码 是否考虑高并发加锁 setProjectCode(projectInfo); @@ -205,7 +206,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { logIndex = compareField(logContent, logIndex, "行业", DictUtils.getDictLabel(INDUSTRY_TYPE_DICT_TYPE, oldProjectInfo.getIndustryType()) , DictUtils.getDictLabel(INDUSTRY_TYPE_DICT_TYPE, projectInfo.getIndustryType())); - logIndex = compareField(logContent, logIndex, "属地", oldProjectInfo.getProvince(), projectInfo.getProvince()); + logIndex = compareField(logContent, logIndex, "代表处", oldProjectInfo.getAgentName(), projectInfo.getAgentName()); logIndex = compareField(logContent, logIndex, "项目阶段", DictUtils.getDictLabel(PROJECT_STAGE_DICT_TYPE, oldProjectInfo.getProjectStage()) , DictUtils.getDictLabel(PROJECT_STAGE_DICT_TYPE, projectInfo.getProjectStage())); logIndex = compareField(logContent, logIndex, "项目把握度", oldProjectInfo.getProjectGraspDegree(), projectInfo.getProjectGraspDegree()); @@ -298,24 +299,15 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { index++; } else if (oldProduct != null) { // 变更产品 - - if (!oldProduct.getProductCode().equals(newProduct.getProductCode())) { - logContent.append(index).append(".").append(type).append("变更:").append(oldProduct.getProductCode()).append(" -> ").append(newProduct.getProductCode()).append("\n"); - index++; - } - if (!Objects.equals(oldProduct.getModel(), newProduct.getModel())) { - logContent.append(index).append(".").append("型号").append("由‘").append(oldProduct.getModel()).append("’变更为‘").append(newProduct.getModel()).append("’\n"); - index++; - } - if (!Objects.equals(oldProduct.getQuantity(), newProduct.getQuantity())) { - logContent.append(index).append(".").append("数量").append("由‘").append(oldProduct.getQuantity()).append("’变更为‘").append(newProduct.getQuantity()).append("’\n"); - index++; - } - if (!Objects.equals(oldProduct.getRemark(), newProduct.getRemark())) { - logContent.append(index).append(".").append("备注").append("由‘").append(oldProduct.getRemark()).append("’变更为‘").append(newProduct.getRemark()).append("’\n"); - index++; - } - + index = compareField(logContent, index, "产品编号", oldProduct.getProductCode(), newProduct.getProductCode()); + index = compareField(logContent, index, "数量", oldProduct.getQuantity(), newProduct.getQuantity()); + index = compareField(logContent, index, "目录单价", oldProduct.getCataloguePrice(), newProduct.getCataloguePrice()); + index = compareField(logContent, index, "指导折扣", oldProduct.getGuidanceDiscount(), newProduct.getGuidanceDiscount()); + index = compareField(logContent, index, "指导折扣", oldProduct.getDiscount(), newProduct.getDiscount()); + index = compareField(logContent, index, "单价", oldProduct.getPrice(), newProduct.getPrice()); + index = compareField(logContent, index, "总价", oldProduct.getAllPrice(), newProduct.getAllPrice()); + index = compareField(logContent, index, "目录总价", oldProduct.getCatalogueAllPrice(), newProduct.getCatalogueAllPrice()); + index = compareField(logContent, index, "备注", oldProduct.getRemark(), newProduct.getRemark()); } } return index; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java index be0849aa..13de27c8 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java @@ -6,9 +6,12 @@ import java.util.Map; import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.sip.domain.Cnarea; import com.ruoyi.sip.domain.ProjectOrderFileLog; +import com.ruoyi.sip.service.ICnareaService; import com.ruoyi.sip.service.IProjectOrderFileLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +33,8 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { @Autowired private IProjectOrderFileLogService fileLogService; + @Autowired + private ICnareaService cnareaService; /** * 查询订单管理 * @@ -66,12 +71,42 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { */ @Override public int insertProjectOrderInfo(ProjectOrderInfo projectOrderInfo) { + // 生成订单编号 + String orderNumber = generateOrderNumber(projectOrderInfo.getProvince()); + projectOrderInfo.setOrderCode(orderNumber); projectOrderInfo.setCreateTime(DateUtils.getNowDate()); projectOrderInfo.setCreateBy(ShiroUtils.getUserId().toString()); - //todo 生成订单编号 return projectOrderInfoMapper.insertProjectOrderInfo(projectOrderInfo); } + /** + * 生成订单编号 + * + * @param province 省份代码 + * @return 订单编号 + */ + private String generateOrderNumber(String province) { + // 获取当前时间,格式为yyyyMMdd + String currentDate = DateUtils.dateTimeNow("yyyyMMdd"); + Cnarea cnarea = new Cnarea(); + cnarea.setName(province); + cnarea.setLevel("1"); + List cnareas = cnareaService.queryAll(cnarea); + if (CollUtil.isEmpty(cnareas)) { + throw new ServiceException("省市未配置,生成订单编号出错,请联系管理员"); + } + String shortCode = cnareas.get(0).getShortCode(); + StringBuilder result = new StringBuilder(); + result.append("ZGXS-").append(currentDate).append(shortCode); + // 查询当天已有的订单数量,用于生成顺序编码 + int count = projectOrderInfoMapper.selectMaxOrderCode(result.toString()); + // 生成顺序编码,不足三位补零 + String sequence = String.format("%03d", count + 1); + result.append(sequence).append("-VDI"); + // 拼接订单编号 + return result.toString(); + } + /** * 修改订单管理 * @@ -80,6 +115,12 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { */ @Override public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo) { + ProjectOrderInfo existProjectOrderInfo = projectOrderInfoMapper.selectProjectOrderInfoById(projectOrderInfo.getId()); + if (!existProjectOrderInfo.getProvince().equals(projectOrderInfo.getProvince())) { + String orderNumber = generateOrderNumber(projectOrderInfo.getProvince()); + projectOrderInfo.setOrderCode(orderNumber); + } + projectOrderInfo.setUpdateBy(ShiroUtils.getUserId().toString()); projectOrderInfo.setUpdateTime(DateUtils.getNowDate()); return projectOrderInfoMapper.updateProjectOrderInfo(projectOrderInfo); } diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml index c2a483f3..b6e733b3 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml @@ -35,56 +35,90 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, project_code, project_name,bg_property, customer_code, customer_name, industry_type, province, project_stage, project_grasp_degree, hz_support_user, operate_institution + select id, project_code, project_name,bg_property, customer_code, customer_name, industry_type, agent_code, project_stage, project_grasp_degree, hz_support_user, operate_institution , partner_code, partner_name, contact_way, estimated_amount, currency_type, estimated_order_time, estimated_deliver_time, competitor, country_product, server_configuration - , key_problem, project_desc, create_by, create_time, update_by, update_time from project_info + , key_problem, project_desc, create_by, create_time, update_by, update_time from project_info t1 + + + select t1.id, + t1.project_code, + t1.project_name, + t1.bg_property, + t1.customer_code, + t1.customer_name, + t1.industry_type, + t1.agent_code, + t1.project_stage, + t1.project_grasp_degree, + t1.hz_support_user, + t1.operate_institution, + t1.partner_code, + t1.partner_name, + t1.contact_way, + t1.estimated_amount, + t1.currency_type, + t1.estimated_order_time, + t1.estimated_deliver_time, + t1.competitor, + t1.country_product, + t1.server_configuration, + t1.key_problem, + t1.project_desc, + t1.create_by, + t1.create_time, + t1.update_by, + t1.update_time, + t2.agent_name + from project_info t1 + left join agent_info t2 on t1.agent_code = t2.agent_code + insert into project_order_info project_id, + province, city, business_person, business_email, @@ -127,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{projectId}, + #{province}, #{city}, #{businessPerson}, #{businessEmail}, @@ -160,6 +171,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update project_order_info project_id = #{projectId}, + province = #{province}, city = #{city}, business_person = #{businessPerson}, business_email = #{businessEmail}, diff --git a/ruoyi-sip/src/main/resources/mapper/system/CnareaMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/CnareaMapper.xml index 42077eb4..a0b02407 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/CnareaMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/CnareaMapper.xml @@ -15,11 +15,12 @@ + - id, level, parent_code, area_code, zip_code, city_code, name, short_name, merger_name, pinyin, lng, lat + id, level, parent_code, area_code, zip_code, city_code, name, short_name, merger_name, pinyin, lng, lat,short_code