新增自增板逻辑更改,token导出去除*号,token请求头校验增加

This commit is contained in:
liuzhaotian
2025-03-08 14:29:38 +08:00
parent 34cacc6d51
commit caa5743503
12 changed files with 116 additions and 68 deletions
@@ -7,7 +7,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List; import java.util.Map;
@Data @Data
@Builder @Builder
@@ -21,7 +21,8 @@ public class InsertPlateRespVO {
@Schema(description = "新增的小板编号") @Schema(description = "新增的小板编号")
private List<String> plateNo; // 小板ID,小板编号
private Map<String,String> plateNo;
} }
@@ -18,6 +18,7 @@ import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -191,12 +192,18 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
List<OrderGoodsPlateIds> selectPlateGoodIds(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId); List<OrderGoodsPlateIds> selectPlateGoodIds(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
default List<GoodsDO> selectOrderGoodsList(List<Long> orderIds, List<String> goodsIds, Long organId) { default List<GoodsDO> selectOrderGoodsList(List<Long> orderIds,
List<String> goodsIds,
String material,
BigDecimal thickness,
Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>() return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId) .eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false) .eq(GoodsDO::getDeleted, false)
.inIfPresent(GoodsDO::getOrderId,orderIds) .inIfPresent(GoodsDO::getOrderId,orderIds)
.inIfPresent(GoodsDO::getGoodsId,goodsIds)); .inIfPresent(GoodsDO::getGoodsId,goodsIds)
.eqIfPresent(GoodsDO::getMaterial,material)
.eqIfPresent(GoodsDO::getThickness,thickness));
} }
@@ -78,4 +78,12 @@ public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
Long selectIsCuttingPlate(@Param("planId") Long planId,@Param("organId") Long organId); Long selectIsCuttingPlate(@Param("planId") Long planId,@Param("organId") Long organId);
default List<PlanItemDO> selectPlanOrderGoodsList(Long planId, List<Long> orderIds,Long organId) {
return selectList( new LambdaQueryWrapperX<PlanItemDO>()
.eq(PlanItemDO::getOrganId, organId)
.eq(PlanItemDO::getPlanId,planId)
.inIfPresent(PlanItemDO::getOrderId,orderIds)
.select(PlanItemDO::getGoodsId));
}
} }
@@ -1657,7 +1657,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
orderDOS.forEach(f->f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus())); orderDOS.forEach(f->f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus()));
planMapper.updateById(planDO); planMapper.updatePlanStatus(planDO.getId(),planDO.getStatus(),getUserOrganId());
orderMapper.updateBatch(orderDOS); orderMapper.updateBatch(orderDOS);
return; return;
@@ -1717,7 +1718,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
} }
planMapper.updateById(planDO); planMapper.updatePlanStatus(planDO.getId(),planDO.getStatus(),getUserOrganId());
List<PlateDO> plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId()); List<PlateDO> plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId());
List<Long> orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList(); List<Long> orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList();
@@ -352,12 +352,8 @@ public class PlanServiceImpl implements PlanService {
if (!plateDOS.isEmpty()) { if (!plateDOS.isEmpty()) {
List<Long> plateIdList = plateDOS.stream().map(PlateDO::getId).toList(); List<Long> plateIdList = plateDOS.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOS.stream().map(PlateDO::getGoodsId).toList();
plateMapper.deleteBatchIds(plateIdList); plateMapper.deleteBatchIds(plateIdList);
goodsMapper.deleteBatchIds(goodsIds);
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>() orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId, getUserOrganId()) .eq(OrderItemDO::getOrganId, getUserOrganId())
.inIfPresent(OrderItemDO::getOrderId, orderIds) .inIfPresent(OrderItemDO::getOrderId, orderIds)
@@ -1318,7 +1314,7 @@ public class PlanServiceImpl implements PlanService {
planDOS.forEach(f->{ planDOS.forEach(f->{
if(f.getType().equals(PlanStatusEnum.OPENED.getStatus())){ if(f.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
f.setStatus(PlanStatusEnum.OPENING.getStatus()); f.setStatus(PlanStatusEnum.OPENING.getStatus());
} }
@@ -536,68 +536,38 @@ public class PlateServiceImpl implements PlateService {
List<OrderModelDO> orderPlateModelDOS = new ArrayList<>(); List<OrderModelDO> orderPlateModelDOS = new ArrayList<>();
List<String> goodsIds = new ArrayList<>(reqVO.stream().map(OptimizationSavePlateReqVO::getGoodsId).distinct().toList()); Map<String,String> plateIdAndNo = new HashMap<>();
Long planId = Optional.ofNullable(reqVO.get(0).getPlanId()).orElseThrow(()-> exception(ORDER_PLAN_PLATE_ERROR));
PlanDO planDO = planMapper.selectById(planId);
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR);
List<Long> orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList(); List<Long> orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList();
List<GoodsDO> goodsDOList = goodsMapper.selectOrderGoodsList(orderIds, goodsIds, getUserOrganId()); List<PlanItemDO> planItemDOList = planItemMapper.selectPlanOrderGoodsList(planId, orderIds, getUserOrganId());
goodsIds.removeAll(goodsDOList.stream().map(GoodsDO::getGoodsId).distinct().toList()); List<Long> goodsId = planItemDOList.stream().map(PlanItemDO::getGoodsId).distinct().toList();
if(CollUtil.isNotEmpty(goodsIds)){ List<GoodsDO> goodsDOS = goodsMapper.selectBatchIds(goodsId);
List<GoodsDO> goodsDOS = new ArrayList<>();
List<PlateGoodDO> plateGoodDOS = plateGoodMapper.selectGoodsByGoodsId(goodsIds, getUserOrganId());
for (PlateGoodDO plateGoodDO : plateGoodDOS) {
GoodsDO goodsDO = GoodsDO.builder()
.id(null)
.orderId(reqVO.stream().filter(f -> f.getGoodsId().equals(plateGoodDO.getGoodsId())).map(OptimizationSavePlateReqVO::getOrderId).toList().get(0))
.rawGoodsId("0")
.goodsId(plateGoodDO.getGoodsId())
.goodsName(plateGoodDO.getGoodsName())
.material(plateGoodDO.getMaterial())
.texture(plateGoodDO.getTexture())
.color(plateGoodDO.getColor())
.width(BigDecimal.valueOf(plateGoodDO.getWidth()))
.height(BigDecimal.valueOf(plateGoodDO.getHeight()))
.thickness(BigDecimal.valueOf(plateGoodDO.getThickness()))
.remark(plateGoodDO.getRemark())
.brand(plateGoodDO.getBrand())
.build();
goodsDOS.add(goodsDO);
}
goodsMapper.insertBatch(goodsDOS);
goodsDOList.addAll(goodsDOS);
}
reqVO.forEach(f->{ reqVO.forEach(f->{
List<String> plateNoList = new ArrayList<>();
Long orderId = f.getOrderId(); Long orderId = f.getOrderId();
GoodsDO goodsDO = goodsDOList.stream().filter(g -> g.getGoodsId().equals(f.getGoodsId())).toList().get(0); GoodsDO goodsDO = goodsDOS.stream().filter(g -> g.getOrderId().equals(f.getOrderId())).toList().get(0);
orderBodyNumVOS.add(OrderBodyNumVO.builder() orderBodyNumVOS.add(OrderBodyNumVO.builder()
.bodyId(f.getBodyId()) .bodyId(f.getBodyId())
.plateNum(f.getMultiple()) .plateNum(f.getMultiple())
.build()); .build());
// 生成板编号 // 生成板编号
long obtainingTime = SnowflakeIdWorker3rd.obtainingTime(); long obtainingTime = SnowflakeIdWorker3rd.obtainingTime();
String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2); String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2);
plateNoList.add(plateNo);
String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";"; String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";";
String remake2 = f.getRemake2() == null ? "" : f.getRemake2(); String remake2 = f.getRemake2() == null ? "" : f.getRemake2();
@@ -605,6 +575,7 @@ public class PlateServiceImpl implements PlateService {
// 小板ID // 小板ID
Long plateId = (Long) identifierGenerator.nextId(null); Long plateId = (Long) identifierGenerator.nextId(null);
plateIdAndNo.put(plateId.toString(),plateNo);
plateDOS.add(PlateDO.builder() plateDOS.add(PlateDO.builder()
.id(plateId) .id(plateId)
@@ -658,7 +629,7 @@ public class PlateServiceImpl implements PlateService {
insertPlateRespVOS.add(InsertPlateRespVO.builder() insertPlateRespVOS.add(InsertPlateRespVO.builder()
.blockKey(f.getBlockKey()) .blockKey(f.getBlockKey())
.plateNo(plateNoList) .plateNo(plateIdAndNo)
.build()); .build());
}); });
@@ -306,7 +306,7 @@ public class ErrorCodeConstants {
public static final ErrorCode ORDER_PLAN_DATE_ERROR = new ErrorCode(1_002_041_004, "排单信息不存在,请重新进入或切换排单"); public static final ErrorCode ORDER_PLAN_DATE_ERROR = new ErrorCode(1_002_041_004, "排单信息不存在,请重新进入或切换排单");
public static final ErrorCode ORDER_PLAN_OPTIMIZE_ERROR = new ErrorCode(1_002_041_005, "当前排单对应的优化数据为空,请重新进行优化"); public static final ErrorCode ORDER_PLAN_OPTIMIZE_ERROR = new ErrorCode(1_002_041_005, "当前排单对应的优化数据为空,请重新进行优化");
public static final ErrorCode ORDER_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_006, "生产单对应的板材造型数据为空,请重新导入生产单"); public static final ErrorCode ORDER_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_006, "生产单对应的板材造型数据为空,请重新导入生产单");
public static final ErrorCode ORDER_PLAN_PLATE_ERROR = new ErrorCode(1_002_041_007, "当前排单对应的板材数据有异常,请查看板材信息或联系客服"); public static final ErrorCode ORDER_PLAN_PLATE_ERROR = new ErrorCode(1_002_041_007, "当前排单对应的板材数据有异常,请查看板材信息");
public static final ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_002_041_008, "当前排单对应的生产单数据为空,请删掉排单并重新创建排单"); public static final ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_002_041_008, "当前排单对应的生产单数据为空,请删掉排单并重新创建排单");
public static final ErrorCode ORDER_PLAN_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_009, "当前排单对应的板材造型数据为空,请重新导入生产单并排单"); public static final ErrorCode ORDER_PLAN_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_009, "当前排单对应的板材造型数据为空,请重新导入生产单并排单");
public static final ErrorCode ORDER_GOODS_DATA_ERROR = new ErrorCode(1_002_041_010, "当前大板数据异常,请检查大板信息或者联系客服"); public static final ErrorCode ORDER_GOODS_DATA_ERROR = new ErrorCode(1_002_041_010, "当前大板数据异常,请检查大板信息或者联系客服");
@@ -338,6 +338,7 @@ public class ErrorCodeConstants {
public static final ErrorCode THIS_PLAN_SCHEME_DATA_ERROR = new ErrorCode(1_002_041_047, "当前方案组的优化信息有误,请重新选择方案组或重新导入排单再进行优化"); public static final ErrorCode THIS_PLAN_SCHEME_DATA_ERROR = new ErrorCode(1_002_041_047, "当前方案组的优化信息有误,请重新选择方案组或重新导入排单再进行优化");
public static final ErrorCode PLAN_SORT_DATA_ERROR = new ErrorCode(1_002_041_048, "已无可进行排序的数据,无法进行排序"); public static final ErrorCode PLAN_SORT_DATA_ERROR = new ErrorCode(1_002_041_048, "已无可进行排序的数据,无法进行排序");
public static final ErrorCode THIS_PLATE_IS_OPTIMIZE = new ErrorCode(1_002_041_049, "小板:{},已开料,无法删除,请重新选择小板再删除"); public static final ErrorCode THIS_PLATE_IS_OPTIMIZE = new ErrorCode(1_002_041_049, "小板:{},已开料,无法删除,请重新选择小板再删除");
public static final ErrorCode PLAN_INSERT_PLATE_ERROR = new ErrorCode(1_002_041_050, "当前排单无法新增自增小板,请删除排单重新创建");
@@ -118,10 +118,10 @@ public class TokenConfigController {
@Operation(summary = "导出配置信息") @Operation(summary = "导出配置信息")
// @PreAuthorize("@ss.hasAnyPermissions('system:token:export')") // @PreAuthorize("@ss.hasAnyPermissions('system:token:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportPlateExcel(@Valid TokenConfigPageReqVO pageReqVO, public void exportTokenConfigExcel(@Valid TokenConfigPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<TokenConfigRespVO> list = tokenConfigService.getTokenConfigPage(pageReqVO).getList(); List<TokenConfigRespVO> list = tokenConfigService.exportTokenConfigExcel(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "token配置信息表.xls", "数据", TokenConfigRespVO.class, ExcelUtils.write(response, "token配置信息表.xls", "数据", TokenConfigRespVO.class,
BeanUtils.toBean(list, TokenConfigRespVO.class)); BeanUtils.toBean(list, TokenConfigRespVO.class));
@@ -12,13 +12,17 @@ import com.cf.imes.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTo
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2ClientDO; import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2ClientDO;
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2RefreshTokenDO; import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2RefreshTokenDO;
import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO;
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO; import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
import com.cf.imes.module.system.dal.mysql.oauth2.OAuth2AccessTokenMapper; import com.cf.imes.module.system.dal.mysql.oauth2.OAuth2AccessTokenMapper;
import com.cf.imes.module.system.dal.mysql.oauth2.OAuth2RefreshTokenMapper; import com.cf.imes.module.system.dal.mysql.oauth2.OAuth2RefreshTokenMapper;
import com.cf.imes.module.system.dal.mysql.organ.OrganMapper;
import com.cf.imes.module.system.dal.redis.oauth2.OAuth2AccessTokenRedisDAO; import com.cf.imes.module.system.dal.redis.oauth2.OAuth2AccessTokenRedisDAO;
import com.cf.imes.module.system.service.organ.OrganService; import com.cf.imes.module.system.service.organ.OrganService;
import com.cf.imes.module.system.service.tokenconfig.TokenConfigService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.Cursor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -60,6 +64,20 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
@Resource @Resource
private OrganService organService; private OrganService organService;
@Resource
private TokenConfigService tokenConfigService;
@Resource
private OrganMapper organMapper;
private static final String FIELD_IMES = "imes-";
@Value("${chenfeng.organ.use-data-code:imes_prod}")
private String useDataCode;
@Override @Override
@Transactional @Transactional
public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) { public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
@@ -109,19 +127,46 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
return null; return null;
} }
@Override @Override
public OAuth2AccessTokenDO getAccessToken(String accessToken) { public OAuth2AccessTokenDO getAccessToken(String accessToken) {
// 因数据库不在存入缓存数据,所以直接从缓存中获取
// 数据库移除令牌存入,所以直接从缓存中获取 OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO();
OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
if(accessTokenDO != null){ String substring = accessToken.substring(0, 5);
// 校验组织的有效性
organService.validOrgan(accessTokenDO.getOrganId()); // 外部应用 token 校验
// 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟) if(FIELD_IMES.equals(substring)){
oauth2AccessTokenRedisDAO.expire(accessToken, 1, TimeUnit.DAYS);
Long organId = tokenConfigService.checkTokenConfig(accessToken);
OrganizationDO organizationDO = organMapper.selectById(organId);
accessTokenDO.setOrganId(organId);
accessTokenDO.setUserId(organizationDO.getContactUserId());
accessTokenDO.setUserType(2);
accessTokenDO.setClientId("default");
accessTokenDO.setExpiresTime(organizationDO.getExpireTime());
accessTokenDO.setDataCode(useDataCode);
accessTokenDO.setNickname(organizationDO.getName());
accessTokenDO.setIsSupAdmin(true);
}else {
// 因数据库不在存入缓存数据,所以直接从缓存中获取
// 数据库移除令牌存入,所以直接从缓存中获取
accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
if (accessTokenDO != null) {
// 校验组织的有效性
organService.validOrgan(accessTokenDO.getOrganId());
// 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟)
oauth2AccessTokenRedisDAO.expire(accessToken, 1, TimeUnit.DAYS);
}
} }
return accessTokenDO; return accessTokenDO;
} }
@@ -30,4 +30,6 @@ public interface TokenConfigService {
Long checkTokenConfig(String token); Long checkTokenConfig(String token);
String tokenConfigCopy(Long id); String tokenConfigCopy(Long id);
PageResult<TokenConfigRespVO> exportTokenConfigExcel(TokenConfigPageReqVO pageReqVO);
} }
@@ -208,11 +208,6 @@ public class TokenConfigServiceImpl implements TokenConfigService{
@Override @Override
public Long checkTokenConfig(String token) { public Long checkTokenConfig(String token) {
String substring = token.substring(0, 5);
if(!FIELD_IMES.equals(substring)){
throw exception(TOKEN_DATA_ERROR);
}
TokenConfigDO tokenConfigDO = tokenConfigMapper.selectByToken(token.substring(5)); TokenConfigDO tokenConfigDO = tokenConfigMapper.selectByToken(token.substring(5));
if(tokenConfigDO == null){ if(tokenConfigDO == null){
@@ -253,7 +248,26 @@ public class TokenConfigServiceImpl implements TokenConfigService{
@Override
public PageResult<TokenConfigRespVO> exportTokenConfigExcel(TokenConfigPageReqVO pageReqVO) {
PageResult<TokenConfigDO> pageResult = tokenConfigMapper.selectConfigPage(pageReqVO,null);
if(CollUtil.isEmpty(pageResult.getList())) {
return new PageResult<>();
}
OrganizationDO organizationDO = organService.validOrgan(getUserOrganId());
PageResult<TokenConfigRespVO> result = BeanUtils.toBean(pageResult, TokenConfigRespVO.class);
result.getList().forEach(f->{
f.setOrganName(organizationDO.getName());
f.setAppToken(FIELD_IMES+f.getAppToken());
});
return result;
}
private TokenConfigDO validateTokenConfigExists(Long id) { private TokenConfigDO validateTokenConfigExists(Long id) {
@@ -201,6 +201,7 @@ chenfeng:
- system_data_source_field - system_data_source_field
- system_machine_brand - system_machine_brand
- system_machine_limit - system_machine_limit
- system_config_token
use-data-code: imes_prod #动态数据源标识,后期添加的数据源需要修改此值 use-data-code: imes_prod #动态数据源标识,后期添加的数据源需要修改此值
sms-code: # 短信验证码相关的配置项 sms-code: # 短信验证码相关的配置项