Commit fa4ec878 authored by chicheng's avatar chicheng

成品入库功能添加

parent 48e86735
...@@ -23,3 +23,6 @@ ...@@ -23,3 +23,6 @@
hs_err_pid* hs_err_pid*
/target/ /target/
/.idea/ /.idea/
/barcode-system/target/
/barcode-system/target/
/erp-system/target/
package com.topsunit.scanservice.ximai.barcode.common;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* <p>Title: CorsConfig</p>
* <p>Description: 跨域配置</p>
*
* @author system
* @version V1.0
* @date 2025/10/12
*/
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// 允许所有域名进行跨域调用
config.addAllowedOriginPattern("*");
// 允许所有请求头
config.addAllowedHeader("*");
// 允许所有请求方法
config.addAllowedMethod("*");
// 允许发送Cookie
config.setAllowCredentials(true);
// 预检请求的有效期,单位为秒
config.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对所有接口都应用跨域配置
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
...@@ -103,6 +103,13 @@ ...@@ -103,6 +103,13 @@
</annotationProcessorPaths> </annotationProcessorPaths>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
...@@ -26,7 +26,6 @@ public class MoctfController { ...@@ -26,7 +26,6 @@ public class MoctfController {
@PostMapping("/moctf/createByErp") @PostMapping("/moctf/createByErp")
public void createByErp(@RequestBody MoctfCreateParams2 createParams) { public void createByErp(@RequestBody MoctfCreateParams2 createParams) {
moctfService.create2(createParams); moctfService.create2(createParams);
} }
......
...@@ -30,6 +30,9 @@ public class ExAccountInfoDto { ...@@ -30,6 +30,9 @@ public class ExAccountInfoDto {
@ApiModelProperty("MES接口地址") @ApiModelProperty("MES接口地址")
String mesUrl; String mesUrl;
@ApiModelProperty("条码系统地址")
String barcodeUrl;
@ApiModelProperty("开启") @ApiModelProperty("开启")
String enable; String enable;
} }
...@@ -70,4 +70,7 @@ public class MoctfCreateParams { ...@@ -70,4 +70,7 @@ public class MoctfCreateParams {
@ApiModelProperty("明细") @ApiModelProperty("明细")
private List<MoctgCreateParams> details; private List<MoctgCreateParams> details;
@ApiModelProperty("标签明细")
private List<StorageDetailParams> storageDetails;
} }
...@@ -30,4 +30,7 @@ public class MoctfCreateParams2 { ...@@ -30,4 +30,7 @@ public class MoctfCreateParams2 {
@ApiModelProperty("工单单号") @ApiModelProperty("工单单号")
private String tg015; private String tg015;
@ApiModelProperty("标签明细")
private List<StorageDetailParams> storageDetails;
} }
package com.topsunit.scanservice.ximai.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>Title: StorageDetailParams</p>
* <p>Description: 入库标签明细参数</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public class StorageDetailParams {
@ApiModelProperty("工单单别")
private String workOrderType;
@ApiModelProperty("工单单号")
private String workOrderNo;
@ApiModelProperty("箱码")
private String boxCode;
@ApiModelProperty("小标签号")
private String labelNo;
}
...@@ -35,6 +35,10 @@ public class ExAccountInfo { ...@@ -35,6 +35,10 @@ public class ExAccountInfo {
@Column(name = "API_URL") @Column(name = "API_URL")
String apiUrl; String apiUrl;
@ApiModelProperty("条码系统地址")
@Column(name = "BARCODE_URL")
String barcodeUrl;
@ApiModelProperty("MES接口地址") @ApiModelProperty("MES接口地址")
@Column(name = "MES_URL") @Column(name = "MES_URL")
String mesUrl; String mesUrl;
......
...@@ -7,6 +7,12 @@ import com.topsunit.scanservice.ximai.dao.*; ...@@ -7,6 +7,12 @@ import com.topsunit.scanservice.ximai.dao.*;
import com.topsunit.scanservice.ximai.dto.*; import com.topsunit.scanservice.ximai.dto.*;
import com.topsunit.scanservice.ximai.entity.*; import com.topsunit.scanservice.ximai.entity.*;
import com.topsunit.scanservice.ximai.utils.MessageUtils; import com.topsunit.scanservice.ximai.utils.MessageUtils;
import com.topsunit.scanservice.ximai.webapi.MesStorageDetailRecordService;
import com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordCreate;
import com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordResult;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -20,6 +26,8 @@ import java.util.concurrent.atomic.AtomicReference; ...@@ -20,6 +26,8 @@ import java.util.concurrent.atomic.AtomicReference;
@Service @Service
public class MoctfService { public class MoctfService {
private static final Logger log = LoggerFactory.getLogger(MoctfService.class);
@Autowired @Autowired
private MoctfDao moctfDao; private MoctfDao moctfDao;
@Autowired @Autowired
...@@ -30,11 +38,16 @@ public class MoctfService { ...@@ -30,11 +38,16 @@ public class MoctfService {
private InvmcDao invmcDao; private InvmcDao invmcDao;
@Autowired @Autowired
private MoctaDao moctaDao; private MoctaDao moctaDao;
@Autowired
private MesStorageDetailRecordService mesStorageDetailRecordService;
@Transactional @Transactional
public void create(MoctfCreateParams create){ public void create(MoctfCreateParams create){
Moctf moctf = BeanUtil.toBeanIgnoreError(create, Moctf.class); Moctf moctf = BeanUtil.toBeanIgnoreError(create, Moctf.class);
Calendar curr = Calendar.getInstance(); Calendar curr = Calendar.getInstance();
String currStr = DateUtil.format(curr.getTime(), "yyyyMMdd"); String currStr = DateUtil.format(curr.getTime(), "yyyyMMdd");
if(StringUtils.isEmpty(create.getTf002())){
moctf.setTf002(this.getNewTf002(create.getTf001()));
}
moctf.setTf003(currStr); moctf.setTf003(currStr);
moctf.setTf012(currStr); moctf.setTf012(currStr);
AtomicReference<String> ta083 = new AtomicReference<String>(); AtomicReference<String> ta083 = new AtomicReference<String>();
...@@ -44,6 +57,9 @@ public class MoctfService { ...@@ -44,6 +57,9 @@ public class MoctfService {
Mocta mocta = moctaDao.findById(new MoctaId(s.getTg014(), s.getTg015())).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到对应工单:{0},{1}",s.getTg014(),s.getTg015()))); Mocta mocta = moctaDao.findById(new MoctaId(s.getTg014(), s.getTg015())).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到对应工单:{0},{1}",s.getTg014(),s.getTg015())));
//查询物料 //查询物料
Invmb invmb = invmbDao.findById(mocta.getTa006()).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到对应物料:{0}", s.getTg004()))); Invmb invmb = invmbDao.findById(mocta.getTa006()).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到对应物料:{0}", s.getTg004())));
if(StringUtils.isEmpty(moctg.getTg002())){
moctg.setTg002(moctf.getTf002());
}
moctg.setTg004(invmb.getMb001()); moctg.setTg004(invmb.getMb001());
moctg.setTg005(invmb.getMb002()); moctg.setTg005(invmb.getMb002());
moctg.setTg006(invmb.getMb003()); moctg.setTg006(invmb.getMb003());
...@@ -62,6 +78,31 @@ public class MoctfService { ...@@ -62,6 +78,31 @@ public class MoctfService {
moctf.setTf023(create.getDetails().get(0).getTg011()); moctf.setTf023(create.getDetails().get(0).getTg011());
moctf.setTf024(create.getDetails().get(0).getTg011()); moctf.setTf024(create.getDetails().get(0).getTg011());
moctfDao.save(moctf); moctfDao.save(moctf);
// 保存入库标签明细记录到 MES 系统
if (create.getStorageDetails() != null && !create.getStorageDetails().isEmpty()) {
create.getStorageDetails().forEach(detail -> {
try {
StorageDetailRecordCreate storageDetailRecord = new StorageDetailRecordCreate();
storageDetailRecord.setWorkOrderType(detail.getWorkOrderType());
storageDetailRecord.setWorkOrderNo(detail.getWorkOrderNo());
storageDetailRecord.setBoxCode(detail.getBoxCode());
storageDetailRecord.setLabelNo(detail.getLabelNo());
StorageDetailRecordResult result = mesStorageDetailRecordService.create(storageDetailRecord);
if(result.getCode()==200) {
log.info("保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo());
}else{
throw new TopsunitException(result.getMsg());
}
} catch (Exception e) {
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo(), e.getMessage(), e);
// 不抛出异常,仅记录日志,避免影响主流程
}
});
}
} }
...@@ -103,6 +144,27 @@ public class MoctfService { ...@@ -103,6 +144,27 @@ public class MoctfService {
moctf.setTf023(create.getTg011()); moctf.setTf023(create.getTg011());
moctf.setTf024(create.getTg011()); moctf.setTf024(create.getTg011());
moctfDao.save(moctf); moctfDao.save(moctf);
// 保存入库标签明细记录到 MES 系统
if (create.getStorageDetails() != null && !create.getStorageDetails().isEmpty()) {
create.getStorageDetails().forEach(detail -> {
try {
StorageDetailRecordCreate storageDetailRecord = new StorageDetailRecordCreate();
storageDetailRecord.setWorkOrderType(detail.getWorkOrderType());
storageDetailRecord.setWorkOrderNo(detail.getWorkOrderNo());
storageDetailRecord.setBoxCode(detail.getBoxCode());
storageDetailRecord.setLabelNo(detail.getLabelNo());
StorageDetailRecordResult result = mesStorageDetailRecordService.create(storageDetailRecord);
log.info("保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo());
} catch (Exception e) {
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo(), e.getMessage(), e);
// 不抛出异常,仅记录日志,避免影响主流程
}
});
}
} }
......
package com.topsunit.scanservice.ximai.webapi;
import com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordCreate;
import com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* <p>Title: MesStorageDetailRecordService</p>
* <p>Description: MES 入库明细记录服务</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@FeignClient(name = "MES-StorageDetailRecord", url = "${topsunit.mes-url}")
public interface MesStorageDetailRecordService {
/**
* 新增入库明细记录(内部接口,无权限验证)
*
* @param storageDetailRecordCreate 入库明细记录创建对象
* @return 操作结果
*/
@RequestMapping(value = "/pro/storageDetailRecord/internal", method = RequestMethod.POST)
StorageDetailRecordResult create(@RequestBody StorageDetailRecordCreate storageDetailRecordCreate);
}
package com.topsunit.scanservice.ximai.webapi.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>Title: StorageDetailRecordCreate</p>
* <p>Description: 入库明细记录创建对象</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public class StorageDetailRecordCreate {
/** 工单单别 */
@ApiModelProperty("工单单别")
private String workOrderType;
/** 工单单号 */
@ApiModelProperty("工单单号")
private String workOrderNo;
/** 箱码 */
@ApiModelProperty("箱码")
private String boxCode;
/** 小标签号 */
@ApiModelProperty("小标签号")
private String labelNo;
}
package com.topsunit.scanservice.ximai.webapi.dto;
import lombok.Data;
/**
* <p>Title: StorageDetailRecordResult</p>
* <p>Description: 入库明细记录返回结果</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public class StorageDetailRecordResult {
/** 状态码 */
private Integer code;
/** 消息 */
private String msg;
/** 数据 */
private Object data;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment