功能开发-sjx

liweidong
sunjianxi 3 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. 186
      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 = "厂内应分比例")
private Double inFactoryPercent;
}

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

@ -22,6 +22,7 @@ public interface IErpYieldOrderClient {
String API_PREFIX = "/feign/erp/yieldOrder";
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("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) {
}
@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.query.LambdaQueryWrapper;
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.Wrappers;
import jakarta.annotation.Resource;
@ -68,10 +69,12 @@ public class BatConfigServiceImpl extends BaseServiceImpl<BatConfigMapper, BatCo
.eq(BatConfig::getCaId, hostCaId)
.eq(partIsNotBlank, BatConfig::getPartCode, part)
.le(partIsNotBlank, BatConfig::getSingletonArea, singletonArea)
.orderByDesc(BatConfig::getSingletonArea)
.last("LIMIT 1");
.orderByDesc(BatConfig::getSingletonArea);
BatConfig batConfig = baseMapper.selectOne(wrapper);
return batConfig;
List<BatConfig> batConfigList = baseMapper.selectList(wrapper);
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.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
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.mapper.WorkCenterMapper;
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.vo.WorkCenterVO;
import org.springblade.desk.basic.service.IBatConfigService;
@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* [作业中心] 服务实现类
@ -62,14 +61,12 @@ public class WorkCenterServiceImpl extends BaseServiceImpl<WorkCenterMapper, Wor
@Override
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;
}
List<Long> companyIdList = abilityList.stream().map(OemCraftAbilityEntity::getOtherId).collect(Collectors.toList());
List<WorkCenter> workCenterList = this.listByIds(companyIdList);
Double area = ypQty * ypArea;
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.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import java.util.List;
@ -250,7 +251,7 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
* @param partVersion 版本号
* @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;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.CommonConstant;
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.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
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.service.IMesNotifyMessageService;
import org.springblade.desk.dashboard.constant.TaskingConstant;
import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.mapper.DsPartMapper;
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.vo.*;
import org.springblade.desk.dashboard.service.*;
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.scheduling.pojo.entity.CraftAbilityEntity;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
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.StringUtils;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@ -85,6 +92,10 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
@Autowired
IDsPartVersionService partVersionService;
@Autowired
ICraftAbilityService craftAbilityService;
private static IErpDataPartClient erpDataPartClient;
private static IErpDataPartClient getErpDataPartClient() {
@ -635,7 +646,7 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
}
@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)) {
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());
}
// 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);
}

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

@ -2,8 +2,12 @@ package org.springblade.desk.order.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.utils.StringPrefixUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
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.MaterialQuota;
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.IQualityGradeService;
import org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
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.mapper.PlateGoodsRecordMapper;
import org.springblade.desk.order.mapper.YieldOrderMapper;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail;
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.service.IPlateGoodsRecordDetailService;
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.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -43,16 +56,19 @@ import java.util.stream.Collectors;
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecordMapper, PlateGoodsRecord> implements IPlateGoodsRecordService {
private final IPlateGoodsRecordDetailService detailService;
private final IYieldOrderService yieldOrderService;
private final YieldOrderMapper yieldOrderMapper;
private final IDsPartService dsPartService;
private final IBsPlatingService bsPlatingService;
private final ICoatingThicknessService coatingThicknessService;
private final IDsCraftService dsCraftService;
private final IDsProcessService dsProcessService;
private final IMaterialQuotaService materialQuotaService;
private final ICraftAbilityService craftAbilityService;
private final IQualityGradeService qualityGradeService;
@Override
public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord 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());
// 再根据明细中的生产订单id查询订单
List<YieldOrder> yieldOrderList = yieldOrderService.listByIds(yieldOrderIds);
List<YieldOrder> yieldOrderList = yieldOrderMapper.selectByIds(yieldOrderIds);
return yieldOrderList;
}
@ -158,13 +174,221 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
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
* @return
*/
@Override
public boolean calculateCoatingMaterial(YieldOrder yieldOrder){
public boolean calculateCoatingMaterial1(YieldOrder yieldOrder){
//零件号
String partCode=yieldOrder.getPartCode();
//零件版本
@ -230,6 +454,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
//未找到镀层厚度
if(Func.isEmpty(thickness)){
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到镀层厚度信息");
this.updateYieldOrder(yieldOrder);
return false;
}else{
@ -242,6 +467,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
// 1. 空列表校验
if (CollectionUtils.isEmpty(dsProcessList)) {
//将订单状态标记为数据异常,记录异常原因,并退出
yieldOrder.setValidationMomo("未查询到生产工序信息");
this.updateYieldOrder(yieldOrder);
return false;
} else{
@ -254,6 +480,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
//根据镀层厚度、工艺能力,到物料定额表中查询定额
MaterialQuota materialQuota=materialQuotaService.queryMaterialQuota(thickness,dsProcessId);
if(null==materialQuota){
yieldOrder.setValidationMomo("为查询到物料定额");
this.updateYieldOrder(yieldOrder);
return false;
}
@ -262,6 +489,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
double quota = quotanew.doubleValue();
//未找到定额
if(Func.isEmpty(quota)){
yieldOrder.setValidationMomo("未查询到物料定额");
this.updateYieldOrder(yieldOrder);
return false;
}else{
@ -316,6 +544,6 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
public void updateYieldOrder(YieldOrder yieldOrder){
yieldOrder.setStatus(YieldOrderEnum.STATUS_EXCEPTION.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.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.utils.StringPrefixUtils;
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.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
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.DsPartConstant;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity;
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.vo.PartCraftVO;
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.dashboard.service.*;
import org.springblade.desk.logistics.pojo.entity.PrYieldOrder;
import org.springblade.desk.logistics.service.IPrYieldOrderService;
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.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
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.vo.LineMemoVo;
import org.springblade.desk.order.service.IPlateGoodsRecordService;
import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.erpdata.feign.IErpYieldOrderClient;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.MessageFormat;
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 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}")
private String oldMesUrl;
@Value("${business.oldMes.syncOrderList}")
@ -168,31 +179,33 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
continue;
}
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
log.info("进行资源校验,验证不通过,不进行后续验证,直接返回;");
if (!this.verifyYieldOrderResource(yieldOrder)) {
continue;
}
// log.info("进行资源校验,验证不通过,不进行后续验证,直接返回;");
// if (!this.verifyYieldOrderResource(yieldOrder)) {
// continue;
// }
// 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder);
// this.verifyYieldOrderDelivery(yieldOrder);
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) {
// 进行工艺校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderCraft(yieldOrder)) {
continue;
}
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderResource(yieldOrder)) {
continue;
}
// if (!this.verifyYieldOrderResource(yieldOrder)) {
// continue;
// }
// 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder);
// this.verifyYieldOrderDelivery(yieldOrder);
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) {
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
if (!this.verifyYieldOrderResource(yieldOrder)) {
continue;
}
// if (!this.verifyYieldOrderResource(yieldOrder)) {
// continue;
// }
// 最后进行超期校验
this.verifyYieldOrderDelivery(yieldOrder);
// this.verifyYieldOrderDelivery(yieldOrder);
}
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode());
this.updateById(yieldOrder);
}
return "校验成功";
@ -201,13 +214,14 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override
public boolean confirmBatch(List<Long> ids) {
List<YieldOrder> yieldOrderList = new ArrayList<>();
ids.forEach(id -> {
YieldOrder yieldOrder = new YieldOrder();
yieldOrder.setId(id);
for(Long id : ids){
YieldOrder yieldOrder = this.getById(id);
if (!this.verifyYieldOrderResource(yieldOrder)) {
return false;
}
yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode());
yieldOrderList.add(yieldOrder);
});
}
return this.updateBatchById(yieldOrderList);
}
@ -249,7 +263,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return false;
}
String roamNoText = dsPartService.findNameByRoamNo(yieldOrder.getPartCode(), yieldOrder.getRoamNo());
String roamNoText = yieldOrder.getRoamNoNext();
if (StringUtils.isBlank(roamNoText)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now());
@ -282,8 +296,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
.eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE)
.eq(YieldOrder::getYoCode, yieldOrder.getYoCode())
.ne(YieldOrder::getId, yieldOrder.getId());
YieldOrder yieldOrderCheck = baseMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(yieldOrderCheck)) {
List<YieldOrder> yieldOrderCheckList = baseMapper.selectList(wrapper);
if (CollectionUtils.isNotEmpty(yieldOrderCheckList)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("已存在该流程卡号的数据");
@ -346,7 +360,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
}
String rankStr = rank == null ? null : String.valueOf(rank);
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);
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());
//石墨模不参与验证
if (!YieldOrderEnum.YIELD_TYPE_2.equals(yieldOrder.getYieldType())
&& !YieldOrderEnum.YIELD_TYPE_6.equals(yieldOrder.getYieldType()) && ObjectUtil.isEmpty(part.getArea())) {
if (YieldOrderEnum.YIELD_TYPE_2.getCode() != yieldOrder.getYieldType()
&& YieldOrderEnum.YIELD_TYPE_6.getCode() != yieldOrder.getYieldType() && ObjectUtil.isEmpty(part.getArea())) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("零件面积为空,工艺匹配失败,请联系工艺员!");
@ -403,11 +417,54 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList);
log.info("添加数据返回结果:{}",saveBatch);
}
//镀层物料需求
if(YieldOrderEnum.YIELD_TYPE_1.getCode() == yieldOrder.getYieldType()){
boolean result = plateGoodsRecordService.calculateCoatingMaterial(yieldOrder);
if(!result){
return false;
}
}
// 生成子件订单
createSubOrder(yieldOrder);
//部件生产订单获取石墨模生成烧结磨具计划,玻璃饼订单获取压饼模生成烧结磨具计划
if(YieldOrderEnum.YIELD_TYPE_2.getCode() == yieldOrder.getYieldType()){
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);
}
}
// TODO 生成模具计划
// TODO 生成物料需求
}
}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;
}
@ -438,18 +495,25 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override
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<>();
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_CZ, "插针"));
// 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_KT, "壳体"));
// 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) {
throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!");
}
//获取已经产生的烧结子件清单
List<YieldOrder> subYieldOrderList = this.listByFatherYoId(yieldOrder.getFatherYoId());
List<YieldOrder> subYieldOrderList = this.listByFatherYoId(yieldOrder.getId());
List<String> keyLst = new ArrayList<>();
List<DsPartEntity> returnList = new ArrayList<>();
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 {
List<DsCraftEntity> dsCraftList;
List<Long> idList = new ArrayList<>();
for (DsPartEntity dsPartSub : subList) {
//如果子件号为空或者是无,则跳过
if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) {
@ -968,7 +1033,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
//获取金属件子件B号,如果未获取到,提示异常
String roamNo = null;
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)) {
String errMsg = MessageFormat.format("子件{}未找到对应B号,请在ERP核查子件一级路线!", dsPartSub.getPartCode());
throw new BusinessException(errMsg);
@ -1008,6 +1073,13 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
subYield.setMemo("手动创建子件");
}
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) {
DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion());
if(part == null){
throw new ServiceException("未查询到零件信息!");
}
// 工作订单备注中包含大小写的HTBY时,执行二级工艺
if (yieldOrder.getYpMemo() != null && yieldOrder.getYpMemo().toLowerCase(Locale.ROOT).contains("htby")) {
return DsCraftEnum.RANK_TWO.getCode();
@ -1119,18 +1193,26 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
// 判定是否为镀金零件
if (CommonConstant.BOOLEAN_TRUE.equals(part.getGoldMark())) {
// 获取零件工艺级别面积判定值
Integer levConfirmVal = 20;
if (levConfirmVal != null) {
// 计算生产订单总面积
Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty();
if (totalArea > levConfirmVal) {
// Integer levConfirmVal = 20;
// if (levConfirmVal != null) {
// // 计算生产订单总面积
// Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty();
//
// if (totalArea > levConfirmVal) {
// return DsCraftEnum.RANK_ONE.getCode();
// } else {
// if (Func.isNotEmpty(yieldOrder.getProductIdent())) {
// // 若局部镀质量等级存在, 返回一级工艺
// return DsCraftEnum.RANK_ONE.getCode();
// }
// }
// }
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();
} else {
if (Func.isNotEmpty(yieldOrder.getProductIdent())) {
// 若局部镀质量等级存在, 返回一级工艺
return DsCraftEnum.RANK_ONE.getCode();
}
}
}
}

@ -28,7 +28,6 @@ package org.springblade.desk.process.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
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.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -173,7 +171,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
Boolean isOk = Boolean.TRUE;
if (fmProjectMilestoneList != null && fmProjectMilestoneList.size() > 0) {
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) {
if (projectMilestone.getGrade().equals(FmProjectMilestoneEntity.GRADE_NO)) {
if (FmProjectMilestoneEntity.GRADE_NO.equals(projectMilestone.getGrade())) {
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) {
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);
String getChildRoamNoByPartCode(String partCode);
}

@ -27,4 +27,23 @@
#{v_use_deptcode, mode=IN, jdbcType=VARCHAR}
)}
</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>

@ -26,4 +26,6 @@ public interface IErpYieldOrderService {
*/
void saveGlassCake(String yoCode, String cardNo, String batchNo, String prodIdent, Date demandDate,
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
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.order.feign.IApsOrderClient;
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.YieldPlanEnum;
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.view.*;
import org.springblade.erpdata.service.*;
import org.springblade.system.cache.DictCache;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @author lqk
@ -300,6 +298,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbPurtoso.getPrtno(),mesRbPurtoso.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno());
//若零件不为空,查询零件的工艺路线
@ -364,6 +363,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
DsPartEntity part = apsOrderClient.getDsCraftListByCode(mesRbPacturnrecord.getPrtno());
if(part != null && part.getCraftWay() != null && part.getCraftWay().contains("封接")){
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
@ -423,6 +423,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder.setRoamNoNext( "");
if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq());
@ -477,6 +478,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbWxpromotion.getPrtno(),mesRbWxpromotion.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno());
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
@ -539,6 +541,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbSodelrecwx.getPrtno(),mesRbSodelrecwx.getFirseq());
/*List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno());
if(CollectionUtils.isNotEmpty(dsPartList)&&dsPartList.get(0).getCraftWay().contains("封接")){
@ -604,6 +607,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder = updateYieldType(yieldOrder,mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq());
/*//从零件表中查询零件信息
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno());
@ -675,6 +679,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setReceiveUser(2038615120549822465L);
yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode());
yieldOrder.setPriorityErp(YieldOrderEnum.PRIORITY_ERP_NORMAL.getCode());
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_NO.getCode());
yieldOrder.setRoamNoNext("");
if(StringUtils.isNotEmpty(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);
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.desk.basic.feign.IWorkCenterClient;
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.UserImporter;
import org.springblade.system.pojo.entity.Post;
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.service.IPostService;
import org.springblade.system.service.IUserExtService;
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.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -208,8 +206,8 @@ public class UserController {
})
@ApiOperationSupport(order = 3)
@Operation(summary = "列表", description = "传入account和realName")
public R<IPage<UserVO>> page(@Parameter(hidden = true) User user, Query query, Long deptId, BladeUser bladeUser) {
IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
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()), ids);
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()));
// return R.data(pages);

@ -51,7 +51,7 @@ public interface UserMapper extends BaseMapper<User> {
* @param tenantId
* @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);

@ -103,6 +103,12 @@
</foreach>
)
</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
</select>

@ -79,7 +79,7 @@ public interface IUserService extends BaseService<User> {
* @param tenantId
* @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);

@ -28,10 +28,10 @@ package org.springblade.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.CacheNames;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.TenantConstant;
@ -66,10 +66,8 @@ import org.springblade.system.wrapper.UserWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
@ -187,9 +185,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
}
@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);
return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId,idList));
}
@Override

Loading…
Cancel
Save