功能开发-sjx

liweidong
sunjianxi 4 weeks ago
parent 9091cfa0a7
commit 5e09940306
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java
  2. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java
  3. 4
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpYieldOrderClient.java
  4. 5
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpYieldOrderClientFallback.java
  5. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/QualityGradeMapper.java
  6. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/QualityGradeMapper.xml
  7. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IQualityGradeService.java
  8. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BatConfigServiceImpl.java
  9. 45
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/QualityGradeServiceImpl.java
  10. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/WorkCenterServiceImpl.java
  11. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  12. 47
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  13. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
  14. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java
  15. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml
  16. 242
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java
  17. 184
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  18. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectMilestoneServiceImpl.java
  19. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpYieldOrderClientImpl.java
  20. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpYieldOrderMapper.java
  21. 19
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpYieldOrderMapper.xml
  22. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpYieldOrderService.java
  23. 17
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  24. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpYieldOrderServiceImpl.java
  25. 8
      blade-service/blade-system/src/main/java/org/springblade/system/controller/UserController.java
  26. 2
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserMapper.java
  27. 6
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/UserMapper.xml
  28. 2
      blade-service/blade-system/src/main/java/org/springblade/system/service/IUserService.java
  29. 16
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserServiceImpl.java

@ -70,4 +70,6 @@ public class BsCraftAbilityEntity extends BaseEntity {
@Schema(description = "厂内应分比例") @Schema(description = "厂内应分比例")
private Double inFactoryPercent; private Double inFactoryPercent;
} }

@ -159,7 +159,7 @@ public class DsPartEntity extends BaseEntity {
* 镀层厚度 * 镀层厚度
*/ */
@Schema(description = "镀层厚度") @Schema(description = "镀层厚度")
private String plateThickness; private Double plateThickness;
/** /**
* 镀层物料 * 镀层物料
*/ */
@ -271,7 +271,7 @@ public class DsPartEntity extends BaseEntity {
* 面积2 * 面积2
*/ */
@Schema(description = "面积2") @Schema(description = "面积2")
private BigDecimal areaTwo; private Double areaTwo;
/** /**
@ -342,6 +342,6 @@ public class DsPartEntity extends BaseEntity {
* 镀层厚度2 * 镀层厚度2
*/ */
@Schema(description = "镀层厚度2") @Schema(description = "镀层厚度2")
private BigDecimal plateThicknessTwo; private Double plateThicknessTwo;
} }

@ -22,6 +22,7 @@ public interface IErpYieldOrderClient {
String API_PREFIX = "/feign/erp/yieldOrder"; String API_PREFIX = "/feign/erp/yieldOrder";
String SAVE_GLASS_CAKE = API_PREFIX + "/saveGlassCake"; String SAVE_GLASS_CAKE = API_PREFIX + "/saveGlassCake";
String GET_CHILD_ROAM_NO_BY_PART_CODE = API_PREFIX + "/getChildRoamNoByPartCode";
/** /**
* 生成玻璃饼订单 * 生成玻璃饼订单
@ -49,4 +50,7 @@ public interface IErpYieldOrderClient {
@RequestParam("partCode") String partCode, @RequestParam("partCode") String partCode,
@RequestParam("quota") Double quota); @RequestParam("quota") Double quota);
@GetMapping(GET_CHILD_ROAM_NO_BY_PART_CODE)
String getChildRoamNoByPartCode(@RequestParam("partCode") String partCode);
} }

@ -15,4 +15,9 @@ public class IErpYieldOrderClientFallback implements IErpYieldOrderClient {
public void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate, String planUser, String ypCode, Long poQty, String partCode, Double quota) { public void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate, String planUser, String ypCode, Long poQty, String partCode, Double quota) {
} }
@Override
public String getChildRoamNoByPartCode(String partCode) {
return null;
}
} }

@ -0,0 +1,41 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
/**
* 质量等级表 Mapper 接口
*
* @author BladeX
* @since 2025-12-18
*/
public interface QualityGradeMapper extends BaseMapper<QualityGradeEntity> {
}

@ -0,0 +1,21 @@
<?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.basic.mapper.QualityGradeMapper">
<!-- 通用查询映射结果 -->
<resultMap id="qualityGradeResultMap" type="org.springblade.scheduling.pojo.entity.QualityGradeEntity">
<result column="ID" property="id"/>
<result column="QUALITY_GRADE" property="qualityGrade"/>
<result column="TYPE" property="type"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
</mapper>

@ -0,0 +1,40 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.basic.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
/**
* 质量等级表 服务类
*
* @author BladeX
* @since 2025-12-18
*/
public interface IQualityGradeService extends BaseService<QualityGradeEntity> {
}

@ -6,6 +6,7 @@ package org.springblade.desk.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -68,10 +69,12 @@ public class BatConfigServiceImpl extends BaseServiceImpl<BatConfigMapper, BatCo
.eq(BatConfig::getCaId, hostCaId) .eq(BatConfig::getCaId, hostCaId)
.eq(partIsNotBlank, BatConfig::getPartCode, part) .eq(partIsNotBlank, BatConfig::getPartCode, part)
.le(partIsNotBlank, BatConfig::getSingletonArea, singletonArea) .le(partIsNotBlank, BatConfig::getSingletonArea, singletonArea)
.orderByDesc(BatConfig::getSingletonArea) .orderByDesc(BatConfig::getSingletonArea);
.last("LIMIT 1");
BatConfig batConfig = baseMapper.selectOne(wrapper); List<BatConfig> batConfigList = baseMapper.selectList(wrapper);
return batConfig; if(CollectionUtils.isEmpty(batConfigList)){
return null;
}
return batConfigList.get(0);
} }
} }

@ -0,0 +1,45 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.basic.service.impl;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.basic.mapper.QualityGradeMapper;
import org.springblade.desk.basic.service.IQualityGradeService;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
import org.springframework.stereotype.Service;
/**
* 质量等级表 服务实现类
*
* @author BladeX
* @since 2025-12-18
*/
@Service
public class QualityGradeServiceImpl extends BaseServiceImpl<QualityGradeMapper, QualityGradeEntity> implements IQualityGradeService {
}

@ -5,17 +5,17 @@ package org.springblade.desk.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.excel.WorkCenterExcel; import org.springblade.desk.basic.excel.WorkCenterExcel;
import org.springblade.desk.basic.mapper.WorkCenterMapper; import org.springblade.desk.basic.mapper.WorkCenterMapper;
import org.springblade.desk.basic.pojo.entity.BatConfig; import org.springblade.desk.basic.pojo.entity.BatConfig;
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity;
import org.springblade.desk.basic.pojo.entity.WorkCenter; import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.pojo.vo.WorkCenterVO; import org.springblade.desk.basic.pojo.vo.WorkCenterVO;
import org.springblade.desk.basic.service.IBatConfigService; import org.springblade.desk.basic.service.IBatConfigService;
@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* [作业中心] 服务实现类 * [作业中心] 服务实现类
@ -62,14 +61,12 @@ public class WorkCenterServiceImpl extends BaseServiceImpl<WorkCenterMapper, Wor
@Override @Override
public Map<Long, BsWorkCenterEntity> selectByAbility(Long abilityId, Double ypQty, Double ypArea, String partCode, String PrimaryCraft, Integer yieldType, Boolean rxlSpace) { public Map<Long, BsWorkCenterEntity> selectByAbility(Long abilityId, Double ypQty, Double ypArea, String partCode, String PrimaryCraft, Integer yieldType, Boolean rxlSpace) {
List<OemCraftAbilityEntity> abilityList = oemCraftAbilityService.findByAbility(abilityId);
if (Func.isEmpty(abilityList)) { List<WorkCenter> workCenterList = this.list(Wrappers.<WorkCenter>lambdaQuery().like(WorkCenter::getCraftAbilityId,abilityId));
if(CollectionUtils.isEmpty(workCenterList)){
return null; return null;
} }
List<Long> companyIdList = abilityList.stream().map(OemCraftAbilityEntity::getOtherId).collect(Collectors.toList());
List<WorkCenter> workCenterList = this.listByIds(companyIdList);
Double area = ypQty * ypArea; Double area = ypQty * ypArea;
Map<Long, BsWorkCenterEntity> wcMap = new LinkedHashMap<>(); Map<Long, BsWorkCenterEntity> wcMap = new LinkedHashMap<>();

@ -31,6 +31,7 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.dashboard.excel.DsPartExcel; import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.pojo.entity.*; import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import java.util.List; import java.util.List;
@ -250,7 +251,7 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
* @param partVersion 版本号 * @param partVersion 版本号
* @return * @return
*/ */
PartCraftVO selectPartCraft(String partCode, String roamNo, String rank, String partVersion); PartCraftVO selectPartCraft(YieldOrder yieldOrder, String partCode, String roamNo, String rank, String partVersion);
/** /**

@ -1,28 +1,34 @@
package org.springblade.desk.dashboard.service.impl; package org.springblade.desk.dashboard.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil; import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.desk.basic.service.ICraftAbilityService;
import org.springblade.desk.common.constant.BizTypeConstant; import org.springblade.desk.common.constant.BizTypeConstant;
import org.springblade.desk.common.service.IMesNotifyMessageService; import org.springblade.desk.common.service.IMesNotifyMessageService;
import org.springblade.desk.dashboard.constant.TaskingConstant; import org.springblade.desk.dashboard.constant.TaskingConstant;
import org.springblade.desk.dashboard.excel.DsPartExcel; import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.mapper.DsPartMapper; import org.springblade.desk.dashboard.mapper.DsPartMapper;
import org.springblade.desk.dashboard.pojo.entity.*; import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.enums.DsCraftEnum;
import org.springblade.desk.dashboard.pojo.enums.PartCraftStatusEnum; import org.springblade.desk.dashboard.pojo.enums.PartCraftStatusEnum;
import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.dashboard.service.*; import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.dashboard.utils.DateUtils; import org.springblade.desk.dashboard.utils.DateUtils;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.erpdata.feign.IErpDataPartClient; import org.springblade.erpdata.feign.IErpDataPartClient;
import org.springblade.scheduling.pojo.entity.CraftAbilityEntity;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.entity.UserInfo; import org.springblade.system.pojo.entity.UserInfo;
@ -33,6 +39,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
@ -85,6 +92,10 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
@Autowired @Autowired
IDsPartVersionService partVersionService; IDsPartVersionService partVersionService;
@Autowired
ICraftAbilityService craftAbilityService;
private static IErpDataPartClient erpDataPartClient; private static IErpDataPartClient erpDataPartClient;
private static IErpDataPartClient getErpDataPartClient() { private static IErpDataPartClient getErpDataPartClient() {
@ -635,7 +646,7 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
} }
@Override @Override
public PartCraftVO selectPartCraft(String partCode, String roamNo, String rank, String partVersion) { public PartCraftVO selectPartCraft(YieldOrder yieldOrder, String partCode, String roamNo, String rank, String partVersion) {
if (StringUtils.isEmpty(partCode)) { if (StringUtils.isEmpty(partCode)) {
return PartCraftVO.build(PartCraftStatusEnum.PART_NOT_EXIST.getCode()); return PartCraftVO.build(PartCraftStatusEnum.PART_NOT_EXIST.getCode());
} }
@ -679,7 +690,37 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
return PartCraftVO.build(PartCraftStatusEnum.NO_PROCEDURE_INFO.getCode()); return PartCraftVO.build(PartCraftStatusEnum.NO_PROCEDURE_INFO.getCode());
} }
// 8. 返回工艺 // 8.工艺级别==2&&热表订单,判断镀金标识
if("2".equals(craftByRank.getRank()) && YieldOrderEnum.YIELD_TYPE_1.getCode() == yieldOrder.getYieldType()){
// 有镀金标识,获取局部镀订单面积判定值
if (CommonConstant.BOOLEAN_TRUE.equals(partEntity.getGoldMark())) {
// 获取零件工艺级别面积判定值
List<Long> caIdList = processEntities.stream().map(DsProcessEntity::getCaId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<CraftAbilityEntity> craftAbilityList = craftAbilityService.list(Wrappers.<CraftAbilityEntity>lambdaQuery().in(BaseEntity::getId,caIdList));
if(!CollectionUtils.isEmpty(craftAbilityList)){
Double levConfirmVal = craftAbilityList.stream().filter(Objects::nonNull).map(CraftAbilityEntity::getLocalArea).filter(Objects::nonNull).findFirst().orElse(BigDecimal.ZERO).doubleValue();
if (levConfirmVal > 0) {
// 计算生产订单总面积
Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty();
if (totalArea > levConfirmVal) {
rank = String.valueOf(DsCraftEnum.RANK_ONE.getCode());
craftByRank = selectCraftByPriority(dsCraftList, rank);
if (craftByRank == null) {
return PartCraftVO.build(PartCraftStatusEnum.NO_CRAFT_RANK_INFO.getCode());
}
processEntities = processService.selectDsProcessByCraftId(craftByRank.getId());
if (CollectionUtils.isEmpty(processEntities)) {
return PartCraftVO.build(PartCraftStatusEnum.NO_PROCEDURE_INFO.getCode());
}
}
}
}
}
}
// 9. 返回工艺
return PartCraftVO.build(PartCraftStatusEnum.SUCCESS.getCode(),craftByRank); return PartCraftVO.build(PartCraftStatusEnum.SUCCESS.getCode(),craftByRank);
} }

@ -178,6 +178,17 @@ public class YieldOrderController extends BladeController {
return R.status(result); return R.status(result);
} }
/**
* 批量确认
*/
@PostMapping("/automaticDispatch")
@Operation(summary = "批量确认", description = "传入ids")
public R automaticDispatch(@Parameter(description = "主键集合", required = true) @RequestParam Long id) {
YieldOrder yieldOrder = yieldOrderService.getById(id);
Boolean result = yieldOrderService.verifyYieldOrderResource(yieldOrder);
return R.status(result);
}
/** /**
* 批量关闭 * 批量关闭
*/ */

@ -1,12 +1,12 @@
package org.springblade.desk.order.feign; package org.springblade.desk.order.feign;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* Feign 排产相关定时任务接口 * Feign 排产相关定时任务接口
@ -140,6 +141,9 @@ public class ApsOrderClient implements IApsOrderClient {
@Override @Override
public void saveOrderList(List<YieldOrder> yieldOrderList) { public void saveOrderList(List<YieldOrder> yieldOrderList) {
yieldOrderService.saveOrUpdateBatch(yieldOrderList); yieldOrderService.saveOrUpdateBatch(yieldOrderList);
//合规性校验
List<Long> ids = yieldOrderList.stream().map(BaseEntity::getId).collect(Collectors.toList());
yieldOrderService.dataVerify(ids);
} }
@Override @Override

@ -12,7 +12,7 @@
RECSEQ_NO, yo.MANUAL_INCREASE, yo.YIELD_TYPE, yo.FATHER_YO_ID, yo.NEW_LEV_FLAG, yo.PRODUCE_BOOL, yo.USE_DEPT_CODE, yo.YP_PRODUCT_LINE, RECSEQ_NO, yo.MANUAL_INCREASE, yo.YIELD_TYPE, yo.FATHER_YO_ID, yo.NEW_LEV_FLAG, yo.PRODUCE_BOOL, yo.USE_DEPT_CODE, yo.YP_PRODUCT_LINE,
YP_MEMO, yo.SJ_MOLD_PREPARATION, yo.SJ_KIT_PREPARATION, yo.PK_USERNAME, yo.PK_DATE, yo.KIT_PREPARATION_MAN, yo.KIT_PREPARATION_TIME, YP_MEMO, yo.SJ_MOLD_PREPARATION, yo.SJ_KIT_PREPARATION, yo.PK_USERNAME, yo.PK_DATE, yo.KIT_PREPARATION_MAN, yo.KIT_PREPARATION_TIME,
PRIORITY_APS, yo.PRIORITY_ERP, yo.VALIDATION_RESULT, yo.VALIDATION_MOMO, yo.VALIDATION_TIME, yo.VALIDATION_USER, yo.RECEIVE_STATUS, PRIORITY_APS, yo.PRIORITY_ERP, yo.VALIDATION_RESULT, yo.VALIDATION_MOMO, yo.VALIDATION_TIME, yo.VALIDATION_USER, yo.RECEIVE_STATUS,
WORK_CENTER_ID, yo.ERROR_INFO, yo.RECEIVE_USER, yo.RECEIVE_TIME, yo.GOODS_DEMAND, yo.TOOLS_DEMAND, yo.PLATE_GOODS_CODE WORK_CENTER_ID, yo.ERROR_INFO, yo.RECEIVE_USER, yo.RECEIVE_TIME, yo.GOODS_DEMAND, yo.TOOLS_DEMAND, yo.PLATE_GOODS_CODE, yo.PART_VERSION
</sql> </sql>

@ -2,8 +2,12 @@ package org.springblade.desk.order.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.utils.StringPrefixUtils; import org.springblade.common.utils.StringPrefixUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
@ -12,14 +16,20 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.pojo.entity.CoatingThickness; import org.springblade.desk.basic.pojo.entity.CoatingThickness;
import org.springblade.desk.basic.pojo.entity.MaterialQuota; import org.springblade.desk.basic.pojo.entity.MaterialQuota;
import org.springblade.desk.basic.service.ICoatingThicknessService; import org.springblade.desk.basic.service.ICoatingThicknessService;
import org.springblade.desk.basic.service.ICraftAbilityService;
import org.springblade.desk.basic.service.IMaterialQuotaService; import org.springblade.desk.basic.service.IMaterialQuotaService;
import org.springblade.desk.basic.service.IQualityGradeService;
import org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity; import org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity;
import org.springblade.desk.dashboard.service.*; import org.springblade.desk.dashboard.service.IBsPlatingService;
import org.springblade.desk.dashboard.service.IDsCraftService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsProcessService;
import org.springblade.desk.order.constant.PlateGoodsConst; import org.springblade.desk.order.constant.PlateGoodsConst;
import org.springblade.desk.order.mapper.PlateGoodsRecordMapper; import org.springblade.desk.order.mapper.PlateGoodsRecordMapper;
import org.springblade.desk.order.mapper.YieldOrderMapper;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord; import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail; import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
@ -27,13 +37,16 @@ import org.springblade.desk.order.pojo.enums.PlateGoodsEnum;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IPlateGoodsRecordDetailService; import org.springblade.desk.order.service.IPlateGoodsRecordDetailService;
import org.springblade.desk.order.service.IPlateGoodsRecordService; import org.springblade.desk.order.service.IPlateGoodsRecordService;
import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.scheduling.pojo.entity.CraftAbilityEntity;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
import org.springblade.system.cache.DictCache;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -43,16 +56,19 @@ import java.util.stream.Collectors;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
@Slf4j
public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecordMapper, PlateGoodsRecord> implements IPlateGoodsRecordService { public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecordMapper, PlateGoodsRecord> implements IPlateGoodsRecordService {
private final IPlateGoodsRecordDetailService detailService; private final IPlateGoodsRecordDetailService detailService;
private final IYieldOrderService yieldOrderService; private final YieldOrderMapper yieldOrderMapper;
private final IDsPartService dsPartService; private final IDsPartService dsPartService;
private final IBsPlatingService bsPlatingService; private final IBsPlatingService bsPlatingService;
private final ICoatingThicknessService coatingThicknessService; private final ICoatingThicknessService coatingThicknessService;
private final IDsCraftService dsCraftService; private final IDsCraftService dsCraftService;
private final IDsProcessService dsProcessService; private final IDsProcessService dsProcessService;
private final IMaterialQuotaService materialQuotaService; private final IMaterialQuotaService materialQuotaService;
private final ICraftAbilityService craftAbilityService;
private final IQualityGradeService qualityGradeService;
@Override @Override
public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord entity) { public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord entity) {
List<PlateGoodsRecord> dataList = baseMapper.selectPage(page, entity); List<PlateGoodsRecord> dataList = baseMapper.selectPage(page, entity);
@ -134,7 +150,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
List<Long> yieldOrderIds = detailList.stream().map(PlateGoodsRecordDetail::getYoId).collect(Collectors.toList()); List<Long> yieldOrderIds = detailList.stream().map(PlateGoodsRecordDetail::getYoId).collect(Collectors.toList());
// 再根据明细中的生产订单id查询订单 // 再根据明细中的生产订单id查询订单
List<YieldOrder> yieldOrderList = yieldOrderService.listByIds(yieldOrderIds); List<YieldOrder> yieldOrderList = yieldOrderMapper.selectByIds(yieldOrderIds);
return yieldOrderList; return yieldOrderList;
} }
@ -158,13 +174,221 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len);
} }
@Override
public boolean calculateCoatingMaterial(YieldOrder yieldOrder){
//零件号
String partCode=yieldOrder.getPartCode();
//零件版本
String partVersion=yieldOrder.getPartVersion();
//生产标识/质量等级
String productIdent=yieldOrder.getProductIdent();
//面积(㎡)
Double ypArea=yieldOrder.getYpArea();
//生产数量
Double ypQty=yieldOrder.getYpQty();
//计算单批面积(d㎡)
Double singleArea=ypArea*ypQty*100;
//大批量/小批量标志
int batchFlag=0;//大批量1;小批量0
//判断是否是大批量
if(singleArea>=30){
//是大批量
batchFlag=1;
}else{
//是小批量
batchFlag=0;
}
//根据零件号查询零件
DsPartEntity dsPart = dsPartService.selectDsPartByPatCodeAndVersion(partCode,partVersion);
if(null==dsPart){
return false;
}
//镀层物料编码
String plateGoodsCode=dsPart.getPlateGoodsCode();
//工艺能力
String abilityName = null;
//零件工序对应工艺能力类型是否包含镀金、镀银
boolean isContains = false;
//局部镀面积
double localArea = 0;
//查询零件工艺
DsCraftEntity dsCraftEntity = dsCraftService.selectDsCraftByPartCodeAndVersion(dsPart.getId(),partVersion);
//工艺表(DS_CRAFT)id
Long dsCraftId=dsCraftEntity.getId();
//查询生产工序列表
List<DsProcessEntity> dsProcessList=dsProcessService.selectDsProcessByCraftId(dsCraftId);
// 1. 空列表校验
if (CollectionUtils.isEmpty(dsProcessList)) {
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到生产工序信息");
this.updateYieldOrder(yieldOrder);
return false;
} else{
List<Long> caIdList = dsProcessList.stream().map(DsProcessEntity::getCaId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<CraftAbilityEntity> craftAbilityList = craftAbilityService.list(Wrappers.<CraftAbilityEntity>lambdaQuery().in(BaseEntity::getId,caIdList));
if(CollectionUtils.isEmpty(craftAbilityList)){
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到工艺能力信息");
this.updateYieldOrder(yieldOrder);
return false;
}else{
for(CraftAbilityEntity craftAbility : craftAbilityList){
if(StringUtils.isNotEmpty(craftAbility.getWxLimit())){
abilityName = DictCache.getValue("ProcessCapabilityType",craftAbility.getWxLimit());
if(abilityName.contains("镀金") || abilityName.contains("镀银")){
localArea = craftAbility.getLocalArea().doubleValue();
isContains = true;
break;
}
}
}
}
}
if(StringUtils.isNotEmpty(plateGoodsCode) && isContains){
Double h1 = dsPart.getPlateThickness();
Double h2 = dsPart.getPlateThicknessTwo();
Double s1 = dsPart.getArea();
Double s2 = dsPart.getAreaTwo();
boolean isLocal = false;
boolean isThickness = false;
//判断订单质量等级是否局部镀
QualityGradeEntity qualityGrade = qualityGradeService.getOne(Wrappers.<QualityGradeEntity>lambdaQuery().eq(QualityGradeEntity::getQualityGrade,productIdent));
if(qualityGrade != null){
if("1".equals(qualityGrade.getIsLocal())){
isLocal = true;
}
if("1".equals(qualityGrade.getIsThickness())){
isThickness = true;
}
}
if(h1 == null){
//根据配置码查询镀种信息
BsPlatingEntity bsPlatingEntity =bsPlatingService.selectBsPlatingConfigNo(dsPart.getConfigCode());
if(bsPlatingEntity == null){
log.info("配置码"+dsPart.getConfigCode()+"未查询到镀种信息");
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("配置码"+dsPart.getConfigCode()+"未查询到镀种信息");
this.updateYieldOrder(yieldOrder);
return false;
}
//镀层代码
String matCode=bsPlatingEntity.getMatCode();
//根据零件号、镀层代码、质量等级,从镀层厚度对应表中查询镀层厚度
int start_f21e8=0;
if(partCode.startsWith("21E8-210")){
start_f21e8=1;
}
CoatingThickness CoatingThickness=coatingThicknessService.queryCoatingThickness(matCode,productIdent,start_f21e8);
if(CoatingThickness == null){
log.info("零件"+partCode+"未找到对应的镀层厚度");
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("零件"+partCode+"未找到对应的镀层厚度");
this.updateYieldOrder(yieldOrder);
return false;
}
//镀层厚度
h1=CoatingThickness.getThickness().doubleValue();
}
double demand = 0;
//零件有镀金标识 && { 订单面积>工艺能力对应【局部镀订单面积】 || 订单质量等级为【局部镀】} --局部镀
if (CommonConstant.BOOLEAN_TRUE.equals(dsPart.getGoldMark()) && ((localArea != 0 && yieldOrder.getYpArea() > localArea) || isLocal)) {
double quota1 = 0;
double quota2 = 0;
if(isThickness){
h1 = Double.valueOf(DictCache.getKey("thickness","h1"));
}
if(h2 == null){
h2 = Double.valueOf(DictCache.getKey("thickness","h2"));
}
List<MaterialQuota> materialQuotaList1 = materialQuotaService.list(Wrappers.<MaterialQuota>lambdaQuery().eq(MaterialQuota::getQuotaType,1).eq(MaterialQuota::getThickness,h1));
List<MaterialQuota> materialQuotaList2 = materialQuotaService.list(Wrappers.<MaterialQuota>lambdaQuery().eq(MaterialQuota::getQuotaType,1).eq(MaterialQuota::getThickness,h2));
if(CollectionUtils.isEmpty(materialQuotaList1)){
log.info("镀层物料需求计算,镀金局部镀、镀层厚度"+h1+"未匹配到物料定额");
//将订单状态标记为数据异常,记录异常原因,并退出
this.updateYieldOrder(yieldOrder);
return false;
}
if(CollectionUtils.isEmpty(materialQuotaList2)){
log.info("镀层物料需求计算,镀金局部镀、镀层厚度"+h2+"未匹配到物料定额");
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("镀层物料需求计算,镀金局部镀、镀层厚度"+h2+"未匹配到物料定额");
this.updateYieldOrder(yieldOrder);
return false;
}
quota1 = materialQuotaList1.get(0).getLocalBatQuota().doubleValue();
quota2 = materialQuotaList2.get(0).getLocalBatQuota().doubleValue();
if(batchFlag == 0){
demand = (s2*yieldOrder.getYpQty()*quota1 + (s1-s2)*yieldOrder.getYpQty()*quota2)*0.2829*1.2;
}else{
demand = (s2*yieldOrder.getYpQty()*quota1 + (s1-s2)*yieldOrder.getYpQty()*quota2)*0.2829;
}
}else{
double quota = 0;
if(abilityName.contains("镀银")){
List<MaterialQuota> materialQuotaList = materialQuotaService.list(Wrappers.<MaterialQuota>lambdaQuery().eq(MaterialQuota::getQuotaType,2).eq(MaterialQuota::getThickness,h1));
if(CollectionUtils.isEmpty(materialQuotaList)){
log.info("镀层物料需求计算,镀银、镀层厚度"+h1+"未匹配到物料定额");
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("镀层物料需求计算,镀银、镀层厚度"+h1+"未匹配到物料定额");
this.updateYieldOrder(yieldOrder);
return false;
}
if(abilityName.contains("滚振镀银")){
quota = materialQuotaList.get(0).getQuota().doubleValue();
}else{
quota = materialQuotaList.get(0).getSmallBatQuota().doubleValue();
}
demand = singleArea*quota*0.105;
}else{
List<MaterialQuota> materialQuotaList = materialQuotaService.list(Wrappers.<MaterialQuota>lambdaQuery().eq(MaterialQuota::getQuotaType,1).eq(MaterialQuota::getThickness,String.valueOf(h1)));
if(CollectionUtils.isEmpty(materialQuotaList)){
log.info("镀层物料需求计算,镀金非局部镀、镀层厚度"+h1+"未匹配到物料定额");
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("镀层物料需求计算,镀金非局部镀、镀层厚度"+h1+"未匹配到物料定额");
this.updateYieldOrder(yieldOrder);
return false;
}
if(abilityName.contains("滚振镀金")){
quota = materialQuotaList.get(0).getQuota().doubleValue();
}else if(abilityName.contains("挂镀金")){
quota = materialQuotaList.get(0).getSmallBatQuota().doubleValue();
}else{
quota = materialQuotaList.get(0).getBigBatQuota().doubleValue();
}
if(batchFlag == 0){
demand = singleArea*quota*0.2829*1.2;
}else{
demand = singleArea*quota*0.2829;
}
}
}
//构建镀层物料需求申报对象, 调用保存方法,保存镀层物料需求申报
PlateGoodsRecord plateGoodsRecord=new PlateGoodsRecord();
plateGoodsRecord.setGoodsCode(plateGoodsCode);
plateGoodsRecord.setGoodsName(plateGoodsCode.equals(PlateGoodsConst.GOLD_POTASSIUM)?"氢化亚金钾":"氢化银钾");
plateGoodsRecord.setGoodsDemand(BigDecimal.valueOf(demand));
plateGoodsRecord.setDeclaredStatus((long) PlateGoodsEnum.STATUS_WAITING.getCode());
plateGoodsRecord.setWcId(yieldOrder.getWorkCenterId());
List<PlateGoodsRecordDetail> detailList=new ArrayList<>();
PlateGoodsRecordDetail plateGoodsRecordDetail=new PlateGoodsRecordDetail();
plateGoodsRecordDetail.setYoId(yieldOrder.getId());
this.save(plateGoodsRecord, detailList);
}else{
return true;
}
return true;
}
/** /**
* 生成订单-计算镀层物料 * 生成订单-计算镀层物料
* @param yieldOrder * @param yieldOrder
* @return * @return
*/ */
@Override public boolean calculateCoatingMaterial1(YieldOrder yieldOrder){
public boolean calculateCoatingMaterial(YieldOrder yieldOrder){
//零件号 //零件号
String partCode=yieldOrder.getPartCode(); String partCode=yieldOrder.getPartCode();
//零件版本 //零件版本
@ -230,6 +454,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
//未找到镀层厚度 //未找到镀层厚度
if(Func.isEmpty(thickness)){ if(Func.isEmpty(thickness)){
//将订单状态标记为数据异常,记录异常原因,并退出 //将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到镀层厚度信息");
this.updateYieldOrder(yieldOrder); this.updateYieldOrder(yieldOrder);
return false; return false;
}else{ }else{
@ -242,6 +467,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
// 1. 空列表校验 // 1. 空列表校验
if (CollectionUtils.isEmpty(dsProcessList)) { if (CollectionUtils.isEmpty(dsProcessList)) {
//将订单状态标记为数据异常,记录异常原因,并退出 //将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到生产工序信息");
this.updateYieldOrder(yieldOrder); this.updateYieldOrder(yieldOrder);
return false; return false;
} else{ } else{
@ -254,6 +480,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
//根据镀层厚度、工艺能力,到物料定额表中查询定额 //根据镀层厚度、工艺能力,到物料定额表中查询定额
MaterialQuota materialQuota=materialQuotaService.queryMaterialQuota(thickness,dsProcessId); MaterialQuota materialQuota=materialQuotaService.queryMaterialQuota(thickness,dsProcessId);
if(null==materialQuota){ if(null==materialQuota){
yieldOrder.setValidationMomo("为查询到物料定额");
this.updateYieldOrder(yieldOrder); this.updateYieldOrder(yieldOrder);
return false; return false;
} }
@ -262,6 +489,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
double quota = quotanew.doubleValue(); double quota = quotanew.doubleValue();
//未找到定额 //未找到定额
if(Func.isEmpty(quota)){ if(Func.isEmpty(quota)){
yieldOrder.setValidationMomo("未查询到物料定额");
this.updateYieldOrder(yieldOrder); this.updateYieldOrder(yieldOrder);
return false; return false;
}else{ }else{
@ -316,6 +544,6 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
public void updateYieldOrder(YieldOrder yieldOrder){ public void updateYieldOrder(YieldOrder yieldOrder){
yieldOrder.setStatus(YieldOrderEnum.STATUS_EXCEPTION.getCode()); yieldOrder.setStatus(YieldOrderEnum.STATUS_EXCEPTION.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrderService.updateById(yieldOrder); yieldOrderMapper.updateById(yieldOrder);
} }
} }

@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -17,42 +16,47 @@ import org.springblade.common.constant.CommonConstant;
import org.springblade.common.exception.BusinessException; import org.springblade.common.exception.BusinessException;
import org.springblade.common.utils.StringPrefixUtils; import org.springblade.common.utils.StringPrefixUtils;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.*; import org.springblade.core.tool.utils.*;
import org.springblade.desk.basic.service.IQualityGradeService;
import org.springblade.desk.dashboard.constant.DsCraftConstant; import org.springblade.desk.dashboard.constant.DsCraftConstant;
import org.springblade.desk.dashboard.constant.DsPartConstant; import org.springblade.desk.dashboard.constant.DsPartConstant;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity;
import org.springblade.desk.dashboard.pojo.enums.DsCraftEnum; import org.springblade.desk.dashboard.pojo.enums.DsCraftEnum;
import org.springblade.desk.dashboard.pojo.enums.PartCraftStatusEnum; import org.springblade.desk.dashboard.pojo.enums.PartCraftStatusEnum;
import org.springblade.desk.dashboard.pojo.vo.PartCraftVO; import org.springblade.desk.dashboard.pojo.vo.PartCraftVO;
import org.springblade.desk.dashboard.service.IDsCraftService; import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsProcessService;
import org.springblade.desk.logistics.pojo.entity.PrYieldOrder; import org.springblade.desk.logistics.pojo.entity.PrYieldOrder;
import org.springblade.desk.logistics.service.IPrYieldOrderService; import org.springblade.desk.logistics.service.IPrYieldOrderService;
import org.springblade.desk.order.constant.YieldOrderConst; import org.springblade.desk.order.constant.YieldOrderConst;
import org.springblade.desk.order.mapper.MoldDemandMapper;
import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.mapper.YieldOrderMapper;
import org.springblade.desk.order.mapper.YieldPlanMapper; import org.springblade.desk.order.mapper.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft; import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.MoldDemandEnum;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.vo.LineMemoVo; import org.springblade.desk.order.pojo.vo.LineMemoVo;
import org.springblade.desk.order.service.IPlateGoodsRecordService;
import org.springblade.desk.order.service.IYieldOrderCraftService; import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper; import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.erpdata.feign.IErpYieldOrderClient; import org.springblade.erpdata.feign.IErpYieldOrderClient;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/** /**
* 服务实现类 * 服务实现类
@ -77,6 +81,13 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
private final IErpYieldOrderClient yieldOrderClient; private final IErpYieldOrderClient yieldOrderClient;
private final IPrYieldOrderService yieldOrderService; private final IPrYieldOrderService yieldOrderService;
private final IQualityGradeService qualityGradeService;
private final IDsPartRelationService partRelationService;
private final IDsPartVersionService partVersionService;
private final MoldDemandMapper moldDemandMapper;
private final IPlateGoodsRecordService plateGoodsRecordService;
@Value("${business.oldMes.url}") @Value("${business.oldMes.url}")
private String oldMesUrl; private String oldMesUrl;
@Value("${business.oldMes.syncOrderList}") @Value("${business.oldMes.syncOrderList}")
@ -168,31 +179,33 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
continue; continue;
} }
// 进行资源校验,验证不通过,不进行后续验证,直接返回; // 进行资源校验,验证不通过,不进行后续验证,直接返回;
log.info("进行资源校验,验证不通过,不进行后续验证,直接返回;"); // log.info("进行资源校验,验证不通过,不进行后续验证,直接返回;");
if (!this.verifyYieldOrderResource(yieldOrder)) { // if (!this.verifyYieldOrderResource(yieldOrder)) {
continue; // continue;
} // }
// 最后进行超期校验 // 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder); // this.verifyYieldOrderDelivery(yieldOrder);
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) { } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) {
// 进行工艺校验,验证不通过,不进行后续验证,直接返回; // 进行工艺校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderCraft(yieldOrder)) { if (!this.verifyYieldOrderCraft(yieldOrder)) {
continue; continue;
} }
// 进行资源校验,验证不通过,不进行后续验证,直接返回; // 进行资源校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderResource(yieldOrder)) { // if (!this.verifyYieldOrderResource(yieldOrder)) {
continue; // continue;
} // }
// 最后进行超期校验 // 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder); // this.verifyYieldOrderDelivery(yieldOrder);
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) { } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) {
// 进行资源校验,验证不通过,不进行后续验证,直接返回; // 进行资源校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderResource(yieldOrder)) { // if (!this.verifyYieldOrderResource(yieldOrder)) {
continue; // continue;
} // }
// 最后进行超期校验 // 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder); // this.verifyYieldOrderDelivery(yieldOrder);
} }
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode());
this.updateById(yieldOrder);
} }
return "校验成功"; return "校验成功";
@ -201,13 +214,14 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override @Override
public boolean confirmBatch(List<Long> ids) { public boolean confirmBatch(List<Long> ids) {
List<YieldOrder> yieldOrderList = new ArrayList<>(); List<YieldOrder> yieldOrderList = new ArrayList<>();
for(Long id : ids){
ids.forEach(id -> { YieldOrder yieldOrder = this.getById(id);
YieldOrder yieldOrder = new YieldOrder(); if (!this.verifyYieldOrderResource(yieldOrder)) {
yieldOrder.setId(id); return false;
}
yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode());
yieldOrderList.add(yieldOrder); yieldOrderList.add(yieldOrder);
}); }
return this.updateBatchById(yieldOrderList); return this.updateBatchById(yieldOrderList);
} }
@ -249,7 +263,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return false; return false;
} }
String roamNoText = dsPartService.findNameByRoamNo(yieldOrder.getPartCode(), yieldOrder.getRoamNo()); String roamNoText = yieldOrder.getRoamNoNext();
if (StringUtils.isBlank(roamNoText)) { if (StringUtils.isBlank(roamNoText)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now()); yieldOrder.setValidationTime(DateUtil.now());
@ -282,8 +296,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
.eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) .eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE)
.eq(YieldOrder::getYoCode, yieldOrder.getYoCode()) .eq(YieldOrder::getYoCode, yieldOrder.getYoCode())
.ne(YieldOrder::getId, yieldOrder.getId()); .ne(YieldOrder::getId, yieldOrder.getId());
YieldOrder yieldOrderCheck = baseMapper.selectOne(wrapper); List<YieldOrder> yieldOrderCheckList = baseMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(yieldOrderCheck)) { if (CollectionUtils.isNotEmpty(yieldOrderCheckList)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now()); yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("已存在该流程卡号的数据"); yieldOrder.setValidationMomo("已存在该流程卡号的数据");
@ -346,7 +360,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
} }
String rankStr = rank == null ? null : String.valueOf(rank); String rankStr = rank == null ? null : String.valueOf(rank);
log.info("工艺传参零件号:{},{},{}",partCode,roamNo,rankStr); log.info("工艺传参零件号:{},{},{}",partCode,roamNo,rankStr);
PartCraftVO craftVO = dsPartService.selectPartCraft(partCode, roamNo, rankStr, null); PartCraftVO craftVO = dsPartService.selectPartCraft(yieldOrder, partCode, roamNo, rankStr, null);
log.info("工艺返回:{}",craftVO != null); log.info("工艺返回:{}",craftVO != null);
if (ObjectUtil.isEmpty(craftVO) || PartCraftStatusEnum.SUCCESS.getCode() != craftVO.getCode()) { if (ObjectUtil.isEmpty(craftVO) || PartCraftStatusEnum.SUCCESS.getCode() != craftVO.getCode()) {
@ -362,8 +376,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
DsPartEntity part = dsPartService.getById(craft.getPartId()); DsPartEntity part = dsPartService.getById(craft.getPartId());
//石墨模不参与验证 //石墨模不参与验证
if (!YieldOrderEnum.YIELD_TYPE_2.equals(yieldOrder.getYieldType()) if (YieldOrderEnum.YIELD_TYPE_2.getCode() != yieldOrder.getYieldType()
&& !YieldOrderEnum.YIELD_TYPE_6.equals(yieldOrder.getYieldType()) && ObjectUtil.isEmpty(part.getArea())) { && YieldOrderEnum.YIELD_TYPE_6.getCode() != yieldOrder.getYieldType() && ObjectUtil.isEmpty(part.getArea())) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now()); yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("零件面积为空,工艺匹配失败,请联系工艺员!"); yieldOrder.setValidationMomo("零件面积为空,工艺匹配失败,请联系工艺员!");
@ -403,11 +417,54 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList); boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList);
log.info("添加数据返回结果:{}",saveBatch); log.info("添加数据返回结果:{}",saveBatch);
} }
//镀层物料需求
if(YieldOrderEnum.YIELD_TYPE_1.getCode() == yieldOrder.getYieldType()){
boolean result = plateGoodsRecordService.calculateCoatingMaterial(yieldOrder);
if(!result){
return false;
}
}
// 生成子件订单 // 生成子件订单
createSubOrder(yieldOrder); createSubOrder(yieldOrder);
//部件生产订单获取石墨模生成烧结磨具计划,玻璃饼订单获取压饼模生成烧结磨具计划
// TODO 生成模具计划 if(YieldOrderEnum.YIELD_TYPE_2.getCode() == yieldOrder.getYieldType()){
// TODO 生成物料需求 List<DsPartEntity> subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(),yieldOrder.getPartVersion());
if(CollectionUtils.isNotEmpty(subPartList)){
for(DsPartEntity subPart : subPartList){
if(DsPartConstant.SIN_TER_TYPE_SMM == subPart.getSinTerType() && subPart.getQuota() != 0){
MoldDemand moldDemand = new MoldDemand();
moldDemand.setMoCode(null);
moldDemand.setPartCode(subPart.getPartCode());
moldDemand.setPartName(subPart.getPartName());
moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty());
moldDemand.setLinkOrderIds(yieldOrder.getId().toString());
moldDemand.setStatus(MoldDemandEnum.STATUS_WAITING.getCode());
moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode());
moldDemand.setNeedDate(yieldOrder.getDemandDate());
moldDemand.setQuaLevel(yieldOrder.getProductIdent());
moldDemandMapper.insert(moldDemand);
}
}
}
}else if(YieldOrderEnum.YIELD_TYPE_3.getCode() == yieldOrder.getYieldType()){
List<DsProcessMoldToolEntity> processMoldToolList = dsPartService.getClassCakeWork(yieldOrder.getPartCode(),yieldOrder.getRoamNo(),yieldOrder.getPartVersion());
if(CollectionUtils.isNotEmpty(processMoldToolList)){
MoldDemand moldDemand = new MoldDemand();
moldDemand.setMoCode(null);
moldDemand.setPartCode(yieldOrder.getPartCode());
moldDemand.setPartName(yieldOrder.getPartName());
moldDemand.setDemandNum(yieldOrder.getYpQty());
moldDemand.setToolCode(processMoldToolList.get(0).getMoldCode());
moldDemand.setToolName(processMoldToolList.get(0).getMoldName());
moldDemand.setLinkOrderIds(yieldOrder.getId().toString());
moldDemand.setStatus(MoldDemandEnum.STATUS_WAITING.getCode());
moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode());
moldDemand.setNeedDate(yieldOrder.getDemandDate());
moldDemand.setQuaLevel(yieldOrder.getProductIdent());
moldDemandMapper.insert(moldDemand);
}
}
return Boolean.TRUE; return Boolean.TRUE;
} }
@ -438,18 +495,25 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override @Override
public void saveSubYieldOrder(YieldOrder yieldOrder, Boolean isManual, Long receiveUser) throws BusinessException { public void saveSubYieldOrder(YieldOrder yieldOrder, Boolean isManual, Long receiveUser) throws BusinessException {
// 验证是否存在玻璃饼子件信息 // 验证是否存在玻璃饼子件信息
this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_BLB, "玻璃饼"); // this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_BLB, "玻璃饼");
//查询所有的烧结子件清单 //查询所有的烧结子件清单
List<DsPartEntity> subList = new ArrayList<>(); // List<DsPartEntity> subList = new ArrayList<>();
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_SMM, "石墨模")); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_SMM, "石墨模"));
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_KT, "壳体")); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_KT, "壳体"));
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_CZ, "插针")); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_CZ, "插针"));
DsPartVersionEntity partVersion = partVersionService.getOne(Wrappers.<DsPartVersionEntity>lambdaQuery()
.eq(DsPartVersionEntity::getPartCode,yieldOrder.getPartCode())
.eq(DsPartVersionEntity::getPartVersion,yieldOrder.getPartVersion()));
List<DsPartRelationEntity> partRelationList = partRelationService.list(Wrappers.<DsPartRelationEntity>lambdaQuery().eq(DsPartRelationEntity::getPartId,partVersion.getPartId()));
List<Long> childPartIdList = partRelationList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList());
List<DsPartEntity> subList = dsPartService.list(Wrappers.<DsPartEntity>lambdaQuery().in(BaseEntity::getId,childPartIdList));
if (subList.size() == 0) { if (subList.size() == 0) {
throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!"); throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!");
} }
//获取已经产生的烧结子件清单 //获取已经产生的烧结子件清单
List<YieldOrder> subYieldOrderList = this.listByFatherYoId(yieldOrder.getFatherYoId()); List<YieldOrder> subYieldOrderList = this.listByFatherYoId(yieldOrder.getId());
List<String> keyLst = new ArrayList<>(); List<String> keyLst = new ArrayList<>();
List<DsPartEntity> returnList = new ArrayList<>(); List<DsPartEntity> returnList = new ArrayList<>();
if (subYieldOrderList.size() > 0) { if (subYieldOrderList.size() > 0) {
@ -935,6 +999,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
*/ */
private void createSubYieldOrder(YieldOrder yieldOrder, List<DsPartEntity> subList, Boolean isManual, Long receiveUser) throws BusinessException { private void createSubYieldOrder(YieldOrder yieldOrder, List<DsPartEntity> subList, Boolean isManual, Long receiveUser) throws BusinessException {
List<DsCraftEntity> dsCraftList; List<DsCraftEntity> dsCraftList;
List<Long> idList = new ArrayList<>();
for (DsPartEntity dsPartSub : subList) { for (DsPartEntity dsPartSub : subList) {
//如果子件号为空或者是无,则跳过 //如果子件号为空或者是无,则跳过
if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) { if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) {
@ -968,7 +1033,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
//获取金属件子件B号,如果未获取到,提示异常 //获取金属件子件B号,如果未获取到,提示异常
String roamNo = null; String roamNo = null;
if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType()) || DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) { if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType()) || DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) {
roamNo = dsPartService.findRoamNoByPartCode(dsPartSub.getPartCode()); roamNo = yieldOrderClient.getChildRoamNoByPartCode(dsPartSub.getPartCode());
if (StringUtils.isBlank(roamNo)) { if (StringUtils.isBlank(roamNo)) {
String errMsg = MessageFormat.format("子件{}未找到对应B号,请在ERP核查子件一级路线!", dsPartSub.getPartCode()); String errMsg = MessageFormat.format("子件{}未找到对应B号,请在ERP核查子件一级路线!", dsPartSub.getPartCode());
throw new BusinessException(errMsg); throw new BusinessException(errMsg);
@ -1008,6 +1073,13 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
subYield.setMemo("手动创建子件"); subYield.setMemo("手动创建子件");
} }
this.save(subYield); this.save(subYield);
idList.add(subYield.getId());
}
if(CollectionUtils.isNotEmpty(idList)){
//生成的烧结子订单也需要进行合规性校验,另起线程异步执行
CompletableFuture.runAsync(() -> {
this.dataVerify(idList);
});
} }
} }
@ -1110,7 +1182,9 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
*/ */
private Integer judgeRank(YieldOrder yieldOrder) { private Integer judgeRank(YieldOrder yieldOrder) {
DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion());
if(part == null){
throw new ServiceException("未查询到零件信息!");
}
// 工作订单备注中包含大小写的HTBY时,执行二级工艺 // 工作订单备注中包含大小写的HTBY时,执行二级工艺
if (yieldOrder.getYpMemo() != null && yieldOrder.getYpMemo().toLowerCase(Locale.ROOT).contains("htby")) { if (yieldOrder.getYpMemo() != null && yieldOrder.getYpMemo().toLowerCase(Locale.ROOT).contains("htby")) {
return DsCraftEnum.RANK_TWO.getCode(); return DsCraftEnum.RANK_TWO.getCode();
@ -1119,21 +1193,29 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
// 判定是否为镀金零件 // 判定是否为镀金零件
if (CommonConstant.BOOLEAN_TRUE.equals(part.getGoldMark())) { if (CommonConstant.BOOLEAN_TRUE.equals(part.getGoldMark())) {
// 获取零件工艺级别面积判定值 // 获取零件工艺级别面积判定值
Integer levConfirmVal = 20; // Integer levConfirmVal = 20;
if (levConfirmVal != null) { // if (levConfirmVal != null) {
// 计算生产订单总面积 // // 计算生产订单总面积
Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty(); // Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty();
//
if (totalArea > levConfirmVal) { // if (totalArea > levConfirmVal) {
return DsCraftEnum.RANK_ONE.getCode(); // return DsCraftEnum.RANK_ONE.getCode();
} else { // } else {
// if (Func.isNotEmpty(yieldOrder.getProductIdent())) {
// // 若局部镀质量等级存在, 返回一级工艺
// return DsCraftEnum.RANK_ONE.getCode();
// }
// }
// }
if (Func.isNotEmpty(yieldOrder.getProductIdent())) { if (Func.isNotEmpty(yieldOrder.getProductIdent())) {
//根据订单的质量等级去质量等级表查询是否局部镀
QualityGradeEntity qualityGrade = qualityGradeService.getOne(Wrappers.<QualityGradeEntity>lambdaQuery().eq(QualityGradeEntity::getQualityGrade,yieldOrder.getProductIdent()));
if(qualityGrade != null && "1".equals(qualityGrade.getIsLocal())){
// 若局部镀质量等级存在, 返回一级工艺 // 若局部镀质量等级存在, 返回一级工艺
return DsCraftEnum.RANK_ONE.getCode(); return DsCraftEnum.RANK_ONE.getCode();
} }
} }
} }
}
// 获取零件配置码 // 获取零件配置码
String configNo = part.getConfigCode(); String configNo = part.getConfigCode();

@ -28,7 +28,6 @@ package org.springblade.desk.process.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
@ -50,7 +49,6 @@ import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -173,7 +171,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
Boolean isOk = Boolean.TRUE; Boolean isOk = Boolean.TRUE;
if (fmProjectMilestoneList != null && fmProjectMilestoneList.size() > 0) { if (fmProjectMilestoneList != null && fmProjectMilestoneList.size() > 0) {
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) { for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) {
if (projectMilestone.getGrade().equals(FmProjectMilestoneEntity.GRADE_NO)) { if (FmProjectMilestoneEntity.GRADE_NO.equals(projectMilestone.getGrade())) {
isOk = Boolean.FALSE; isOk = Boolean.FALSE;
} }
} }

@ -28,4 +28,9 @@ public class ErpYieldOrderClientImpl implements IErpYieldOrderClient {
public void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate, String planUser, String ypCode, Long poQty, String partCode, Double quota) { public void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate, String planUser, String ypCode, Long poQty, String partCode, Double quota) {
erpYieldOrderService.saveGlassCake(yoCode, cardNo, batchNo, prodIdent, demandDate, planUser, ypCode, poQty, partCode, quota); erpYieldOrderService.saveGlassCake(yoCode, cardNo, batchNo, prodIdent, demandDate, planUser, ypCode, poQty, partCode, quota);
} }
@Override
public String getChildRoamNoByPartCode(String partCode) {
return erpYieldOrderService.getChildRoamNoByPartCode(partCode);
}
} }

@ -18,4 +18,6 @@ public interface ErpYieldOrderMapper extends Mapper {
*/ */
void saveGlassCake(Map<String, Object> params); void saveGlassCake(Map<String, Object> params);
String getChildRoamNoByPartCode(String partCode);
} }

@ -27,4 +27,23 @@
#{v_use_deptcode, mode=IN, jdbcType=VARCHAR} #{v_use_deptcode, mode=IN, jdbcType=VARCHAR}
)} )}
</select> </select>
<select id = "getChildRoamNoByPartCode" resultType = "java.lang.String">
SELECT
b.firseq
FROM
(
SELECT
a.*
FROM
dba_mgr.v_mes_rb_partoplink
WHERE
a.prtno = #{partCode}
AND a.firseqname NOT LIKE '库%'
ORDER BY
a.firseqno DESC
) b
WHERE
ROWNUM =1
</select>
</mapper> </mapper>

@ -26,4 +26,6 @@ public interface IErpYieldOrderService {
*/ */
void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate, void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate,
String planUser, String ypCode, Long poQty, String partCode, Double quota); String planUser, String ypCode, Long poQty, String partCode, Double quota);
String getChildRoamNoByPartCode(String partCode);
} }

@ -4,11 +4,9 @@ import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.order.feign.IApsOrderClient; import org.springblade.desk.order.feign.IApsOrderClient;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
@ -16,17 +14,17 @@ import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.desk.order.pojo.enums.YieldPlanEnum;
import org.springblade.erpdata.mapper.ErpMesRbWoMapper; import org.springblade.erpdata.mapper.ErpMesRbWoMapper;
import org.springblade.erpdata.pojo.dto.table.Rrbwoerptomes;
import org.springblade.erpdata.pojo.dto.table.Wo; import org.springblade.erpdata.pojo.dto.table.Wo;
import org.springblade.erpdata.pojo.dto.view.*; import org.springblade.erpdata.pojo.dto.view.*;
import org.springblade.erpdata.service.*; import org.springblade.erpdata.service.*;
import org.springblade.system.cache.DictCache;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.ArrayList;
import java.util.stream.Collectors; import java.util.Arrays;
import java.util.Date;
import java.util.List;
/** /**
* @author lqk * @author lqk
@ -300,6 +298,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbPurtoso.getPrtno(),mesRbPurtoso.getFirseq()); yieldOrder = updateYieldType(yieldOrder,mesRbPurtoso.getPrtno(),mesRbPurtoso.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno()); /*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno());
//若零件不为空,查询零件的工艺路线 //若零件不为空,查询零件的工艺路线
@ -364,6 +363,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
DsPartEntity part = apsOrderClient.getDsCraftListByCode(mesRbPacturnrecord.getPrtno()); DsPartEntity part = apsOrderClient.getDsCraftListByCode(mesRbPacturnrecord.getPrtno());
if(part != null && part.getCraftWay() != null && part.getCraftWay().contains("封接")){ if(part != null && part.getCraftWay() != null && part.getCraftWay().contains("封接")){
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
@ -423,6 +423,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder.setRoamNoNext( ""); yieldOrder.setRoamNoNext( "");
if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){ if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq());
@ -477,6 +478,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbWxpromotion.getPrtno(),mesRbWxpromotion.getFirseq()); yieldOrder = updateYieldType(yieldOrder,mesRbWxpromotion.getPrtno(),mesRbWxpromotion.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno()); /*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno());
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
@ -539,6 +541,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbSodelrecwx.getPrtno(),mesRbSodelrecwx.getFirseq()); yieldOrder = updateYieldType(yieldOrder,mesRbSodelrecwx.getPrtno(),mesRbSodelrecwx.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno()); /*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno());
if(CollectionUtils.isNotEmpty(dsPartList)&&dsPartList.get(0).getCraftWay().contains("封接")){ if(CollectionUtils.isNotEmpty(dsPartList)&&dsPartList.get(0).getCraftWay().contains("封接")){
@ -604,6 +607,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); yieldOrder = updateYieldType(yieldOrder,mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq());
/*//从零件表中查询零件信息 /*//从零件表中查询零件信息
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno()); List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno());
@ -675,6 +679,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L); yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode()); yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder.setRoamNoNext(""); yieldOrder.setRoamNoNext("");
if(StringUtils.isNotEmpty(mesRbPk.getFirseq())){ if(StringUtils.isNotEmpty(mesRbPk.getFirseq())){
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPk.getPrtno(),mesRbPk.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPk.getPrtno(),mesRbPk.getFirseq());

@ -55,4 +55,9 @@ public class ErpYieldOrderServiceImpl implements IErpYieldOrderService {
paramMap.put("v_yo_qty", quota * poQty); paramMap.put("v_yo_qty", quota * poQty);
yieldOrderMapper.saveGlassCake(paramMap); yieldOrderMapper.saveGlassCake(paramMap);
} }
@Override
public String getChildRoamNoByPartCode(String partCode) {
return yieldOrderMapper.getChildRoamNoByPartCode(partCode);
}
} }

@ -54,17 +54,15 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool; import org.springblade.core.tool.utils.StringPool;
import org.springblade.desk.basic.feign.IWorkCenterClient; import org.springblade.desk.basic.feign.IWorkCenterClient;
import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.system.config.RoleConfig;
import org.springblade.system.excel.UserExcel; import org.springblade.system.excel.UserExcel;
import org.springblade.system.excel.UserImporter; import org.springblade.system.excel.UserImporter;
import org.springblade.system.pojo.entity.Post; import org.springblade.system.pojo.entity.Post;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.vo.PostVO;
import org.springblade.system.pojo.vo.UserVO; import org.springblade.system.pojo.vo.UserVO;
import org.springblade.system.service.IPostService; import org.springblade.system.service.IPostService;
import org.springblade.system.service.IUserExtService; import org.springblade.system.service.IUserExtService;
import org.springblade.system.service.IUserService; import org.springblade.system.service.IUserService;
import org.springblade.system.config.RoleConfig;
import org.springblade.system.wrapper.PostWrapper;
import org.springblade.system.wrapper.UserWrapper; import org.springblade.system.wrapper.UserWrapper;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -208,8 +206,8 @@ public class UserController {
}) })
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@Operation(summary = "列表", description = "传入account和realName") @Operation(summary = "列表", description = "传入account和realName")
public R<IPage<UserVO>> page(@Parameter(hidden = true) User user, Query query, Long deptId, BladeUser bladeUser) { public R<IPage<UserVO>> page(@Parameter(hidden = true) User user, Query query, Long deptId, BladeUser bladeUser, String ids) {
IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId())); IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()), ids);
return R.data(UserWrapper.build().pageVO(pages)); return R.data(UserWrapper.build().pageVO(pages));
// IPage<UserVO> pages = userService.selectUserPageVo(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId())); // IPage<UserVO> pages = userService.selectUserPageVo(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
// return R.data(pages); // return R.data(pages);

@ -51,7 +51,7 @@ public interface UserMapper extends BaseMapper<User> {
* @param tenantId * @param tenantId
* @return * @return
*/ */
List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId); List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId,@Param("idList") List<Long> idList);
List<UserVO> selectUserPageVo(IPage<UserVO> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId); List<UserVO> selectUserPageVo(IPage<UserVO> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);

@ -103,6 +103,12 @@
</foreach> </foreach>
) )
</if> </if>
<if test="idList!=null and idList.size>0">
and id in
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
ORDER BY id ORDER BY id
</select> </select>

@ -79,7 +79,7 @@ public interface IUserService extends BaseService<User> {
* @param tenantId * @param tenantId
* @return * @return
*/ */
IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId); IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId,String ids);
IPage<UserVO> selectUserPageVo(IPage<UserVO> page, User user, Long deptId, String tenantId); IPage<UserVO> selectUserPageVo(IPage<UserVO> page, User user, Long deptId, String tenantId);

@ -28,10 +28,10 @@ package org.springblade.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.CacheNames; import org.springblade.common.cache.CacheNames;
import org.springblade.common.constant.CommonConstant; import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.TenantConstant; import org.springblade.common.constant.TenantConstant;
@ -66,10 +66,8 @@ import org.springblade.system.wrapper.UserWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.Collections; import java.util.stream.Collectors;
import java.util.List;
import java.util.Objects;
import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD; import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE; import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
@ -187,9 +185,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
} }
@Override @Override
public IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId) { public IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId,String ids) {
List<Long> idList = null;
if(StringUtils.isNotEmpty(ids)){
idList = Arrays.stream(ids.split(",")).map(String::trim).map(Long::valueOf).collect(Collectors.toList());
}
List<Long> deptIdList = SysCache.getDeptChildIds(deptId); List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId)); return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId,idList));
} }
@Override @Override

Loading…
Cancel
Save