Browse Source

采购入库物料属性不存在则默认创建

master
han\hanst 2 months ago
parent
commit
9552fff5a4
  1. 4
      src/main/java/com/gaotao/modules/factory/controller/PartAttributeController.java
  2. 61
      src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java
  3. 49
      src/main/java/com/gaotao/modules/production/service/impl/ProductionInboundServiceImpl.java
  4. 3
      src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml

4
src/main/java/com/gaotao/modules/factory/controller/PartAttributeController.java

@ -74,8 +74,8 @@ public class PartAttributeController extends AbstractController {
* 删除料件属性 * 删除料件属性
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public R delete(@RequestParam String site, @RequestParam String partNo) {
return partAttributeService.deletePartAttribute(site, partNo);
public R delete(@RequestBody PartAttribute partAttribute) {
return partAttributeService.deletePartAttribute(partAttribute.getSite(), partAttribute.getPartNo());
} }
/** /**

61
src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

@ -1,12 +1,15 @@
package com.gaotao.modules.po.service.impl; package com.gaotao.modules.po.service.impl;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.gaotao.common.exception.XJException; import com.gaotao.common.exception.XJException;
import com.gaotao.common.utils.*; import com.gaotao.common.utils.*;
import com.gaotao.modules.factory.dao.AccessSiteMapper; import com.gaotao.modules.factory.dao.AccessSiteMapper;
import com.gaotao.modules.factory.dao.PartAttributeMapper;
import com.gaotao.modules.factory.entity.PartAttribute;
import com.gaotao.modules.factory.entity.Site; import com.gaotao.modules.factory.entity.Site;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -77,6 +80,8 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
private com.gaotao.modules.handlingunit.service.HandlingUnitIdLogService handlingUnitIdLogService; private com.gaotao.modules.handlingunit.service.HandlingUnitIdLogService handlingUnitIdLogService;
@Autowired @Autowired
private LocationService locationService; private LocationService locationService;
@Autowired
private PartAttributeMapper partAttributeMapper;
@Value("${custom.ifs-url}") @Value("${custom.ifs-url}")
private String ifsUrl; private String ifsUrl;
@ -226,6 +231,8 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
if ("N".equals(inData.getNeedCheck())) { if ("N".equals(inData.getNeedCheck())) {
genInventoryStock(inData, transHeader, receiptDetail); genInventoryStock(inData, transHeader, receiptDetail);
} }
// 处理料件属性创建或更新
handlePartAttribute(inData);
// 同步到IFS // 同步到IFS
syncToIFS(inData); syncToIFS(inData);
/* Map<String, Object> weiwaiMap = isWeiwai(inData); /* Map<String, Object> weiwaiMap = isWeiwai(inData);
@ -789,6 +796,60 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
return poReceiptDetail; return poReceiptDetail;
} }
/**
* 处理料件属性PartAttribute
* <p><b>业务规则</b></p>
* <ul>
* <li>如果料件属性不存在则新建默认值进立库=Y常用料=Y机械臂抓取=Y高度=传入值</li>
* <li>如果料件属性已存在且传入了高度则只更新高度</li>
* </ul>
*
* @param inData 采购入库数据
*/
private void handlePartAttribute(TransDetailDto inData) {
try {
String site = inData.getSite();
String partNo = inData.getPartNo();
BigDecimal height = inData.getHeight();
log.info("开始处理料件属性,site: {}, partNo: {}, height: {}", site, partNo, height);
// 检查料件属性是否已存在
PartAttribute existing = partAttributeMapper.getPartAttributeByKey(site, partNo);
if (existing == null) {
// 不存在则新建设置默认值
PartAttribute partAttribute = new PartAttribute();
partAttribute.setSite(site);
partAttribute.setPartNo(partNo);
partAttribute.setIsInWh("Y"); // 默认进立库
partAttribute.setIsCommonlyUsed("Y"); // 默认常用料
partAttribute.setIsRobotPick("Y"); // 默认机械臂抓取
partAttribute.setHeight(height != null ? height : BigDecimal.ZERO); // 高度不能为空默认0
partAttributeMapper.insert(partAttribute);
log.info("料件属性创建成功,site: {}, partNo: {}, height: {}", site, partNo, height);
} else {
// 已存在且传入了高度则只更新高度
if (height != null) {
// 使用 UpdateWrapper 按照联合主键site + partNo更新
LambdaUpdateWrapper<PartAttribute> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PartAttribute::getSite, site)
.eq(PartAttribute::getPartNo, partNo)
.set(PartAttribute::getHeight, height);
partAttributeMapper.update(null, updateWrapper);
log.info("料件属性高度更新成功,site: {}, partNo: {}, 新高度: {}", site, partNo, height);
} else {
log.debug("料件属性已存在且未传入高度,跳过更新,site: {}, partNo: {}", site, partNo);
}
}
} catch (Exception e) {
// 不抛出异常避免影响主流程
log.error("处理料件属性失败,site: {}, partNo: {}, 错误: {}",
inData.getSite(), inData.getPartNo(), e.getMessage(), e);
}
}
@Override @Override
public List<Map<String, Object>> getPoReceiveRecords(String poNumber, String site, String warehouseId) { public List<Map<String, Object>> getPoReceiveRecords(String poNumber, String site, String warehouseId) {
return poReceiptDetailService.getPoReceiveRecords(poNumber, site, warehouseId); return poReceiptDetailService.getPoReceiveRecords(poNumber, site, warehouseId);

49
src/main/java/com/gaotao/modules/production/service/impl/ProductionInboundServiceImpl.java

@ -1,5 +1,6 @@
package com.gaotao.modules.production.service.impl; package com.gaotao.modules.production.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -9,6 +10,8 @@ import com.gaotao.common.utils.HttpUtils;
import com.gaotao.common.utils.IfsErrorMessageUtils; import com.gaotao.common.utils.IfsErrorMessageUtils;
import com.gaotao.modules.api.entity.IfsShopOrder; import com.gaotao.modules.api.entity.IfsShopOrder;
import com.gaotao.modules.api.service.IfsApiService; import com.gaotao.modules.api.service.IfsApiService;
import com.gaotao.modules.factory.dao.PartAttributeMapper;
import com.gaotao.modules.factory.entity.PartAttribute;
import com.gaotao.modules.notify.entity.vo.ShopOrderMaterialVo; import com.gaotao.modules.notify.entity.vo.ShopOrderMaterialVo;
import com.gaotao.modules.handlingunit.entity.HandlingUnit; import com.gaotao.modules.handlingunit.entity.HandlingUnit;
import com.gaotao.modules.handlingunit.entity.HandlingUnitDetail; import com.gaotao.modules.handlingunit.entity.HandlingUnitDetail;
@ -86,6 +89,9 @@ public class ProductionInboundServiceImpl implements ProductionInboundService {
@Autowired @Autowired
private LocationService locationService; private LocationService locationService;
@Autowired
private PartAttributeMapper partAttributeMapper;
@Autowired @Autowired
private IfsApiService ifsApiService; private IfsApiService ifsApiService;
@ -644,7 +650,8 @@ public class ProductionInboundServiceImpl implements ProductionInboundService {
// 6. 生成库存 // 6. 生成库存
genInventoryStock(transDetailDto, transHeader); genInventoryStock(transDetailDto, transHeader);
log.info("生成库存成功"); log.info("生成库存成功");
// 处理料件属性创建或更新
handlePartAttribute(dto);
// 7. 调用IFS接口ManualReceiveShopOrder // 7. 调用IFS接口ManualReceiveShopOrder
callIfsManualReceiveShopOrder(dto, transNo); callIfsManualReceiveShopOrder(dto, transNo);
log.info("=== 生产订单入库完成 === 事务号: {}, 创建HU数量: {}", transNo, unitIds.size()); log.info("=== 生产订单入库完成 === 事务号: {}, 创建HU数量: {}", transNo, unitIds.size());
@ -660,6 +667,46 @@ public class ProductionInboundServiceImpl implements ProductionInboundService {
} }
} }
private void handlePartAttribute(ShopOrderInboundDto inData) {
try {
String site = inData.getSite();
String partNo = inData.getPartNo();
BigDecimal height = BigDecimal.valueOf(inData.getHeight()!= null ? inData.getHeight() : 0);
log.info("开始处理料件属性,site: {}, partNo: {}, height: {}", site, partNo, height);
// 检查料件属性是否已存在
PartAttribute existing = partAttributeMapper.getPartAttributeByKey(site, partNo);
if (existing == null) {
// 不存在则新建设置默认值
PartAttribute partAttribute = new PartAttribute();
partAttribute.setSite(site);
partAttribute.setPartNo(partNo);
partAttribute.setIsInWh("Y"); // 默认进立库
partAttribute.setIsCommonlyUsed("Y"); // 默认常用料
partAttribute.setIsRobotPick("Y"); // 默认机械臂抓取
partAttribute.setHeight(height); // 高度不能为空默认0
partAttributeMapper.insert(partAttribute);
log.info("料件属性创建成功,site: {}, partNo: {}, height: {}", site, partNo, height);
} else {
// 已存在且传入了高度则只更新高度
// 使用 UpdateWrapper 按照联合主键site + partNo更新
LambdaUpdateWrapper<PartAttribute> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PartAttribute::getSite, site)
.eq(PartAttribute::getPartNo, partNo)
.set(PartAttribute::getHeight, height);
partAttributeMapper.update(null, updateWrapper);
log.info("料件属性高度更新成功,site: {}, partNo: {}, 新高度: {}", site, partNo, height);
}
} catch (Exception e) {
// 不抛出异常避免影响主流程
log.error("处理料件属性失败,site: {}, partNo: {}, 错误: {}",
inData.getSite(), inData.getPartNo(), e.getMessage(), e);
}
}
/** /**
* @Author System * @Author System
* @Description 创建Handling Unit * @Description 创建Handling Unit

3
src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml

@ -57,6 +57,9 @@
<if test="data.agvCode != null and data.agvCode != ''"> <if test="data.agvCode != null and data.agvCode != ''">
AND agv_code = #{data.agvCode} AND agv_code = #{data.agvCode}
</if> </if>
<if test="data.toLocation != null and data.toLocation != ''">
AND to_location = #{data.toLocation}
</if>
<if test="data.palletId != null and data.palletId != ''"> <if test="data.palletId != null and data.palletId != ''">
AND pallet_id LIKE CONCAT('%', #{data.palletId}, '%') AND pallet_id LIKE CONCAT('%', #{data.palletId}, '%')
</if> </if>

Loading…
Cancel
Save