diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/enums/MesApprovalRecordBizTypeEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/enums/MesApprovalRecordBizTypeEnum.java new file mode 100644 index 000000000..676d86688 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/enums/MesApprovalRecordBizTypeEnum.java @@ -0,0 +1,18 @@ +package org.springblade.desk.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 我的待办业务类型枚举 + */ +@Getter +@AllArgsConstructor +public enum MesApprovalRecordBizTypeEnum { + + OEM_STATEMENT("外协结算校对/审核"), + ; + + private final String desc; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/entity/MesApprovalFlowEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/entity/MesApprovalFlowEntity.java new file mode 100644 index 000000000..cb2c20727 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/entity/MesApprovalFlowEntity.java @@ -0,0 +1,76 @@ +package org.springblade.desk.common.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.util.Date; + +/** + * 审批流程对象 + */ +@Data +@TableName("MES_APPROVAL_FLOW") +@Schema(description = "MesApprovalFlow对象") +@EqualsAndHashCode(callSuper = true) +public class MesApprovalFlowEntity extends BaseEntity { + + /** + * 业务ID + */ + @Schema(description = "业务ID") + private Long bizId; + + /** + * 业务类型 + */ + @Schema(description = "业务类型") + private String bizType; + + /** + * 节点 + */ + @Schema(description = "节点") + private String node; + + /** + * 序号 + */ + @Schema(description = "序号") + private Integer sort; + + /** + * 下节点序号 + */ + @Schema(description = "序号") + private Integer nextSort; + + /** + * 审核人 + */ + @Schema(description = "审核人") + private Long approvalUser; + + /** + * 审核时间 + */ + @Schema(description = "审核时间") + private Date approvalTime; + + public MesApprovalFlowEntity(){ + + } + + public MesApprovalFlowEntity(Long bizId, String bizType, String node, Integer sort, Integer nextSort, Long approvalUser, Date approvalTime, Integer status){ + this.bizId = bizId; + this.bizType = bizType; + this.node = node; + this.sort = sort; + this.nextSort = nextSort; + this.approvalUser = approvalUser; + this.approvalTime = approvalTime; + super.setStatus(status); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalFlowVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalFlowVO.java new file mode 100644 index 000000000..004cbd2f4 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalFlowVO.java @@ -0,0 +1,24 @@ +package org.springblade.desk.common.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; + +import java.io.Serial; + +/** + * 审批流程VO + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MesApprovalFlowVO extends MesApprovalFlowEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 审批人名称 + */ + private String approvalUserName; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalRecordDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalRecordDetailVO.java new file mode 100644 index 000000000..41c44a1d8 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/vo/MesApprovalRecordDetailVO.java @@ -0,0 +1,20 @@ +package org.springblade.desk.common.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; + +import java.util.List; + +/** + * 我的待办详情视图实体类 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MesApprovalRecordDetailVO extends MesApprovalRecordEntity { + + private List flowList; + + private T detailData; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/controller/MesApprovalRecordController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/controller/MesApprovalRecordController.java index 162ff9c16..3a14ea97f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/controller/MesApprovalRecordController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/controller/MesApprovalRecordController.java @@ -27,6 +27,7 @@ package org.springblade.desk.common.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -36,9 +37,13 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; +import org.springblade.desk.common.pojo.vo.MesApprovalRecordDetailVO; import org.springblade.desk.common.pojo.vo.MyHistoryMesApprovalRecordVO; import org.springblade.desk.common.pojo.vo.MyMesApprovalRecordVO; import org.springblade.desk.common.service.IMesApprovalRecordService; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; +import org.springblade.desk.oem.wrapper.OemStatementWrapper; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -79,4 +84,12 @@ public class MesApprovalRecordController extends BladeController { IPage pages = mesApprovalRecordService.selectMyHistoryMesApprovalRecordPage(Condition.getPage(query), mesApprovalRecord); return R.data(pages); } + + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @Operation(summary = "详情", description = "传入mesOemStatement") + public R detail(MesApprovalRecordEntity mesApprovalRecord) { + MesApprovalRecordDetailVO detail = mesApprovalRecordService.getDetail(mesApprovalRecord); + return R.data(detail); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/factory/MesApprovalDetailFactory.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/factory/MesApprovalDetailFactory.java new file mode 100644 index 000000000..f56509296 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/factory/MesApprovalDetailFactory.java @@ -0,0 +1,49 @@ +package org.springblade.desk.common.factory; + +import org.springblade.desk.common.service.ApprovalRecordDetailStrategy; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 待办详情策略工厂类 + */ +@Component +public class MesApprovalDetailFactory implements ApplicationContextAware { + + private static ApplicationContext context; + + private static final Map STRATEGY_MAP = new ConcurrentHashMap<>(); + + public ApprovalRecordDetailStrategy getStrategy(String bizType) { + // 1. 先看缓存有没有 + if (STRATEGY_MAP.containsKey(bizType)) { + return STRATEGY_MAP.get(bizType); + } + Map beans = context.getBeansOfType(ApprovalRecordDetailStrategy.class); + ApprovalRecordDetailStrategy target = null; + for (ApprovalRecordDetailStrategy strategy : beans.values()) { + if (bizType.equals(strategy.getBizType())) { + target = strategy; + break; + } + } + + if (target == null) { + throw new RuntimeException("不支持的业务类型:" + bizType); + } + + // 3. 放入缓存,下次直接用 + STRATEGY_MAP.put(bizType, target); + return target; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + context = applicationContext; + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.java new file mode 100644 index 000000000..0eb568586 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.java @@ -0,0 +1,15 @@ +package org.springblade.desk.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; +import org.springblade.desk.common.pojo.vo.MesApprovalFlowVO; + +import java.util.List; + +/** + * 审批流程Mapper + */ +public interface MesApprovalFlowMapper extends BaseMapper { + + List queryVOList(MesApprovalFlowEntity mesApprovalFlow); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.xml new file mode 100644 index 000000000..fbf282d74 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/mapper/MesApprovalFlowMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/ApprovalRecordDetailStrategy.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/ApprovalRecordDetailStrategy.java new file mode 100644 index 000000000..1e3a1e022 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/ApprovalRecordDetailStrategy.java @@ -0,0 +1,16 @@ +package org.springblade.desk.common.service; + +/** + * 我的待办详情策略类 + * @param + */ +public interface ApprovalRecordDetailStrategy { + + String getBizType(); + + T getDetail(Long bizId); + + void createApproval(Long bizId); + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalFlowService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalFlowService.java new file mode 100644 index 000000000..0a207312c --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalFlowService.java @@ -0,0 +1,20 @@ +package org.springblade.desk.common.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; +import org.springblade.desk.common.pojo.vo.MesApprovalFlowVO; + +import java.util.List; + +/** + * 审批流程记录Service + */ +public interface IMesApprovalFlowService extends BaseService { + + /** + * 根据条件查询VO + * @param mesApprovalFlow + * @return + */ + List queryVOList(MesApprovalFlowEntity mesApprovalFlow); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalRecordService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalRecordService.java index cfa66d122..27f3163da 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalRecordService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesApprovalRecordService.java @@ -29,9 +29,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; +import org.springblade.desk.common.pojo.vo.MesApprovalRecordDetailVO; import org.springblade.desk.common.pojo.vo.MyHistoryMesApprovalRecordVO; import org.springblade.desk.common.pojo.vo.MyMesApprovalRecordVO; +import java.util.Date; + /** * 审批记录表 服务类 * @@ -39,22 +42,47 @@ import org.springblade.desk.common.pojo.vo.MyMesApprovalRecordVO; * @since 2026-02-26 */ public interface IMesApprovalRecordService extends BaseService { - /** - * 自定义分页 - * - * @param page 分页参数 - * @param mesApprovalRecord 查询参数 - * @return IPage - */ - IPage selectMyMesApprovalRecordPage(Page page, MyMesApprovalRecordVO mesApprovalRecord); + /** + * 自定义分页 + * + * @param page 分页参数 + * @param mesApprovalRecord 查询参数 + * @return IPage + */ + IPage selectMyMesApprovalRecordPage(Page page, MyMesApprovalRecordVO mesApprovalRecord); + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param mesApprovalRecord 查询参数 + * @return IPage + */ + IPage selectMyHistoryMesApprovalRecordPage(IPage page, MyHistoryMesApprovalRecordVO mesApprovalRecord); + + /** + * 待办详情 + * + * @param mesApprovalRecord + * @return + */ + MesApprovalRecordDetailVO getDetail(MesApprovalRecordEntity mesApprovalRecord); - /** - * 自定义分页 - * - * @param page 分页参数 - * @param mesApprovalRecord 查询参数 - * @return IPage - */ - IPage selectMyHistoryMesApprovalRecordPage(IPage page, MyHistoryMesApprovalRecordVO mesApprovalRecord); + /** + * 更新待办 + * + * @param bizId + * @param bizType + * @param approvalUser + * @param approvalTime + */ + void updateApproval(Long bizId, String bizType, Long approvalUser, Date approvalTime); + /** + * 删除待办 + * + * @param bizId + * @param bizType + */ + void removeApproval(Long bizId, String bizType); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalFlowServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalFlowServiceImpl.java new file mode 100644 index 000000000..dbc142e1e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalFlowServiceImpl.java @@ -0,0 +1,23 @@ +package org.springblade.desk.common.service.impl; + +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.common.mapper.MesApprovalFlowMapper; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; +import org.springblade.desk.common.pojo.vo.MesApprovalFlowVO; +import org.springblade.desk.common.service.IMesApprovalFlowService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 审批流程Service实现类 + */ +@Service +public class MesApprovalFlowServiceImpl extends BaseServiceImpl implements IMesApprovalFlowService { + + + @Override + public List queryVOList(MesApprovalFlowEntity mesApprovalFlow) { + return baseMapper.queryVOList(mesApprovalFlow); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalRecordServiceImpl.java index 956578ebe..0ac3cb8e1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesApprovalRecordServiceImpl.java @@ -29,25 +29,26 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.springblade.common.utils.CommonUtil; +import jakarta.annotation.Resource; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.common.constant.ApprovalStatusConstant; +import org.springblade.desk.common.factory.MesApprovalDetailFactory; import org.springblade.desk.common.mapper.MesApprovalRecordMapper; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; -import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity; -import org.springblade.desk.common.pojo.vo.MesNotifyMessageVO; +import org.springblade.desk.common.pojo.vo.MesApprovalFlowVO; +import org.springblade.desk.common.pojo.vo.MesApprovalRecordDetailVO; import org.springblade.desk.common.pojo.vo.MyHistoryMesApprovalRecordVO; import org.springblade.desk.common.pojo.vo.MyMesApprovalRecordVO; +import org.springblade.desk.common.service.ApprovalRecordDetailStrategy; +import org.springblade.desk.common.service.IMesApprovalFlowService; import org.springblade.desk.common.service.IMesApprovalRecordService; import org.springblade.system.cache.UserCache; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -59,63 +60,160 @@ import java.util.stream.Collectors; @Service public class MesApprovalRecordServiceImpl extends BaseServiceImpl implements IMesApprovalRecordService { - @Override - public IPage selectMyMesApprovalRecordPage(Page page, MyMesApprovalRecordVO mesApprovalRecord) { - Page mesNotifyMessageVOPage = this.page(page, new LambdaQueryWrapper() - .eq(StrUtil.isNotEmpty(mesApprovalRecord.getBizType()), MesApprovalRecordEntity::getBizType, mesApprovalRecord.getBizType()) - .like(StrUtil.isNotEmpty(mesApprovalRecord.getContent()), MesApprovalRecordEntity::getContent, mesApprovalRecord.getContent()) - .orderByDesc(MesApprovalRecordEntity::getCreateTime)); - Page page1 = new Page<>(); - if (!mesNotifyMessageVOPage.getRecords().isEmpty()){ - List recordVOList = new ArrayList<>(); - mesNotifyMessageVOPage.getRecords().forEach(entity -> { - MyMesApprovalRecordVO recordVO = new MyMesApprovalRecordVO(); - BeanUtils.copyProperties(entity, recordVO); - recordVO.setCreateUserName(AuthUtil.getUserName()); - recordVOList.add(recordVO); - }); - page1.setRecords(recordVOList); - page1.setTotal(page.getTotal()); - page1.setSize(page.getSize()); - page1.setCurrent(page.getCurrent()); - return page1; - } - return page1; - } + @Resource + private MesApprovalDetailFactory mesApprovalDetailFactory; + @Resource + private IMesApprovalFlowService approvalFlowService; - @Override - public IPage selectMyHistoryMesApprovalRecordPage(IPage page, MyHistoryMesApprovalRecordVO mesApprovalRecord) { - List myHistoryMesApprovalRecordVOList = baseMapper.selectMyHistoryMesApprovalRecordPage(page, mesApprovalRecord); - // 提取所有的业务ID - List bizIdList = myHistoryMesApprovalRecordVOList.stream().map(MesApprovalRecordEntity::getBizId).toList(); - // 提取所有的业务类型 - List bizTypeList = myHistoryMesApprovalRecordVOList.stream().map(MesApprovalRecordEntity::getBizType).toList(); - // 根据业务ID和业务类型查询所有的审批记录 - if (!myHistoryMesApprovalRecordVOList.isEmpty()){ - List list = this.list(new LambdaQueryWrapper() - .in(MesApprovalRecordEntity::getBizId, bizIdList) - .in(MesApprovalRecordEntity::getBizType, bizTypeList) - .orderByDesc(MesApprovalRecordEntity::getCreateTime)); - Map> recordMap = list.stream() - .collect(Collectors.groupingBy( - entity -> entity.getBizId().toString() + "_" + entity.getBizType() - )); - // 拼接查询数据,无需多次查询 - List recordVOList = new ArrayList<>(); - myHistoryMesApprovalRecordVOList.forEach(entity -> { - MyHistoryMesApprovalRecordVO recordVO = new MyHistoryMesApprovalRecordVO(); - BeanUtils.copyProperties(entity, recordVO); - String key = entity.getBizId().toString() + "_" + entity.getBizType(); - MesApprovalRecordEntity currentRecord = recordMap.get(key).get(recordMap.get(key).size() - 1); - MesApprovalRecordEntity firstRecord = recordMap.get(key).get(0); - recordVO.setCurrentNodeName(AuthUtil.getUserRole() + "审批"); - recordVO.setCurrentFlowNodeName(currentRecord.getCurrentRoleName() + "已审批"); - recordVO.setStartUserName(UserCache.getUser(firstRecord.getCreateUser()).getName()); - recordVO.setEndStatus(currentRecord.getStatus().equals(ApprovalStatusConstant.PASS)); - recordVOList.add(recordVO); - }); - page.setRecords(recordVOList); - } - return page.setRecords(Collections.emptyList()); - } + @Override + public IPage selectMyMesApprovalRecordPage(Page page, MyMesApprovalRecordVO mesApprovalRecord) { + Page mesNotifyMessageVOPage = this.page(page, new LambdaQueryWrapper() + .eq(StrUtil.isNotEmpty(mesApprovalRecord.getBizType()), MesApprovalRecordEntity::getBizType, mesApprovalRecord.getBizType()) + .eq(mesApprovalRecord.getStatus() != null, MesApprovalRecordEntity::getStatus, mesApprovalRecord.getStatus()) + .like(StrUtil.isNotEmpty(mesApprovalRecord.getContent()), MesApprovalRecordEntity::getContent, mesApprovalRecord.getContent()) + .orderByDesc(MesApprovalRecordEntity::getCreateTime)); + Page page1 = new Page<>(); + if (!mesNotifyMessageVOPage.getRecords().isEmpty()) { + List recordVOList = new ArrayList<>(); + mesNotifyMessageVOPage.getRecords().forEach(entity -> { + MyMesApprovalRecordVO recordVO = new MyMesApprovalRecordVO(); + BeanUtils.copyProperties(entity, recordVO); + recordVO.setCreateUserName(AuthUtil.getUserName()); + recordVOList.add(recordVO); + }); + page1.setRecords(recordVOList); + page1.setTotal(page.getTotal()); + page1.setSize(page.getSize()); + page1.setCurrent(page.getCurrent()); + return page1; + } + return page1; + } + + @Override + public IPage selectMyHistoryMesApprovalRecordPage(IPage page, MyHistoryMesApprovalRecordVO mesApprovalRecord) { + List myHistoryMesApprovalRecordVOList = baseMapper.selectMyHistoryMesApprovalRecordPage(page, mesApprovalRecord); + // 提取所有的业务ID + List bizIdList = myHistoryMesApprovalRecordVOList.stream().map(MesApprovalRecordEntity::getBizId).toList(); + // 提取所有的业务类型 + List bizTypeList = myHistoryMesApprovalRecordVOList.stream().map(MesApprovalRecordEntity::getBizType).toList(); + // 根据业务ID和业务类型查询所有的审批记录 + if (!myHistoryMesApprovalRecordVOList.isEmpty()) { + List list = this.list(new LambdaQueryWrapper() + .in(MesApprovalRecordEntity::getBizId, bizIdList) + .in(MesApprovalRecordEntity::getBizType, bizTypeList) + .orderByDesc(MesApprovalRecordEntity::getCreateTime)); + Map> recordMap = list.stream() + .collect(Collectors.groupingBy( + entity -> entity.getBizId().toString() + "_" + entity.getBizType() + )); + // 拼接查询数据,无需多次查询 + List recordVOList = new ArrayList<>(); + myHistoryMesApprovalRecordVOList.forEach(entity -> { + MyHistoryMesApprovalRecordVO recordVO = new MyHistoryMesApprovalRecordVO(); + BeanUtils.copyProperties(entity, recordVO); + String key = entity.getBizId().toString() + "_" + entity.getBizType(); + MesApprovalRecordEntity currentRecord = recordMap.get(key).get(recordMap.get(key).size() - 1); + MesApprovalRecordEntity firstRecord = recordMap.get(key).get(0); + recordVO.setCurrentNodeName(AuthUtil.getUserRole() + "审批"); + recordVO.setCurrentFlowNodeName(currentRecord.getCurrentRoleName() + "已审批"); + recordVO.setStartUserName(UserCache.getUser(firstRecord.getCreateUser()).getName()); + recordVO.setEndStatus(currentRecord.getStatus().equals(ApprovalStatusConstant.PASS)); + recordVOList.add(recordVO); + }); + page.setRecords(recordVOList); + } + return page.setRecords(Collections.emptyList()); + } + + @Override + public MesApprovalRecordDetailVO getDetail(MesApprovalRecordEntity mesApprovalRecord) { + MesApprovalRecordEntity approvalRecordEntity = this.getById(mesApprovalRecord.getId()); + MesApprovalRecordDetailVO detailVO = new MesApprovalRecordDetailVO(); + BeanUtils.copyProperties(approvalRecordEntity, detailVO); + MesApprovalFlowEntity flowQuery = new MesApprovalFlowEntity(); + flowQuery.setBizId(approvalRecordEntity.getBizId()); + flowQuery.setBizType(approvalRecordEntity.getBizType()); + List flowList = approvalFlowService.queryVOList(flowQuery); + detailVO.setFlowList(flowList); + ApprovalRecordDetailStrategy strategy = mesApprovalDetailFactory.getStrategy(approvalRecordEntity.getBizType()); + Object detail = strategy.getDetail(approvalRecordEntity.getBizId()); + detailVO.setDetailData(detail); + return detailVO; + } + + @Override + public void updateApproval(Long bizId, String bizType, Long approvalUser, Date approvalTime) { + MesApprovalRecordEntity entity = getByBiz(bizId, bizType); + if (entity == null || entity.getStatus() != 1) { + return; + } + MesApprovalRecordEntity upd = new MesApprovalRecordEntity(); + upd.setId(entity.getId()); + upd.setStatus(2); + this.updateById(upd); + + MesApprovalFlowEntity flowQuery = new MesApprovalFlowEntity(); + flowQuery.setBizId(bizId); + flowQuery.setBizType(bizType); + List flowList = approvalFlowService.queryVOList(flowQuery); + MesApprovalFlowVO currentFlow = flowList.stream().filter(flow -> flow.getStatus().equals(2)).findFirst().orElse(null); + if (currentFlow != null) { + MesApprovalFlowEntity currentFlowEntity = new MesApprovalFlowEntity(); + currentFlowEntity.setId(currentFlow.getId()); + currentFlowEntity.setApprovalUser(approvalUser); + currentFlowEntity.setApprovalTime(approvalTime); + currentFlowEntity.setStatus(3); + approvalFlowService.updateById(currentFlowEntity); + Integer nextSort = currentFlow.getNextSort(); + if (nextSort == null) { + return; + } + MesApprovalFlowVO nextFlow = flowList.stream().filter(flow -> flow.getSort().equals(nextSort)).findFirst().orElse(null); + if (nextFlow != null) { + MesApprovalRecordEntity save = new MesApprovalRecordEntity(); + BeanUtils.copyProperties(entity, save); + save.setStatus(1); + save.setCreateUser(approvalUser); + save.setCreateTime(approvalTime); + save.setId(null); + this.save(save); + MesApprovalFlowEntity nextFlowEntity = new MesApprovalFlowEntity(); + nextFlowEntity.setId(nextFlow.getId()); + nextFlowEntity.setStatus(2); + approvalFlowService.updateById(nextFlowEntity); + } + } + } + + /** + * 删除待办 + * + * @param bizId + * @param bizType + */ + @Override + public void removeApproval(Long bizId, String bizType) { + MesApprovalRecordEntity entity = getByBiz(bizId, bizType); + if (entity == null || entity.getStatus() != 1) { + return; + } + MesApprovalRecordEntity upd = new MesApprovalRecordEntity(); + upd.setId(entity.getId()); + upd.setStatus(2); + this.updateById(upd); + MesApprovalFlowEntity flowQuery = new MesApprovalFlowEntity(); + flowQuery.setBizId(bizId); + flowQuery.setBizType(bizType); + List flowList = approvalFlowService.queryVOList(flowQuery); + List ids = flowList.stream().map(MesApprovalFlowVO::getId).collect(Collectors.toList()); + approvalFlowService.removeByIds(ids); + } + + private MesApprovalRecordEntity getByBiz(Long bizId, String bizType) { + return this.getOne(new LambdaQueryWrapper() + .eq(MesApprovalRecordEntity::getBizType, bizType) + .eq(MesApprovalRecordEntity::getBizId, bizId) + .eq(MesApprovalRecordEntity::getStatus, 1)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/OemStatementApprovalServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/OemStatementApprovalServiceImpl.java new file mode 100644 index 000000000..4aa684e6e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/OemStatementApprovalServiceImpl.java @@ -0,0 +1,68 @@ +package org.springblade.desk.common.service.impl; + +import jakarta.annotation.Resource; +import org.springblade.desk.common.enums.MesApprovalRecordBizTypeEnum; +import org.springblade.desk.common.pojo.entity.MesApprovalFlowEntity; +import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; +import org.springblade.desk.common.service.ApprovalRecordDetailStrategy; +import org.springblade.desk.common.service.IMesApprovalFlowService; +import org.springblade.desk.common.service.IMesApprovalRecordService; +import org.springblade.desk.oem.pojo.entity.OemSettlementApprovalEntity; +import org.springblade.desk.oem.pojo.vo.OemSettlementApprovalDetailVO; +import org.springblade.desk.oem.service.IOemSettlementApprovalService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 外协结算待办策略实现类 + */ +@Service +public class OemStatementApprovalServiceImpl implements ApprovalRecordDetailStrategy> { + + @Resource + private IMesApprovalRecordService mesApprovalRecordService; + @Resource + private IMesApprovalFlowService mesApprovalFlowService; + @Resource + private IOemSettlementApprovalService oemSettlementApprovalService; + + + @Override + public String getBizType() { + return MesApprovalRecordBizTypeEnum.OEM_STATEMENT.getDesc(); + } + + @Override + public Map getDetail(Long bizId) { + List oc = oemSettlementApprovalService.getApprovalDetailList(bizId, true); + List ocCategory = oemSettlementApprovalService.getApprovalDetailList(bizId, false); + Map resultMap = new HashMap<>(); + resultMap.put("oc", oc); + resultMap.put("ocCategory", ocCategory); + return resultMap; + } + + @Override + public void createApproval(Long bizId) { + // 创建待办 + MesApprovalRecordEntity approvalRecord = new MesApprovalRecordEntity(); + approvalRecord.setBizId(bizId); + approvalRecord.setBizType(getBizType()); + approvalRecord.setContent(getBizType()); + mesApprovalRecordService.save(approvalRecord); + // 创建审批流程 + OemSettlementApprovalEntity oemSettlementApproval = oemSettlementApprovalService.getById(bizId); + List flowList = new ArrayList<>(); + flowList.add(new MesApprovalFlowEntity(oemSettlementApproval.getId(), getBizType(), "提交", 1, 2, oemSettlementApproval.getCreateUser(), oemSettlementApproval.getCreateTime(), 3)); + flowList.add(new MesApprovalFlowEntity(oemSettlementApproval.getId(), getBizType(), "一级校对", 2, 3, null, null, 2)); + flowList.add(new MesApprovalFlowEntity(oemSettlementApproval.getId(), getBizType(), "二级校对", 3, 4, null, null, 1)); + flowList.add(new MesApprovalFlowEntity(oemSettlementApproval.getId(), getBizType(), "审核", 4, null, null, null, 1)); + mesApprovalFlowService.saveBatch(flowList); + } + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemSettlementApprovalServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemSettlementApprovalServiceImpl.java index 9c85e91d2..d252d807a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemSettlementApprovalServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemSettlementApprovalServiceImpl.java @@ -2,15 +2,15 @@ package org.springblade.desk.oem.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.cache.CacheNames; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.desk.common.enums.MesApprovalRecordBizTypeEnum; import org.springblade.desk.common.feign.IMesNotifyMessageClient; import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity; +import org.springblade.desk.common.service.IMesApprovalRecordService; import org.springblade.desk.oem.mapper.OemSettlementApprovalMapper; import org.springblade.desk.oem.pojo.entity.OemSettlementApprovalDetailEntity; import org.springblade.desk.oem.pojo.entity.OemSettlementApprovalEntity; @@ -23,7 +23,6 @@ import org.springblade.desk.oem.service.IOemSettlementApprovalDetailService; import org.springblade.desk.oem.service.IOemSettlementApprovalService; import org.springblade.desk.oem.service.IOemStatementService; import org.springframework.beans.BeanUtils; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,6 +49,9 @@ public class OemSettlementApprovalServiceImpl extends BaseServiceImpl selectApprovalPage(IPage page, SettlementApprovalQuery query) { return page.setRecords(baseMapper.selectApprovalPage(page, query)); @@ -63,12 +65,12 @@ public class OemSettlementApprovalServiceImpl extends BaseServiceImpl list) { if (null != list && list.size() > 0) { - List saves = list.stream() - .map(statementVO -> { - OemStatementEntity entity = new OemStatementEntity(); - BeanUtils.copyProperties(statementVO, entity); - entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); - entity.setMemo("无需结算"); - entity.setTotalPrice(null); - entity.setUnitPrice(null); - entity.setQuotation(""); - entity.setUpdateTime(new Date()); + List saves = list.stream().map(statementVO -> { + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); + entity.setMemo("无需结算"); + entity.setTotalPrice(null); + entity.setUnitPrice(null); + entity.setQuotation(""); + entity.setUpdateTime(new Date()); - entity.setSettleTime(new Date()); + entity.setSettleTime(new Date()); - return entity; - }) - .collect(Collectors.toList()); + return entity; + }).collect(Collectors.toList()); // baseMapper.insertOrUpdate(saves); // 逐条处理 @@ -632,14 +634,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl wrapper = Wrappers.lambdaUpdate(); - wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice()) - .set(OemStatementEntity::getUnitPrice, entity.getUnitPrice()) - .set(OemStatementEntity::getQuotation, entity.getQuotation()) - .set(OemStatementEntity::getRosStatus, entity.getRosStatus()) - .set(OemStatementEntity::getMemo, entity.getMemo()) - .set(OemStatementEntity::getUpdateTime, entity.getUpdateTime()) - .set(OemStatementEntity::getSettleTime, entity.getSettleTime()) - .eq(OemStatementEntity::getId, entity.getId()); + wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice()).set(OemStatementEntity::getUnitPrice, entity.getUnitPrice()).set(OemStatementEntity::getQuotation, entity.getQuotation()).set(OemStatementEntity::getRosStatus, entity.getRosStatus()).set(OemStatementEntity::getMemo, entity.getMemo()).set(OemStatementEntity::getUpdateTime, entity.getUpdateTime()).set(OemStatementEntity::getSettleTime, entity.getSettleTime()).eq(OemStatementEntity::getId, entity.getId()); baseMapper.update(null, wrapper); } @@ -1218,6 +1213,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl saves = new ArrayList<>(); // 查询未生成的结算数据 @@ -1244,7 +1240,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl selectUnsettled(StatementQuery query) { Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime(); if (lastMaxPutStoreTime != null) { - query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDate()); + query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()); } return baseMapper.selectUnsettled(query); } @@ -1272,12 +1270,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl> RProcessCapabilityType = dictClient.getList("ProcessCapabilityType"); if (RProcessCapabilityType.isSuccess()) { List dictList = RProcessCapabilityType.getData(); - dictMap = dictList.stream() - .collect(Collectors.toMap( - Dict::getDictKey, - Dict::getDictValue, - (oldVal, newVal) -> oldVal - )); + dictMap = dictList.stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue, (oldVal, newVal) -> oldVal)); } return dictMap; } @@ -1289,34 +1282,25 @@ public class OemStatementServiceImpl extends BaseServiceImpl duplicatePutStore(List statementVOS, List saves) { // 校验车间订单工序是否存在结算数据 - List woIds = statementVOS.stream() - .filter(vo -> vo.getId() != null) - .map(StatementVO::getWoId) - .filter(woId -> woId != null) - .collect(Collectors.toList()); + List woIds = statementVOS.stream().filter(vo -> vo.getId() != null).map(StatementVO::getWoId).filter(woId -> woId != null).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(woIds)) { // 查询存在已结算数据的订单 List settledWoIds = baseMapper.selectSettledWoIds(woIds); // 存在已结算数据的订单跳过,不存在已结算数据的订单标记为重复镀后入库 - statementVOS = statementVOS.stream() - .filter(vo -> { - boolean needRemove = vo.getId() != null - && vo.getWoId() != null - && settledWoIds.contains(vo.getWoId()); - return !needRemove; - }) - .map(vo -> { - if (vo.getId() != null) { - OemStatementEntity entity = new OemStatementEntity(); - entity.setId(vo.getId()); - entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); - entity.setMemo("重复镀后入库"); - saves.add(entity); - vo.setId(null); // 清空ID - } - return vo; - }) - .collect(Collectors.toList()); + statementVOS = statementVOS.stream().filter(vo -> { + boolean needRemove = vo.getId() != null && vo.getWoId() != null && settledWoIds.contains(vo.getWoId()); + return !needRemove; + }).map(vo -> { + if (vo.getId() != null) { + OemStatementEntity entity = new OemStatementEntity(); + entity.setId(vo.getId()); + entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); + entity.setMemo("重复镀后入库"); + saves.add(entity); + vo.setId(null); // 清空ID + } + return vo; + }).collect(Collectors.toList()); } return statementVOS; } @@ -1400,7 +1384,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl> entry : groupByPsName.entrySet()) { String psName = entry.getKey(); List standardProcessList = standardMap.getOrDefault(psName, Collections.emptyList()); - if(CollectionUtils.isEmpty(standardProcessList)){ + if (CollectionUtils.isEmpty(standardProcessList)) { continue; } for (StatementVO statementVO : entry.getValue()) { @@ -1591,92 +1575,17 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetAllList = new ArrayList<>(); -// PriceSheetVO priceSheet1 = new PriceSheetVO(); -// priceSheet1.setPrice("60"); -// priceSheet1.setSplycode("wx000001"); -// priceSheet1.setSplyname(oemName); -// priceSheet1.setPrtum("件"); -// priceSheet1.setWono("110"); -// priceSheet1.setSeqid("GXJG-20250228018"); -// priceSheet1.setGxinfo("光亮腐蚀"); -// priceSheet1.setStartdat("2026-01-15"); -// priceSheet1.setValiddat("2026-12-31"); -// priceSheet1.setStairflag("1"); -// priceSheet1.setCoating_desc("涂色标"); -// priceSheet1.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet1); -// PriceSheetVO priceSheet2 = new PriceSheetVO(); -// priceSheet2.setPrice("120"); -// priceSheet2.setSplycode("wx000001"); -// priceSheet2.setSplyname(oemName); -// priceSheet2.setPrtum("件"); -// priceSheet2.setWono("110"); -// priceSheet2.setSeqid("GXJG-20250228018"); -// priceSheet2.setGxinfo("光亮腐蚀"); -// priceSheet2.setStartdat("2026-01-15"); -// priceSheet2.setValiddat("2026-12-31"); -// priceSheet2.setStairflag("1"); -// priceSheet2.setCoating_desc("涂色带"); -// priceSheet2.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet2); -// PriceSheetVO priceSheet3 = new PriceSheetVO(); -// priceSheet3.setPrice("180"); -// priceSheet3.setSplycode("wx000001"); -// priceSheet3.setSplyname(oemName); -// priceSheet3.setPrtum("件"); -// priceSheet3.setWono("110"); -// priceSheet3.setSeqid("GXJG-20250228018"); -// priceSheet3.setGxinfo("光亮腐蚀"); -// priceSheet3.setStartdat("2026-01-15"); -// priceSheet3.setValiddat("2026-12-31"); -// priceSheet3.setStairflag("1"); -// priceSheet3.setCoating_desc("涂箭头"); -// priceSheet3.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet3); -// PriceSheetVO priceSheet4 = new PriceSheetVO(); -// priceSheet4.setPrice("60"); -// priceSheet4.setSplycode("wx000001"); -// priceSheet4.setSplyname(oemName); -// priceSheet4.setPrtum("件"); -// priceSheet4.setWono("320"); -// priceSheet4.setSeqid("GXJG-20250228018"); -// priceSheet4.setGxinfo("热处理铜合金电镀低应力镍"); -// priceSheet4.setStartdat("2026-01-15"); -// priceSheet4.setValiddat("2026-12-31"); -// priceSheet4.setStairflag("1"); -// priceSheet4.setCoating_desc("涂色标"); -// priceSheet4.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet4); -// PriceSheetVO priceSheet5 = new PriceSheetVO(); -// priceSheet5.setPrice("60"); -// priceSheet5.setSplycode("wx000001"); -// priceSheet5.setSplyname(oemName); -// priceSheet5.setPrtum("件"); -// priceSheet5.setWono("320"); -// priceSheet5.setSeqid("GXJG-20250228018"); -// priceSheet5.setGxinfo("热处理铜合金电镀低应力镍"); -// priceSheet5.setStartdat("2026-01-15"); -// priceSheet5.setValiddat("2026-12-31"); -// priceSheet5.setStairflag("1"); -// priceSheet5.setCoating_desc("涂色带"); -// priceSheet5.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet5); -// PriceSheetVO priceSheet6 = new PriceSheetVO(); -// priceSheet6.setPrice("60"); -// priceSheet6.setSplycode("wx000001"); -// priceSheet6.setSplyname(oemName); -// priceSheet6.setPrtum("件"); -// priceSheet6.setWono("320"); -// priceSheet6.setSeqid("GXJG-20250228018"); -// priceSheet6.setGxinfo("热处理铜合金电镀低应力镍"); -// priceSheet6.setStartdat("2026-01-15"); -// priceSheet6.setValiddat("2026-12-31"); -// priceSheet6.setStairflag("1"); -// priceSheet6.setCoating_desc("涂箭头"); -// priceSheet6.setPrtlotno("JHT"); -// priceSheetAllList.add(priceSheet6); +// PriceSheetVO sheet = new PriceSheetVO(); +// sheet.setStairflag("1"); +// sheet.setSplycode("Y523"); +// sheet.setGxinfo("化学钝化"); +// sheet.setPrtno("21E8-004-30450-H1"); +// sheet.setPrice("100"); +// sheet.setStartdat("2026-01-01 00:00:00"); +// sheet.setValiddat("2026-12-31 00:00:00"); +// priceSheetAllList.add(sheet); // return priceSheetAllList; } @@ -2045,9 +1954,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl 0 - ? quotationSb.substring(0, quotationSb.length() - 1) - : ""; + String quotation = quotationSb.length() > 0 ? quotationSb.substring(0, quotationSb.length() - 1) : ""; statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setMemo("结算中"); statementVO.setSettleTime(new Date()); @@ -2118,11 +2025,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement); statementVOS = statementVOS.stream().filter(vo -> { - String memo = vo.getMemo(); - return !"无需结算".equals(memo) - && !"重复镀后入库".equals(memo); - }) - .collect(Collectors.toList()); + String memo = vo.getMemo(); + return !"无需结算".equals(memo) && !"重复镀后入库".equals(memo); + }).collect(Collectors.toList()); List saves = new ArrayList<>(); BigDecimal price = BigDecimal.ZERO; if (mesOemStatement.getPrice() != null) { @@ -2152,7 +2053,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement); statementVOS = statementVOS.stream().filter(vo -> { - String memo = vo.getMemo(); - return !"无需结算".equals(memo) - && !"重复镀后入库".equals(memo); - }) - .collect(Collectors.toList()); + String memo = vo.getMemo(); + return !"无需结算".equals(memo) && !"重复镀后入库".equals(memo); + }).collect(Collectors.toList()); BigDecimal price = BigDecimal.ZERO; if (mesOemStatement.getPrice() != null) { price = mesOemStatement.getPrice(); @@ -2196,14 +2097,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl needMatchList = errorStatements.stream() - .filter(vo -> { - String memo = vo.getMemo(); - // 排除"无需结算"和"重复镀后入库" - return !StrUtil.contains(memo, "无需结算") - && !StrUtil.contains(memo, "重复镀后入库"); - }) - .collect(Collectors.toList()); + List needMatchList = errorStatements.stream().filter(vo -> { + String memo = vo.getMemo(); + // 排除"无需结算"和"重复镀后入库" + return !StrUtil.contains(memo, "无需结算") && !StrUtil.contains(memo, "重复镀后入库"); + }).collect(Collectors.toList()); if (CollectionUtils.isEmpty(needMatchList)) { return R.success("没有需要匹配标准工序代码的数据"); @@ -2222,8 +2120,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); - BigDecimal totalAmount = statements.stream() - .map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalArea = statements.stream().map(s -> s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalAmount = statements.stream().map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add); // 审批主表记录 @@ -2427,6 +2321,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl statements) { // 1. 按厂家ID和结算大类ID分组 - Map> groupedMap = statements.stream() - .filter(s -> s.getOcId() != null && s.getStatementCategoryId() != null) - .collect(Collectors.groupingBy(s -> s.getOcId() + "_" + s.getStatementCategoryId())); + Map> groupedMap = statements.stream().filter(s -> s.getOcId() != null && s.getStatementCategoryId() != null).collect(Collectors.groupingBy(s -> s.getOcId() + "_" + s.getStatementCategoryId())); if (groupedMap.isEmpty()) { throw new RuntimeException("没有符合条件的结算单生成分组明细,缺少外协厂家或结算大类数据"); @@ -2475,12 +2369,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); - BigDecimal groupTotalAmount = groupStatements.stream() - .map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal groupTotalArea = groupStatements.stream().map(s -> s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal groupTotalAmount = groupStatements.stream().map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add); // 计算占比(按结算大类汇总,不按厂家) BigDecimal totalAreaByCategory = categoryAreaMap.getOrDefault(categoryId, BigDecimal.ZERO); @@ -2490,13 +2380,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl 0) { - areaRatio = groupTotalArea.divide(totalAreaByCategory, 4, RoundingMode.HALF_UP) - .multiply(new BigDecimal("100")); + areaRatio = groupTotalArea.divide(totalAreaByCategory, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); } if (totalAmountByCategory.compareTo(BigDecimal.ZERO) > 0) { - amountRatio = groupTotalAmount.divide(totalAmountByCategory, 4, RoundingMode.HALF_UP) - .multiply(new BigDecimal("100")); + amountRatio = groupTotalAmount.divide(totalAmountByCategory, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); } // 创建明细记录 @@ -2546,32 +2434,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl