diff --git a/oms_web/oms_vue/src/views/base/quotation/detail.vue b/oms_web/oms_vue/src/views/base/quotation/detail.vue new file mode 100644 index 00000000..59567ae2 --- /dev/null +++ b/oms_web/oms_vue/src/views/base/quotation/detail.vue @@ -0,0 +1,143 @@ + + + + diff --git a/oms_web/oms_vue/src/views/base/quotation/index.vue b/oms_web/oms_vue/src/views/base/quotation/index.vue index 65e5baae..6b12fe85 100644 --- a/oms_web/oms_vue/src/views/base/quotation/index.vue +++ b/oms_web/oms_vue/src/views/base/quotation/index.vue @@ -50,7 +50,7 @@ icon="el-icon-plus" size="mini" @click="handleAdd" - v-hasPermi="['base:quotation:add']" + v-hasPermi="['sip:quotation:add']" >新增 @@ -61,7 +61,7 @@ size="mini" :disabled="single" @click="handleUpdate" - v-hasPermi="['base:quotation:edit']" + v-hasPermi="['sip:quotation:update']" >修改 @@ -72,7 +72,7 @@ size="mini" :disabled="multiple" @click="handleDelete" - v-hasPermi="['base:quotation:remove']" + v-hasPermi="['sip:quotation:delete']" >删除 @@ -103,35 +103,34 @@ type="text" icon="el-icon-view" @click="handleDetail(scope.row)" - v-hasPermi="['base:quotation:query']" >详情 修改 复制创建 删除 导出 diff --git a/oms_web/oms_vue/src/views/base/quotation/selectQuotation.vue b/oms_web/oms_vue/src/views/base/quotation/selectQuotation.vue new file mode 100644 index 00000000..68449e29 --- /dev/null +++ b/oms_web/oms_vue/src/views/base/quotation/selectQuotation.vue @@ -0,0 +1,126 @@ + + + diff --git a/oms_web/oms_vue/src/views/project/info/ProjectForm.vue b/oms_web/oms_vue/src/views/project/info/ProjectForm.vue index e1171e82..06e2e0d7 100644 --- a/oms_web/oms_vue/src/views/project/info/ProjectForm.vue +++ b/oms_web/oms_vue/src/views/project/info/ProjectForm.vue @@ -433,7 +433,7 @@ - + @@ -683,6 +683,7 @@ export default { partnerName: null, partnerCode: null, partnerUserName: null, + partnerSystemUserId: null, contactWay: null, estimatedAmount: null, estimatedOrderTime: null, @@ -834,6 +835,7 @@ export default { if (value === 'h3c') { this.form.partnerName = '新华三'; this.form.partnerCode = null; + this.form.partnerSystemUserId = null; } if (this.$refs.form) { this.$nextTick(() => { @@ -923,6 +925,8 @@ export default { this.form.partnerCode = partner.partnerCode; this.form.partnerUserName = partner.contactPerson; this.form.contactWay = partner.contactPhone; + this.$set(this.form,'partnerSystemUserId', partner.systemUserId); + this.selectPartnerVisible = false; }, openSelectPeople() { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/QuotationController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/QuotationController.java index 936d4ac3..346dd833 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/QuotationController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/QuotationController.java @@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.sip.domain.Quotation; import com.ruoyi.sip.service.IQuotationService; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,7 @@ public class QuotationController extends BaseController { @GetMapping("/list") + @RequiresPermissions("sip:quotation:list") public TableDataInfo list(Quotation quotation) { startPage(); List list = quotationService.queryAll(quotation); @@ -43,6 +45,7 @@ public class QuotationController extends BaseController { @PostMapping("/insert") + @RequiresPermissions("sip:quotation:add") public AjaxResult add(@RequestBody Quotation quotation) { return toAjax(quotationService.insert(quotation)); } @@ -50,6 +53,7 @@ public class QuotationController extends BaseController { @PutMapping("/update") + @RequiresPermissions("sip:quotation:update") public AjaxResult edit(@RequestBody Quotation quotation) { return toAjax(quotationService.update(quotation)); } @@ -57,6 +61,7 @@ public class QuotationController extends BaseController { @DeleteMapping("/{id}") + @RequiresPermissions("sip:quotation:delete") public AjaxResult remove(@PathVariable("id") Integer id) { return toAjax(quotationService.deleteById(id)); } @@ -66,10 +71,12 @@ public class QuotationController extends BaseController { */ @DeleteMapping("/remove/batch/{ids}") + @RequiresPermissions("sip:quotation:delete") public AjaxResult batchRemove(@PathVariable("ids") Integer[] ids) { return AjaxResult.success(quotationService.batchRemove(ids)); } @GetMapping("/export/single/{id}") + @RequiresPermissions("sip:quotation:export") public AjaxResult exportSingle(@PathVariable("id") Integer id) { return AjaxResult.success(quotationService.exportSingle(id)); } 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 56d1555c..4010473b 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 @@ -230,6 +230,7 @@ public class ProjectInfo extends BaseEntity private List projectFileList; private String fileId; + private String partnerSystemUserId; private Integer quotationId; private List quotationIdList; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Quotation.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Quotation.java index 440a7f31..9ab86553 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Quotation.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/Quotation.java @@ -32,6 +32,7 @@ public class Quotation extends BaseEntity { * 项目编号 */ private String projectCode; + private String projectName; /** * 报价金额 */ @@ -78,6 +79,8 @@ public class Quotation extends BaseEntity { private List hardwareProjectProductInfoList; // @Excel(name = "服务") private List maintenanceProjectProductInfoList; + //省代 + private List provinceProductInfoList; @Getter public enum QuotationStatusEnum { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/QuotationServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/QuotationServiceImpl.java index 13a9dc81..790fcf5a 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/QuotationServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/QuotationServiceImpl.java @@ -11,6 +11,7 @@ import com.alibaba.excel.write.metadata.holder.WriteTableHolder; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; +import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.ShiroUtils; @@ -69,6 +70,7 @@ public class QuotationServiceImpl implements IQuotationService { * @return 对象列表 */ @Override + @DataScope(deptAlias = "u", userAlias = "u") public List queryAll(Quotation quotation) { List dataList = quotationMapper.queryAll(quotation); PageUtils.clearPage(); @@ -95,7 +97,14 @@ public class QuotationServiceImpl implements IQuotationService { maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.SOFTWARE_MAINTENANCE.getType(), new ArrayList<>())); maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.OTHER.getType(), new ArrayList<>())); quotation.setMaintenanceProjectProductInfoList(maintenanceProjectProductInfoList); + quotation.setProvinceProductInfoList(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.PROVINCE_SERVICE.getType(),new ArrayList<>())); + ProjectInfo projectInfo = new ProjectInfo(); + projectInfo.setQuotationId(quotation.getId()); + List projectInfos = projectInfoService.selectProjectInfoList(projectInfo); + quotation.setProjectCode(projectInfos.stream().map(ProjectInfo::getProjectCode).collect(Collectors.joining(","))); + quotation.setProjectName(projectInfos.stream().map(ProjectInfo::getProjectName).collect(Collectors.joining(","))); } + return quotation; } @@ -187,46 +196,42 @@ public class QuotationServiceImpl implements IQuotationService { row1.add(""); } rows.add(row1); + rows.add(Collections.emptyList()); // Calculate Date String validDate = LocalDate.now().plusDays(7).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); // Helper to create padded row List row2 = new ArrayList<>(); - row2.add("项目名称:"); - row2.add(quotation.getQuotationName()); + row2.add(""); + row2.add("*项目名称:"); + row2.add(quotation.getProjectName()); row2.add(""); row2.add(""); row2.add(""); - row2.add(""); // Padding - row2.add("*本报价单有效期至:"); - row2.add(validDate); + row2.add("*本报价单有效期至:"+validDate); rows.add(row2); List row3 = new ArrayList<>(); + row3.add(""); row3.add("*项目ID:"); row3.add(quotation.getProjectCode()); - row3.add(""); - row3.add(""); + row3.add("(项目名称和ID在商务申请时必填)"); row3.add(""); row3.add(""); row3.add("*云桌面完整报价单必须包含部署服务、现场维保、省代集成服务,此三项由省代进行补充报价,不能缺项"); rows.add(row3); List row4 = new ArrayList<>(); + row4.add(""); row4.add("国家/地区 :"); row4.add("中国大陆"); row4.add(""); row4.add(""); row4.add(""); - row4.add(""); row4.add("*因上游CPU、内存、存储波动较大,封标前3天与汇智区域接口人邮件确定商务折扣和供货周期,否则报价单无效"); rows.add(row4); - List row5 = new ArrayList<>(); - row5.add("备注:"); - row5.add(quotation.getRemark()); - rows.add(row5); rows.add(Collections.emptyList()); @@ -236,18 +241,25 @@ public class QuotationServiceImpl implements IQuotationService { "目录单价(RMB)", "推荐折扣", "折扣单价(RMB)", "总价(RMB)", "目录总价(RMB)", "CID信息", "备注" ); - // 记录列标题行索引,使其变灰 + // 记录列标题行索引 + int headerRowIndex = rows.size(); Set coloredRowIndices = new HashSet<>(); - coloredRowIndices.add(rows.size()); + // 标题列填充灰色 + coloredRowIndices.add(headerRowIndex); rows.add(new ArrayList<>(headers)); // 3. 第三部分:数据分组 Set aquaRowIndices = new HashSet<>(); AtomicInteger sectionCounter = new AtomicInteger(1); - addSection(rows, "软件", quotation.getSoftwareProjectProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); - addSection(rows, "硬件", quotation.getHardwareProjectProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); - addSection(rows, "服务", quotation.getMaintenanceProjectProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); + // 添加默认分组:云桌面服务器 + QuotationProductInfo defaultItem = new QuotationProductInfo(); + + addSection(rows, "云桌面服务器","VOI/VDI服务器", Collections.singletonList(defaultItem), coloredRowIndices, aquaRowIndices, sectionCounter); + + addSection(rows, "云桌面软件", "Workspace/learningspace/NEX",quotation.getSoftwareProjectProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); + addSection(rows, "云终端", "VOI/VDI终端",quotation.getHardwareProjectProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); + addSection(rows, "省代服务(若从省代出货需计算)","省代服务", quotation.getProvinceProductInfoList(), coloredRowIndices, aquaRowIndices, sectionCounter); ExcelUtil util = new ExcelUtil<>(Object.class); String fileName = util.encodingFilename("报价单_" + quotation.getQuotationCode()); @@ -257,15 +269,19 @@ public class QuotationServiceImpl implements IQuotationService { WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); contentWriteCellStyle.setWrapped(true); contentWriteCellStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + contentWriteCellStyle.setHorizontalAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.LEFT); HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(null, contentWriteCellStyle); EasyExcel.write(filePath) .registerWriteHandler(horizontalCellStyleStrategy) - .registerWriteHandler(new CustomColumnWidthStrategy()) + .registerWriteHandler(new CustomColumnWidthStrategy(headerRowIndex)) .registerWriteHandler(new com.alibaba.excel.write.handler.CellWriteHandler() { private org.apache.poi.ss.usermodel.CellStyle coloredStyle; + private org.apache.poi.ss.usermodel.CellStyle coloredLeftStyle; private org.apache.poi.ss.usermodel.CellStyle aquaStyle; private org.apache.poi.ss.usermodel.CellStyle centerStyle; + private org.apache.poi.ss.usermodel.CellStyle infoStyle; + private org.apache.poi.ss.usermodel.CellStyle redInfoStyle; @Override public void beforeCellCreate(com.alibaba.excel.write.metadata.holder.WriteSheetHolder writeSheetHolder, com.alibaba.excel.write.metadata.holder.WriteTableHolder writeTableHolder, org.apache.poi.ss.usermodel.Row row, com.alibaba.excel.metadata.Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { @@ -289,6 +305,8 @@ public class QuotationServiceImpl implements IQuotationService { centerStyle = workbook.createCellStyle(); centerStyle.setAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.CENTER); centerStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + centerStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.WHITE.getIndex()); + centerStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); org.apache.poi.ss.usermodel.Font font = workbook.createFont(); font.setBold(true); font.setFontHeightInPoints((short) 16); @@ -297,21 +315,75 @@ public class QuotationServiceImpl implements IQuotationService { cell.setCellStyle(centerStyle); // Merge cells for title (0-10, Logo is at 11 usually, but let's merge fewer if needed, or 0-10) writeSheetHolder.getSheet().addMergedRegionUnsafe(new org.apache.poi.ss.util.CellRangeAddress(0, 0, 0, 10)); - } + } else if (cell.getRowIndex() < headerRowIndex) { + // Info rows (0 to headerRowIndex-1) - Excluding 0 handled above? + // Actually handle 0 separately or here. 0 is handled above. + if (cell.getRowIndex() == 0) return; - if (coloredRowIndices.contains(cell.getRowIndex())) { - if (coloredStyle == null) { - org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); - coloredStyle = workbook.createCellStyle(); - coloredStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.GREY_25_PERCENT.getIndex()); - coloredStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); - coloredStyle.setWrapText(true); - coloredStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); - org.apache.poi.ss.usermodel.Font font = workbook.createFont(); - font.setBold(true); - coloredStyle.setFont(font); + // Check for Red Font Conditions + boolean isRed = false; + if (cell.getRowIndex() == 2 && (cell.getColumnIndex() == 3 || cell.getColumnIndex() == 6)) { + isRed = true; + } else if (cell.getRowIndex() == 3 && (cell.getColumnIndex() == 6 || cell.getColumnIndex() == 3)) { + isRed = true; + } else if (cell.getRowIndex() == 4 && cell.getColumnIndex() == 6) { + isRed = true; + } + + if (isRed) { + if (redInfoStyle == null) { + org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); + redInfoStyle = workbook.createCellStyle(); + redInfoStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.WHITE.getIndex()); + redInfoStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); + redInfoStyle.setWrapText(false); + redInfoStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + org.apache.poi.ss.usermodel.Font font = workbook.createFont(); + font.setColor(org.apache.poi.ss.usermodel.IndexedColors.RED.getIndex()); + redInfoStyle.setFont(font); + } + cell.setCellStyle(redInfoStyle); + } else { + if (infoStyle == null) { + org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); + infoStyle = workbook.createCellStyle(); + infoStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.WHITE.getIndex()); + infoStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); + infoStyle.setWrapText(false); + infoStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + } + cell.setCellStyle(infoStyle); + } + + } else if (coloredRowIndices.contains(cell.getRowIndex())) { + if (cell.getRowIndex() > headerRowIndex) { + if (coloredLeftStyle == null) { + org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); + coloredLeftStyle = workbook.createCellStyle(); + coloredLeftStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.GREY_25_PERCENT.getIndex()); + coloredLeftStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); + coloredLeftStyle.setWrapText(true); + coloredLeftStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + coloredLeftStyle.setAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.LEFT); + org.apache.poi.ss.usermodel.Font font = workbook.createFont(); + font.setBold(true); + coloredLeftStyle.setFont(font); + } + cell.setCellStyle(coloredLeftStyle); + } else { + if (coloredStyle == null) { + org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); + coloredStyle = workbook.createCellStyle(); + coloredStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.GREY_25_PERCENT.getIndex()); + coloredStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); + coloredStyle.setWrapText(true); + coloredStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); + org.apache.poi.ss.usermodel.Font font = workbook.createFont(); + font.setBold(true); + coloredStyle.setFont(font); + } + cell.setCellStyle(coloredStyle); } - cell.setCellStyle(coloredStyle); } else if (aquaRowIndices.contains(cell.getRowIndex())) { if (aquaStyle == null) { org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); @@ -319,6 +391,7 @@ public class QuotationServiceImpl implements IQuotationService { aquaStyle.setFillForegroundColor(org.apache.poi.ss.usermodel.IndexedColors.AQUA.getIndex()); aquaStyle.setFillPattern(org.apache.poi.ss.usermodel.FillPatternType.SOLID_FOREGROUND); aquaStyle.setWrapText(true); + aquaStyle.setAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.LEFT); } cell.setCellStyle(aquaStyle); } @@ -350,7 +423,7 @@ public class QuotationServiceImpl implements IQuotationService { quotationMapper.update(quotation); } - private void addSection(List> rows, String title, List list, Set coloredRowIndices, Set aquaRowIndices, AtomicInteger sectionCounter) { + private void addSection(List> rows, String title, String subTitle,List list, Set coloredRowIndices, Set aquaRowIndices, AtomicInteger sectionCounter) { if (CollUtil.isEmpty(list)) { return; } @@ -367,6 +440,18 @@ public class QuotationServiceImpl implements IQuotationService { } rows.add(titleRow); + // 添加标题行 (补齐12列) + List subTitleRow = new ArrayList<>(); + subTitleRow.add(currentSection+"_"+currentSection); + subTitleRow.add(subTitle); + for (int i = 0; i < 10; i++) { + subTitleRow.add(""); + } + rows.add(subTitleRow); + + + + double sumAllPrice = 0.0; double sumCatalogueAllPrice = 0.0; @@ -374,7 +459,7 @@ public class QuotationServiceImpl implements IQuotationService { int index = 1; for (QuotationProductInfo item : list) { List row = new ArrayList<>(); - row.add(currentSection + "_" + index++); + row.add(""); row.add(item.getProductBomCode()); row.add(item.getModel()); row.add(item.getProductDesc()); @@ -400,7 +485,7 @@ public class QuotationServiceImpl implements IQuotationService { coloredRowIndices.add(rows.size()); List subTotalRow1 = new ArrayList<>(); subTotalRow1.add(""); - subTotalRow1.add(title); + subTotalRow1.add(subTitle); subTotalRow1.add(""); subTotalRow1.add(""); subTotalRow1.add(""); @@ -434,9 +519,19 @@ public class QuotationServiceImpl implements IQuotationService { // 自定义列宽策略:自适应但有最大宽度 public static class CustomColumnWidthStrategy extends AbstractColumnWidthStyleStrategy { private static final int MAX_COLUMN_WIDTH = 50; + private final int headerRowIndex; + + public CustomColumnWidthStrategy(int headerRowIndex) { + this.headerRowIndex = headerRowIndex; + } @Override protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + // 1-6行不参与列宽计算 (小于标题行的行) + if (cell.getRowIndex() < headerRowIndex) { + return; + } + if (isHead != null && isHead) { // 如果是表头,不需特别处理,EasyExcel会自动处理,或者这里也可以计算 return; diff --git a/ruoyi-sip/src/main/resources/mapper/Quotation/QuotationMapper.xml b/ruoyi-sip/src/main/resources/mapper/Quotation/QuotationMapper.xml index 72606a4c..252e9e59 100644 --- a/ruoyi-sip/src/main/resources/mapper/Quotation/QuotationMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/Quotation/QuotationMapper.xml @@ -28,70 +28,74 @@ diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml index 4ceffc1f..a84de71d 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml @@ -91,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" t3.user_name as hz_support_user_name, t5.level, t5.contact_email as partner_email, + t6.system_user_id as partner_system_user_id, t1.update_time , ifnull(t4.work_time,t1.update_time) as last_work_update_time from project_info t1 @@ -98,6 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sys_user t3 on t1.hz_support_user=t3.user_id left join partner_info t5 on t1.partner_code=t5.partner_code left join (select max(work_time) work_time,project_id from project_work_progress group by project_id) t4 ON t1.id=t4.project_id + left join partner_info t6 on t1.partner_code=t6.partner_code