结算大类

liweidong
maxiangong 2 days ago
parent 8859d6ec8b
commit c03e3f7814
  1. 26
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementCategoryEntity.java
  2. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  3. 30
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementCategoryExcel.java
  4. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java
  5. 20
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementCategoryVO.java
  6. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java
  7. 162
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementCategoryController.java
  8. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml
  9. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.java
  10. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementCategoryMapper.xml
  11. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  12. 25
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementCategoryService.java
  13. 25
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementCategoryServiceImpl.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;
}

@ -215,4 +215,10 @@ public class OemStatementEntity extends BaseEntity {
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)") @Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manual; private String manual;
@Schema(description = "结算大类ID")
private Long statementCategoryId;
@Schema(description = "结算大类")
private String statementCategory;
} }

@ -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;
}

@ -39,4 +39,10 @@ public class OemProcessVO extends OemProcessEntity {
public String getManualName() { public String getManualName() {
return "0".equals(this.getManual()) ? "否" : "是"; return "0".equals(this.getManual()) ? "否" : "是";
} }
@Schema(description = "结算大类")
private String statementCategory;
@Schema(description = "维护人")
private String updateUserName;
} }

@ -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;
}

@ -81,16 +81,15 @@ public class BsSalaryUtil {
*/ */
private static int getPriority(BsSalaryStandardEntity rule, Integer standardType) { private static int getPriority(BsSalaryStandardEntity rule, Integer standardType) {
boolean isEmpty = !StringUtils.hasText(rule.getPartNo()); boolean isEmpty = !StringUtils.hasText(rule.getPartNo());
boolean isMatch = isMatch(rule.getPartNo(), "dummy"); // 外层已过滤
if (standardType == 2) { // 军品 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()) == 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; if (Integer.parseInt(rule.getStandardType()) == 1 && isEmpty) return 4;
} else { // 非军品 } 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()) == 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; if (Integer.parseInt(rule.getStandardType()) == 1 && isEmpty) return 4;
} }
return 99; return 99;

@ -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<IPage<OemStatementCategoryVO>> page(OemStatementCategoryVO oemStatementCategory, Query query) {
IPage<OemStatementCategoryVO> 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<OemStatementCategoryEntity> wrapper = new LambdaQueryWrapper<OemStatementCategoryEntity>().eq(OemStatementCategoryEntity::getStatementCategory, oemStatementCategory.getStatementCategory());
if (oemStatementCategory.getId() != null) {
wrapper.ne(OemStatementCategoryEntity::getId, oemStatementCategory.getId());
}
List<OemStatementCategoryEntity> 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<Resource> 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<OemStatementCategoryExcel> importList = ExcelUtil.read(file, 0, 1, OemStatementCategoryExcel.class);
if (CollectionUtils.isEmpty(importList)) {
return R.fail("导入数据不能为空");
}
Set<String> excelUniqueSet = new HashSet<>();
List<OemStatementCategoryEntity> 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<String> dbExistSet = new HashSet<>();
final int batchSize = 500;
List<List<String>> splits = Lists.partition(new ArrayList<>(excelUniqueSet), batchSize);
for (List<String> subs : splits) {
List<OemStatementCategoryEntity> batchList = oemStatementCategoryService.list(new LambdaQueryWrapper<OemStatementCategoryEntity>().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<List<OemStatementCategoryEntity>> listForSelect() {
List<OemStatementCategoryEntity> list = oemStatementCategoryService.list();
return R.data(list);
}
}

@ -17,9 +17,12 @@
<result column="PROCESS_ID" property="processId"/> <result column="PROCESS_ID" property="processId"/>
<result column="CRAFT_IDS" property="craftIds"/> <result column="CRAFT_IDS" property="craftIds"/>
<result column="MANUAL" property="manual"/> <result column="MANUAL" property="manual"/>
<result column="STATEMENT_CATEGORY" property="statementCategory"/>
<!-- VO 扩展字段 --> <!-- VO 扩展字段 -->
<result column="pa_name" property="paName"/> <result column="pa_name" property="paName"/>
<result column="ca_names" property="caNames"/> <result column="ca_names" property="caNames"/>
<result column="STATEMENT_CATEGORY" property="statementCategory"/>
<result column="UPDATE_USER_NAME" property="updateUserName"/>
</resultMap> </resultMap>
@ -38,9 +41,13 @@
SELECT TO_NUMBER(TRIM(COLUMN_VALUE)) SELECT TO_NUMBER(TRIM(COLUMN_VALUE))
FROM XMLTABLE(('"' || REPLACE(mop.CRAFT_IDS, ',', '","') || '"')) 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 FROM MES_OEM_PROCESS mop
LEFT JOIN BS_PROCESS_SET bps ON mop.PROCESS_ID = bps.ID 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 WHERE mop.IS_DELETED = 0
<if test="query.oemProcessCode != null and query.oemProcessCode != ''"> <if test="query.oemProcessCode != null and query.oemProcessCode != ''">
AND mop.OEM_PROCESS_CODE LIKE CONCAT('%', CONCAT(#{query.oemProcessCode}, '%')) AND mop.OEM_PROCESS_CODE LIKE CONCAT('%', CONCAT(#{query.oemProcessCode}, '%'))
@ -48,7 +55,7 @@
<if test="query.manual != null and query.manual != ''"> <if test="query.manual != null and query.manual != ''">
AND mop.MANUAL = #{query.manual} AND mop.MANUAL = #{query.manual}
</if> </if>
ORDER BY mop.CREATE_TIME DESC ORDER BY bps.CODE ASC
</select> </select>

@ -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<OemStatementCategoryEntity> {
/**
* 自定义分页
*
* @param page
* @param oemStatementCategory
* @return
*/
List<OemStatementCategoryVO> selectOemStatementCategoryPage(IPage page, OemStatementCategoryVO oemStatementCategory);
}

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.oem.mapper.OemStatementCategoryMapper">
<!-- 通用查询映射结果 -->
<resultMap id="mesOemStatementCategoryVOResultMap" type="org.springblade.desk.oem.pojo.vo.OemStatementCategoryVO">
<result column="ID" property="id"/>
<result column="STATEMENT_CATEGORY" property="statementCategory"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="UPDATE_USER_NAME" property="updateUserName"/>
</resultMap>
<select id="selectOemStatementCategoryPage" resultMap="mesOemStatementCategoryVOResultMap">
SELECT t.*,bu.REAL_NAME as UPDATE_USER_NAME FROM MES_OEM_STATEMENT_CATEGORY t
LEFT JOIN BLADE_USER bu ON t.update_user = bu.id
<where>
t.IS_DELETED = 0
</where>
ORDER BY t.UPDATE_TIME DESC
</select>
</mapper>

@ -99,6 +99,9 @@
<result column="PRODUCT_IDENT" property="productIdent"/> <result column="PRODUCT_IDENT" property="productIdent"/>
<result column="PART_ID" property="partId"/> <result column="PART_ID" property="partId"/>
<result column="PUT_STORE_DATE" property="putStoreDate"/> <result column="PUT_STORE_DATE" property="putStoreDate"/>
<result column="STATEMENT_CATEGORY_ID" property="statementCategoryId"/>
<result column="STATEMENT_CATEGORY" property="statementCategory"/>
</resultMap> </resultMap>
<select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel"> <select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel">
@ -145,7 +148,9 @@
p.part_name, p.part_name,
h.id, h.id,
p.ID as part_id, p.ID as part_id,
i.CA_NAME i.CA_NAME,
g.STATEMENT_CATEGORY_ID,
j.STATEMENT_CATEGORY
FROM FROM
MES_WORK_PLAN a MES_WORK_PLAN a
INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0 INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0
@ -157,6 +162,7 @@
INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0 INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0
INNER JOIN DS_PART_VERSION pv ON e.part_code = pv.part_code AND e.part_version = pv.part_version AND pv.IS_DELETED = 0 INNER JOIN DS_PART_VERSION pv ON e.part_code = pv.part_code AND e.part_version = pv.part_version AND pv.IS_DELETED = 0
INNER JOIN DS_PART p ON pv.PART_ID = p.ID AND p.IS_DELETED = 0 INNER JOIN DS_PART p ON pv.PART_ID = p.ID AND p.IS_DELETED = 0
INNER JOIN MES_OEM_STATEMENT_CATEGORY j ON g.STATEMENT_CATEGORY_ID = j.ID
<where> <where>
d.PUT_STORE_TIME IS NOT NULL AND ( a.ID NOT IN ( SELECT WP_ID FROM MES_OEM_STATEMENT ) OR d.PUT_STORE_TIME &gt; h.CREATE_TIME ) d.PUT_STORE_TIME IS NOT NULL AND ( a.ID NOT IN ( SELECT WP_ID FROM MES_OEM_STATEMENT ) OR d.PUT_STORE_TIME &gt; h.CREATE_TIME )
<if test="postPlatingStorageTimeStart != null"> <if test="postPlatingStorageTimeStart != null">
@ -226,7 +232,9 @@
ROS_STATUS, ROS_STATUS,
to_char(APPROVAL_TIME, 'yyyy-MM-dd') as APPROVAL_DATE, to_char(APPROVAL_TIME, 'yyyy-MM-dd') as APPROVAL_DATE,
to_char(PUSH_TIME, 'yyyy-MM-dd') as PUSH_DATE, to_char(PUSH_TIME, 'yyyy-MM-dd') as PUSH_DATE,
STATEMENT_NO STATEMENT_NO,
STATEMENT_CATEGORY_ID,
STATEMENT_CATEGORY
FROM MES_OEM_STATEMENT FROM MES_OEM_STATEMENT
<where> <where>
IS_DELETED = 0 IS_DELETED = 0

@ -0,0 +1,25 @@
package org.springblade.desk.oem.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.oem.pojo.entity.OemStatementCategoryEntity;
import org.springblade.desk.oem.pojo.vo.OemStatementCategoryVO;
/**
* 外协结算大类 服务类
*
* @author maxg
* @since 2026-04-29
*/
public interface IOemStatementCategoryService extends BaseService<OemStatementCategoryEntity> {
/**
* 自定义分页
*
* @param page
* @param oemStatementCategory
* @return
*/
IPage<OemStatementCategoryVO> selectOemStatementCategoryPage(IPage<OemStatementCategoryVO> page, OemStatementCategoryVO oemStatementCategory);
}

@ -0,0 +1,25 @@
package org.springblade.desk.oem.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.oem.mapper.OemStatementCategoryMapper;
import org.springblade.desk.oem.pojo.entity.OemStatementCategoryEntity;
import org.springblade.desk.oem.pojo.vo.OemStatementCategoryVO;
import org.springblade.desk.oem.service.IOemStatementCategoryService;
import org.springframework.stereotype.Service;
/**
* 外协结算大类 服务实现类
*
* @author maxg
* @since 2026-04-29
*/
@Service
public class OemStatementCategoryServiceImpl extends BaseServiceImpl<OemStatementCategoryMapper, OemStatementCategoryEntity> implements IOemStatementCategoryService {
@Override
public IPage<OemStatementCategoryVO> selectOemStatementCategoryPage(IPage<OemStatementCategoryVO> page, OemStatementCategoryVO oemStatementCategory) {
return page.setRecords(baseMapper.selectOemStatementCategoryPage(page, oemStatementCategory));
}
}
Loading…
Cancel
Save