From c03e3f781419406461c4fc0ba5e58fceeb7c3c73 Mon Sep 17 00:00:00 2001 From: maxiangong <298222784@qq.com> Date: Thu, 14 May 2026 11:23:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E7=AE=97=E5=A4=A7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/OemStatementCategoryEntity.java | 26 +++ .../oem/pojo/entity/OemStatementEntity.java | 6 + .../pojo/excel/OemStatementCategoryExcel.java | 30 ++++ .../desk/oem/pojo/vo/OemProcessVO.java | 6 + .../oem/pojo/vo/OemStatementCategoryVO.java | 20 +++ .../desk/efficiency/util/BsSalaryUtil.java | 9 +- .../OemStatementCategoryController.java | 162 ++++++++++++++++++ .../desk/oem/mapper/OemProcessMapper.xml | 11 +- .../mapper/OemStatementCategoryMapper.java | 27 +++ .../oem/mapper/OemStatementCategoryMapper.xml | 28 +++ .../desk/oem/mapper/OemStatementMapper.xml | 12 +- .../service/IOemStatementCategoryService.java | 25 +++ .../impl/OemStatementCategoryServiceImpl.java | 25 +++ 13 files changed, 378 insertions(+), 9 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementCategoryEntity.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementCategoryExcel.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementCategoryVO.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementCategoryController.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.xml create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementCategoryService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementCategoryServiceImpl.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementCategoryEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementCategoryEntity.java new file mode 100644 index 00000000..ad5aa1a8 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementCategoryEntity.java @@ -0,0 +1,26 @@ +package org.springblade.desk.oem.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; + +@Data +@TableName("MES_OEM_STATEMENT_CATEGORY") +@Schema(description = "OemStatementCategory对象") +@EqualsAndHashCode(callSuper = true) +public class OemStatementCategoryEntity extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 结算大类 + */ + @Schema(description = "结算大类") + private String statementCategory; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java index b2f101c4..5ccd8895 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java @@ -215,4 +215,10 @@ public class OemStatementEntity extends BaseEntity { @Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)") private String manual; + @Schema(description = "结算大类ID") + private Long statementCategoryId; + + @Schema(description = "结算大类") + private String statementCategory; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementCategoryExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementCategoryExcel.java new file mode 100644 index 00000000..c1b6ee54 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementCategoryExcel.java @@ -0,0 +1,30 @@ +package org.springblade.desk.oem.pojo.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 外协结算大类模板导入 + * + * @author maxg + * @since 2026-04-29 + */ +@Data +@ColumnWidth(25) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class OemStatementCategoryExcel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ColumnWidth(20) + @ExcelProperty("结算大类") + private String statementCategory; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java index 7a2dab93..72023a11 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java @@ -39,4 +39,10 @@ public class OemProcessVO extends OemProcessEntity { public String getManualName() { return "0".equals(this.getManual()) ? "否" : "是"; } + + @Schema(description = "结算大类") + private String statementCategory; + + @Schema(description = "维护人") + private String updateUserName; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementCategoryVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementCategoryVO.java new file mode 100644 index 00000000..46cf6973 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementCategoryVO.java @@ -0,0 +1,20 @@ +package org.springblade.desk.oem.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.oem.pojo.entity.OemStatementCategoryEntity; + +import java.io.Serial; + +@Data +@EqualsAndHashCode(callSuper = true) +public class OemStatementCategoryVO extends OemStatementCategoryEntity { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "维护人") + private String updateUserName; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java index c8baf826..e565f49d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java @@ -81,16 +81,15 @@ public class BsSalaryUtil { */ private static int getPriority(BsSalaryStandardEntity rule, Integer standardType) { boolean isEmpty = !StringUtils.hasText(rule.getPartNo()); - boolean isMatch = isMatch(rule.getPartNo(), "dummy"); // 外层已过滤 if (standardType == 2) { // 军品 - if (Integer.parseInt(rule.getStandardType()) == 2 && isMatch) return 1; + if (Integer.parseInt(rule.getStandardType()) == 2 && !isEmpty) return 1; if (Integer.parseInt(rule.getStandardType()) == 2 && isEmpty) return 2; - if (Integer.parseInt(rule.getStandardType()) == 1 && isMatch) return 3; + if (Integer.parseInt(rule.getStandardType()) == 1 && !isEmpty) return 3; if (Integer.parseInt(rule.getStandardType()) == 1 && isEmpty) return 4; } else { // 非军品 - if (Integer.parseInt(rule.getStandardType()) == 3 && isMatch) return 1; + if (Integer.parseInt(rule.getStandardType()) == 3 && !isEmpty) return 1; if (Integer.parseInt(rule.getStandardType()) == 3 && isEmpty) return 2; - if (Integer.parseInt(rule.getStandardType()) == 1 && isMatch) return 3; + if (Integer.parseInt(rule.getStandardType()) == 1 && !isEmpty) return 3; if (Integer.parseInt(rule.getStandardType()) == 1 && isEmpty) return 4; } return 99; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementCategoryController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementCategoryController.java new file mode 100644 index 00000000..29128233 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementCategoryController.java @@ -0,0 +1,162 @@ +package org.springblade.desk.oem.controller; + +import com.alibaba.nacos.shaded.com.google.common.collect.Lists; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.oem.pojo.entity.OemStatementCategoryEntity; +import org.springblade.desk.oem.pojo.excel.OemStatementCategoryExcel; +import org.springblade.desk.oem.pojo.vo.OemStatementCategoryVO; +import org.springblade.desk.oem.service.IOemStatementCategoryService; +import org.springframework.beans.BeanUtils; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 外协结算大类 控制器 + * + * @author maxg + * @since 2026-04-29 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/mesOemStatementCategory") +@Tag(name = "外协结算大类", description = "外协结算大类接口") +public class OemStatementCategoryController { + + private final IOemStatementCategoryService oemStatementCategoryService; + + + /** + * 外协结算大类 自定义分页 + */ + @GetMapping("/page") + @Operation(summary = "分页", description = "传入oemStandardProcess") + public R> page(OemStatementCategoryVO oemStatementCategory, Query query) { + IPage pages = oemStatementCategoryService.selectOemStatementCategoryPage(Condition.getPage(query), oemStatementCategory); + return R.data(pages); + } + + /** + * 外协结算大类 新增或修改 + * + * @param oemStatementCategory + * @return + */ + @PostMapping("/submit") + @Operation(summary = "新增或修改", description = "传入bsEfficiencyTempList") + public R submit(@Valid @RequestBody OemStatementCategoryEntity oemStatementCategory) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(OemStatementCategoryEntity::getStatementCategory, oemStatementCategory.getStatementCategory()); + if (oemStatementCategory.getId() != null) { + wrapper.ne(OemStatementCategoryEntity::getId, oemStatementCategory.getId()); + } + List list = oemStatementCategoryService.list(wrapper); + if (!CollectionUtils.isEmpty(list)) { + return R.fail("数据已存在"); + } + return R.status(oemStatementCategoryService.saveOrUpdate(oemStatementCategory)); + } + + /** + * 外协结算大类 删除 + */ + @PostMapping("/remove") + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(oemStatementCategoryService.deleteLogic(Func.toLongList(ids))); + } + + /** + * 外协结算大类 下载模板 + * + * @return + */ + @GetMapping("/download-excel-template") + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity downloadExcelTemplate() { + return ExcelExtUtil.downloadXlsTemplate("Excel/oem/结算大类.xls", "导入模版-结算大类.xls"); + } + + /** + * 外协结算大类 导入Excel + * + * @param file + * @return + */ + @PostMapping("/import-excel") + @Operation(summary = "导入Excel", description = "MultipartFile") + public R importExcel(@RequestParam("file") MultipartFile file) { + R checkR = ExcelExtUtil.importExcelCheck(file); + if (checkR != null) { + return checkR; + } + List importList = ExcelUtil.read(file, 0, 1, OemStatementCategoryExcel.class); + if (CollectionUtils.isEmpty(importList)) { + return R.fail("导入数据不能为空"); + } + Set excelUniqueSet = new HashSet<>(); + List entityList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + int rowNum = i + 2; + OemStatementCategoryExcel row = importList.get(i); + if (StringUtils.isEmpty(row.getStatementCategory())) { + return R.fail(String.format("[%]行结算大类未填写", rowNum)); + } + String uniqueStr = row.getStatementCategory(); + if (!excelUniqueSet.add(uniqueStr)) { + return R.fail(String.format("[%]行在Excel中重复", rowNum)); + } + OemStatementCategoryEntity entity = new OemStatementCategoryEntity(); + BeanUtils.copyProperties(row, entity); + entityList.add(entity); + } + Set dbExistSet = new HashSet<>(); + final int batchSize = 500; + List> splits = Lists.partition(new ArrayList<>(excelUniqueSet), batchSize); + for (List subs : splits) { + List batchList = oemStatementCategoryService.list(new LambdaQueryWrapper().in(OemStatementCategoryEntity::getStatementCategory, subs)); + batchList.stream().map(OemStatementCategoryEntity::getStatementCategory).forEach(dbExistSet::add); + } + if (!CollectionUtils.isEmpty(dbExistSet)) { + for (int i = 0; i < importList.size(); i++) { + int rowNum = i + 2; + String name = importList.get(i).getStatementCategory(); + if (dbExistSet.contains(name)) { + R.fail(String.format("[%]行错误,[%]已存在不可重复导入", rowNum, name)); + } + } + } + return R.status(oemStatementCategoryService.saveBatch(entityList)); + } + + /** + * 外协结算大类下拉选择 + * + * @return + */ + @GetMapping("/listForSelect") + @Operation(summary = "list下拉选择", description = "") + public R> listForSelect() { + List list = oemStatementCategoryService.list(); + return R.data(list); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml index 29848a70..33c120c5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml @@ -17,9 +17,12 @@ + + + @@ -38,9 +41,13 @@ SELECT TO_NUMBER(TRIM(COLUMN_VALUE)) FROM XMLTABLE(('"' || REPLACE(mop.CRAFT_IDS, ',', '","') || '"')) ) - ) AS ca_names + ) AS ca_names, + mosc.STATEMENT_CATEGORY, + bu.REAL_NAME as UPDATE_USER_NAME FROM MES_OEM_PROCESS mop LEFT JOIN BS_PROCESS_SET bps ON mop.PROCESS_ID = bps.ID + LEFT JOIN MES_OEM_STATEMENT_CATEGORY mosc ON mop.STATEMENT_CATEGORY_ID = mosc.ID + LEFT JOIN BLADE_USER bu ON mop.update_user = bu.id WHERE mop.IS_DELETED = 0 AND mop.OEM_PROCESS_CODE LIKE CONCAT('%', CONCAT(#{query.oemProcessCode}, '%')) @@ -48,7 +55,7 @@ AND mop.MANUAL = #{query.manual} - ORDER BY mop.CREATE_TIME DESC + ORDER BY bps.CODE ASC diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.java new file mode 100644 index 00000000..793f048f --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.java @@ -0,0 +1,27 @@ +package org.springblade.desk.oem.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.efficiency.pojo.vo.BsEfficiencyTaskVO; +import org.springblade.desk.oem.pojo.entity.OemStatementCategoryEntity; +import org.springblade.desk.oem.pojo.vo.OemStatementCategoryVO; + +import java.util.List; + +/** + * 外协结算大类 Mapper 接口 + * + * @author qyl + * @since 2026-02-12 + */ +public interface OemStatementCategoryMapper extends BaseMapper { + + /** + * 自定义分页 + * + * @param page + * @param oemStatementCategory + * @return + */ + List selectOemStatementCategoryPage(IPage page, OemStatementCategoryVO oemStatementCategory); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.xml new file mode 100644 index 00000000..2224d1ea --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml index c32d277d..5aa83ca7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml @@ -99,6 +99,9 @@ + + +