diff --git a/ruoyi-admin/src/main/resources/templates/layout/product-list.html b/ruoyi-admin/src/main/resources/templates/layout/product-list.html index 6d9bd838..067f4a53 100644 --- a/ruoyi-admin/src/main/resources/templates/layout/product-list.html +++ b/ruoyi-admin/src/main/resources/templates/layout/product-list.html @@ -218,8 +218,8 @@ let tr = $(` ${length + 1} - - + + @@ -251,7 +251,7 @@ `) $('#productTable3 tbody').append(tr) - initSearchProduct('11,22') + initSearchProduct('11,22,99') initPrice() } diff --git a/ruoyi-admin/src/main/resources/templates/main.html b/ruoyi-admin/src/main/resources/templates/main.html index ac4b7020..96c44132 100644 --- a/ruoyi-admin/src/main/resources/templates/main.html +++ b/ruoyi-admin/src/main/resources/templates/main.html @@ -10,13 +10,201 @@ - + +
+
+
+
+
商机管理
+
+
+
+
+
+
+ +
+
+
+
合同信息
+
+
+
+
+
+
+
+ - diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/HomepageController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/HomepageController.java new file mode 100644 index 00000000..ffb18715 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/HomepageController.java @@ -0,0 +1,56 @@ +package com.ruoyi.sip.controller; + + +import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.service.IOrderInfoService; +import com.ruoyi.sip.service.IProjectInfoService; +import com.ruoyi.sip.service.IProjectOrderInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +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.ResponseBody; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : HomepageController + * @Description : 首页控制器 + * @DATE : Created in 11:09 2025/6/17 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/06/17 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Controller +@RequestMapping("/homepage") +public class HomepageController { + @Autowired + private IProjectInfoService projectInfoService; + @Autowired + private IOrderInfoService orderInfoService; + + + + @GetMapping( "/project") + @ResponseBody + public AjaxResult projectInfo(HomepageQueryDto dto){ + + return AjaxResult.success( projectInfoService.homePageData(dto)); + } + + @GetMapping( "/order") + @ResponseBody + public AjaxResult orderInfo(HomepageQueryDto dto){ + return AjaxResult.success(orderInfoService.homePageData(dto)); + } + + + + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/HomepageQueryDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/HomepageQueryDto.java new file mode 100644 index 00000000..2da18eba --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/HomepageQueryDto.java @@ -0,0 +1,23 @@ +package com.ruoyi.sip.dto; + + +import lombok.Data; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : HomepageQueryDto + * @Description : + * @DATE : Created in 11:14 2025/6/17 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/06/17 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class HomepageQueryDto { + private Integer day; + private Integer month; +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDetailDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDetailDto.java new file mode 100644 index 00000000..a7332b90 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDetailDto.java @@ -0,0 +1,23 @@ +package com.ruoyi.sip.dto; + + +import lombok.Data; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : StatisticsDetailDto + * @Description : + * @DATE : Created in 11:23 2025/6/17 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/06/17 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class StatisticsDetailDto { + private String statisticsStr; + private Integer value; +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDto.java new file mode 100644 index 00000000..ff57c66b --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/StatisticsDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.sip.dto; + + +import lombok.Data; + +import java.util.List; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : StatisticsDto + * @Description : + * @DATE : Created in 11:17 2025/6/17 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/06/17 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class StatisticsDto { + private List lineData; + private List projectInfoList; + private List projectOrderInfoList; + private List orderInfoList; + + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java index e1d5889f..dae8bbe1 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java @@ -6,6 +6,8 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.sip.domain.MaintenanceRecordsDto; import com.ruoyi.sip.domain.OrderInfo; import com.ruoyi.sip.domain.OrderList; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; /** * 合同档案Mapper接口 @@ -112,4 +114,5 @@ public interface OrderInfoMapper List listExport(OrderList orderList); Integer selectUniqueCount(OrderInfo orderInfo); + List homePageData(HomepageQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java index f24438c3..42ba4fb2 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java @@ -4,6 +4,8 @@ import java.util.List; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.sip.domain.ProjectInfo; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; /** * 项目管理Mapper接口 @@ -64,4 +66,6 @@ public interface ProjectInfoMapper String selectMaxProjectCode(ProjectInfo projectInfo); List selectUserById(List list); + + List listHomePageData(HomepageQueryDto dto); } 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 090a51ea..8424f570 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 @@ -2,6 +2,8 @@ package com.ruoyi.sip.mapper; import java.util.List; import com.ruoyi.sip.domain.ProjectOrderInfo; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; /** * 订单管理Mapper接口 @@ -64,4 +66,6 @@ public interface ProjectOrderInfoMapper int selectMaxOrderCode(String province); String selectAgentProvinceByProjectId(Long projectId); + + List listHomePageData(HomepageQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOrderInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOrderInfoService.java index ae2306b5..d740cb15 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOrderInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOrderInfoService.java @@ -7,6 +7,8 @@ import com.ruoyi.sip.domain.MaintenanceRecordsDto; import com.ruoyi.sip.domain.OrderInfo; import com.ruoyi.sip.domain.OrderList; import com.ruoyi.sip.dto.ApiDataQueryDto; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDto; import com.ruoyi.sip.vo.OrderInfoVo; import org.springframework.web.multipart.MultipartFile; @@ -81,4 +83,6 @@ public interface IOrderInfoService AjaxResult listImportData(List orderListList, Long orderId); List readData(MultipartFile file); + + StatisticsDto homePageData(HomepageQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java index 3b51b6e1..c5a2a73a 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java @@ -2,6 +2,8 @@ package com.ruoyi.sip.service; import java.util.List; import com.ruoyi.sip.domain.ProjectInfo; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDto; /** * 项目管理Service接口 @@ -60,4 +62,6 @@ public interface IProjectInfoService public int deleteProjectInfoById(Long id); String exportList(ProjectInfo projectInfo); + + StatisticsDto homePageData(HomepageQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java index e13e701d..9e11370f 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java @@ -2,6 +2,8 @@ package com.ruoyi.sip.service; import java.util.List; import com.ruoyi.sip.domain.ProjectOrderInfo; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; /** * 订单管理Service接口 @@ -70,4 +72,6 @@ public interface IProjectOrderInfoService List< ProjectOrderInfo> selectProjectOrderInfoByProjectId(List projectId); String exportList(ProjectOrderInfo projectOrderInfo); + + List listHomePageData(HomepageQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java index a2e9287b..34d473d8 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java @@ -2,18 +2,25 @@ package com.ruoyi.sip.service.impl; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Dict; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sip.domain.*; import com.ruoyi.sip.dto.ApiDataQueryDto; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; +import com.ruoyi.sip.dto.StatisticsDto; import com.ruoyi.sip.service.IAgentInfoService; import com.ruoyi.sip.service.ICustomerInfoService; import com.ruoyi.sip.service.IProductInfoService; @@ -268,7 +275,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService if (orderList.getDiscount() == null) { return AjaxResult.error("折扣不能为空"); } - if (orderList.getDiscount().compareTo(BigDecimal.ONE) > 0 || orderList.getDiscount().compareTo(BigDecimal.ZERO) <= 0) { + if (orderList.getDiscount().compareTo(BigDecimal.ONE) > 0 || orderList.getDiscount().compareTo(BigDecimal.ZERO) < 0) { return AjaxResult.error("折扣区间需在0-1之间"); } if (orderList.getPrice() == null) { @@ -369,6 +376,39 @@ public class OrderInfoServiceImpl implements IOrderInfoService return orderListList; } + @Override + public StatisticsDto homePageData(HomepageQueryDto dto) { + if (dto.getMonth() == null) { + throw new ServiceException("请选择月份"); + } + List orderList = orderInfoMapper.homePageData(dto); + Map orderMap = orderList.stream().collect(Collectors.toMap(StatisticsDetailDto::getStatisticsStr, Function.identity(), (a, b) -> a)); + LocalDate endDate = LocalDate.now(); + LocalDate startDate = endDate.minusMonths(dto.getMonth()); + for (LocalDate localDate = startDate; !localDate.isAfter(endDate); + localDate = localDate.plusMonths(1)) { + String key = localDate.format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM)); + if (!orderMap.containsKey(key)) { + StatisticsDetailDto statisticsDetailDto = new StatisticsDetailDto(); + statisticsDetailDto.setStatisticsStr(key); + statisticsDetailDto.setValue(0); + orderMap.put(key, statisticsDetailDto); + } + } + List xData = new ArrayList<>(); + List orderInfoList = new ArrayList<>(); + orderMap.keySet().stream().sorted().forEach(item -> { + xData.add(item); + orderInfoList.add(orderMap.get(item) == null ? 0 : orderMap.get(item).getValue()); + }); + // 构建返回结果 + StatisticsDto statisticsDto = new StatisticsDto(); + statisticsDto.setLineData(xData); + statisticsDto.setOrderInfoList(orderInfoList); + return statisticsDto; + } + + public Map> compareOrderLists(List orderInfoList, List orderListList) { // 创建一个映射,用于快速查找订单 Map orderInfoMap = orderInfoList.stream() 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 72aabd8c..d9330f19 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 @@ -19,6 +19,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sip.domain.*; import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; import com.ruoyi.sip.dto.StatisticsDto; import com.ruoyi.sip.mapper.ProjectInfoMapper; import com.ruoyi.sip.service.*; @@ -34,6 +35,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -505,6 +507,42 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { } } + @Override + public StatisticsDto homePageData(HomepageQueryDto dto) { + List projectDetailList = projectInfoMapper.listHomePageData(dto); + Map staticsMap = projectDetailList.stream().collect(Collectors.toMap(StatisticsDetailDto::getStatisticsStr, Function.identity(), (a, b) -> a)); + LocalDate endDate = LocalDate.now(); + LocalDate startDate = endDate.minusDays(dto.getDay()); + for (LocalDate localDate = startDate; !localDate.isAfter(endDate); + localDate = localDate.plusDays(1)) { + String key = localDate.format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD)); + if (!staticsMap.containsKey(key)) { + StatisticsDetailDto statisticsDetailDto = new StatisticsDetailDto(); + statisticsDetailDto.setStatisticsStr(key); + statisticsDetailDto.setValue(0); + staticsMap.put(key, statisticsDetailDto); + } + } + + List projectOrderDetailList = orderInfoService.listHomePageData(dto); + Map orderStaticsMap = projectOrderDetailList.stream().collect(Collectors.toMap(StatisticsDetailDto::getStatisticsStr, Function.identity(), (a, b) -> a)); + List xData = new ArrayList<>(); + List projectInfoList = new ArrayList<>(); + List projectOrderInfoList = new ArrayList<>(); + staticsMap.keySet().stream().sorted().forEach(item -> { + xData.add(item); + projectInfoList.add(staticsMap.get(item) == null ? 0 : staticsMap.get(item).getValue()); + projectOrderInfoList.add(orderStaticsMap.get(item) == null ? 0 : orderStaticsMap.get(item).getValue()); + }); + + + StatisticsDto result = new StatisticsDto(); + result.setLineData(xData); + result.setProjectInfoList(projectInfoList); + result.setProjectOrderInfoList(projectOrderInfoList); + return result; + } + private List fetchProjectInfos(ProjectInfo projectInfo) { List projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo); if (CollUtil.isEmpty(projectInfos)) { 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 77470677..75674610 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 @@ -1,7 +1,11 @@ package com.ruoyi.sip.service.impl; +import java.io.File; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; @@ -20,6 +24,8 @@ import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sip.domain.*; +import com.ruoyi.sip.dto.HomepageQueryDto; +import com.ruoyi.sip.dto.StatisticsDetailDto; import com.ruoyi.sip.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Cell; @@ -247,6 +253,25 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { } } + @Override + public List listHomePageData(HomepageQueryDto dto) { + List statisticsDetailDtos = projectOrderInfoMapper.listHomePageData(dto); + Map staticsMap = statisticsDetailDtos.stream().collect(Collectors.toMap(StatisticsDetailDto::getStatisticsStr, Function.identity(), (a, b) -> a)); + LocalDate endDate = LocalDate.now(); + LocalDate startDate = endDate.minusDays(dto.getDay()); + for (LocalDate localDate = startDate; !localDate.isAfter(endDate); + localDate = localDate.plusDays(1)) { + String key = localDate.format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD)); + if (!staticsMap.containsKey(key)) { + StatisticsDetailDto statisticsDetailDto = new StatisticsDetailDto(); + statisticsDetailDto.setStatisticsStr(key); + statisticsDetailDto.setValue(0); + staticsMap.put(key, statisticsDetailDto); + } + } + return staticsMap.values().stream().sorted(Comparator.comparing(StatisticsDetailDto::getStatisticsStr)).collect(Collectors.toList()); + } + private List fetchProjectInfos(ProjectOrderInfo projectOrderInfo) { List projectOrderInfos = projectOrderInfoMapper.selectProjectOrderInfoList(projectOrderInfo); if (CollUtil.isEmpty(projectOrderInfos)) { diff --git a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml index 91edbe90..1c0e7e00 100644 --- a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml @@ -262,6 +262,12 @@ select count(1) from order_info where order_code = #{orderCode} and version_code=#{versionCode} and status=0 and id != #{id} + insert into order_info diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml index a4edd75b..3038edb7 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml @@ -184,6 +184,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + insert into project_info diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml index d5639bf7..af91f164 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml @@ -160,6 +160,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where t1.id = #{projectId} limit 1 + insert into project_order_info