|
|
@@ -6,6 +6,7 @@ import com.uas.eis.dao.SqlRowList;
|
|
|
import com.uas.eis.entity.ErrorMessage;
|
|
|
import com.uas.eis.entity.ProdBindSetRequest;
|
|
|
import com.uas.eis.entity.SNBindInfoRequest;
|
|
|
+import com.uas.eis.entity.SNBindMaterialRequest;
|
|
|
import com.uas.eis.exception.ApiSystemException;
|
|
|
import com.uas.eis.sdk.entity.ApiResult;
|
|
|
import com.uas.eis.sdk.resp.ApiResponse;
|
|
|
@@ -608,6 +609,149 @@ public class MESDataServiceImpl implements MESDataService {
|
|
|
return executeSNBindInfo(accessKey,requestId,reqData);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @add xiaost 2026-06-03
|
|
|
+ * 接收SN序列号扫码绑定物料结果
|
|
|
+ * @param rawJson
|
|
|
+ * {
|
|
|
+ * "code": "SNBINDMATERIAL",
|
|
|
+ * "data":{
|
|
|
+ * "type":"ADD",
|
|
|
+ * "sm_mothercode":"MA123003",
|
|
|
+ * "sm_maprodcode":"01EL0PR68M06030A",
|
|
|
+ * "sm_sncode":"W20211230029A1",
|
|
|
+ * "detail":[{
|
|
|
+ * "sm_stepcode":"B_AOIB",
|
|
|
+ * "sm_stepname":"B_AOIB",
|
|
|
+ * "sm_binddetno":2,
|
|
|
+ * "sm_fprodcode":"ER35564666",
|
|
|
+ * "sm_aprodcode":"ER35564666",
|
|
|
+ * "sm_barcode":"B34677733",
|
|
|
+ * "sm_qty":1
|
|
|
+ * }]
|
|
|
+ * }
|
|
|
+ * }
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ApiResult<Map<Object, Object>> SNBindMaterial(String accessKey, String requestId, SNBindMaterialRequest reqData, String rawJson) {
|
|
|
+ String AE_MASTER = checkAccessKey(accessKey, requestId);
|
|
|
+ SpObserver.putSp(AE_MASTER); //切换数据源
|
|
|
+ //保存传参数据原始JSON串,记录日志
|
|
|
+ savelog("接收SN序列号扫码绑定物料结果",rawJson,accessKey,requestId);
|
|
|
+ //执行业务操作
|
|
|
+ return executeSNBindMaterial(accessKey,requestId,reqData);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public ApiResult<Map<Object, Object>> executeSNBindMaterial(String accessKey, String requestId, SNBindMaterialRequest reqData) {
|
|
|
+ SNBindMaterialRequest.DataDTO dataDTO = reqData.getData();
|
|
|
+ String mothercode = dataDTO.getSm_maprodcode();
|
|
|
+ String sncode = dataDTO.getSm_sncode();
|
|
|
+ String macode = dataDTO.getSm_macode();
|
|
|
+ String type = dataDTO.getType();
|
|
|
+ List<SNBindMaterialRequest.DetailDTO> detailList = dataDTO.getDetail();
|
|
|
+
|
|
|
+ //绑定项编号不能重复
|
|
|
+ Set<String> set = new HashSet<>();
|
|
|
+ List<String> duplicates = detailList.stream()
|
|
|
+ .map(SNBindMaterialRequest.DetailDTO::getSm_fprodcode)
|
|
|
+ .filter(s -> !set.add(s))
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (!duplicates.isEmpty()) {
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "本次传参存在重复的sm_fprodcode: " + String.join(", ", duplicates));
|
|
|
+ }
|
|
|
+ //绑定值条码号等必须唯一不能重复 ,也不能与历史数据重复
|
|
|
+ Set<String> set1 = new HashSet<>();
|
|
|
+ duplicates = detailList.stream()
|
|
|
+ .map(SNBindMaterialRequest.DetailDTO::getSm_barcode)
|
|
|
+ .filter(s -> !set1.add(s))
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (!duplicates.isEmpty()) {
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "本次传参存在重复的sm_barcode: " + String.join(", ", duplicates));
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验是否存在绑定项
|
|
|
+ String insertSql = "INSERT INTO SNBINDMATERIAL (SM_ID,SM_SNCODE,SM_MAPRODCODE,SM_MACODE,SM_STEPCODE,SM_STEPNAME," +
|
|
|
+ " SM_BINDDETNO,SM_FPRODCODE,SM_APRODCODE,SM_QTY,SM_BARCODE,SM_INDATE) " +
|
|
|
+ " VALUES (SNBINDMATERIAL_seq.nextval,?, ?, ?, ?, ?, ?, ?,?,?,?,sysdate)";
|
|
|
+ String insertHisSql = "INSERT INTO SNBINDMATERIAL_HIS (SM_ID,SM_SNCODE,SM_MAPRODCODE,SM_MACODE,SM_STEPCODE,SM_STEPNAME," +
|
|
|
+ " SM_BINDDETNO,SM_FPRODCODE,SM_APRODCODE,SM_QTY,SM_BARCODE,SM_INDATE,SH_INDATE,SH_TYPE) " +
|
|
|
+ " select SM_ID,SM_SNCODE,SM_MAPRODCODE,SM_MACODE,SM_STEPCODE,SM_STEPNAME," +
|
|
|
+ " SM_BINDDETNO,SM_FPRODCODE,SM_APRODCODE,SM_QTY,SM_BARCODE,SM_INDATE,SYSDATE,? from SNBINDMATERIAL " +
|
|
|
+ " where SM_SNCODE=? and SM_MACODE=? and sm_fprodcode=? ";
|
|
|
+ List<Object[]> batchArgs = new ArrayList<>();
|
|
|
+ for (SNBindMaterialRequest.DetailDTO detail : detailList) {
|
|
|
+ String fprodcode = detail.getSm_fprodcode();
|
|
|
+ if("ADD".equals(type)) {
|
|
|
+ int cn = baseDao.getJdbcTemplate().queryForObject("select count(1) from SNBINDSET where ss_mothercode=? and ss_prodcode =?",Integer.class,
|
|
|
+ mothercode,detail.getSm_fprodcode());
|
|
|
+ if(cn == 0){
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "绑定项编号(sm_fprodcode):" +detail.getSm_fprodcode()+",不在产品强制绑定项设置里面!");
|
|
|
+ }
|
|
|
+ cn = baseDao.getJdbcTemplate().queryForObject("select count(1) from SNBINDSET where ss_mothercode=? and ss_prodcode =?",Integer.class,
|
|
|
+ mothercode,detail.getSm_aprodcode());
|
|
|
+ if(cn == 0){
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "实际绑定编号(sm_aprodcode):" +detail.getSm_aprodcode()+",与绑定项设置"+detail.getSm_fprodcode()+"不一致");
|
|
|
+ }
|
|
|
+ batchArgs.add(new Object[]{
|
|
|
+ sncode,
|
|
|
+ mothercode,
|
|
|
+ macode,
|
|
|
+ detail.getSm_stepcode(),
|
|
|
+ detail.getSm_stepname(),
|
|
|
+ detail.getSm_binddetno(),
|
|
|
+ fprodcode,
|
|
|
+ detail.getSm_aprodcode(),
|
|
|
+ detail.getSm_qty(),
|
|
|
+ detail.getSm_barcode()
|
|
|
+ });
|
|
|
+ //是否原有绑定项,有则删除写历史表
|
|
|
+ cn = baseDao.getJdbcTemplate().queryForObject("select count(1) from SNBINDMATERIAL WHERE SM_SNCODE=? and SM_MACODE=? and sm_fprodcode=?",Integer.class,sncode,macode,fprodcode);
|
|
|
+ if(cn>0){
|
|
|
+ baseDao.execute(insertHisSql,"修改",sncode,macode,fprodcode);
|
|
|
+ baseDao.execute("delete from SNBINDMATERIAL WHERE SM_SNCODE=? and SM_MACODE=? and sm_fprodcode=?",sncode,macode,fprodcode);
|
|
|
+ }
|
|
|
+ }else if("DEL".equals(type)){
|
|
|
+ int cn = baseDao.getJdbcTemplate().queryForObject("select count(1) from SNBINDMATERIAL where SM_SNCODE=? and SM_MACODE=? and sm_fprodcode=? and sm_barcode=?",
|
|
|
+ Integer.class,sncode,macode,fprodcode,detail.getSm_barcode());
|
|
|
+ if(cn == 0){
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "绑定项编号(sm_fprodcode):" +detail.getSm_fprodcode()+",不在产品强制绑定项设置里面!");
|
|
|
+ }else{
|
|
|
+ baseDao.execute(insertHisSql+" and sm_barcode=?","解绑",sncode,macode,fprodcode,detail.getSm_barcode());
|
|
|
+ baseDao.execute("delete from SNBINDMATERIAL WHERE SM_SNCODE=? and SM_MACODE=? and sm_fprodcode=? and sm_barcode=?",sncode,macode,fprodcode,detail.getSm_barcode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if("ADD".equals(type)) {
|
|
|
+ //校验是否重复barcode 不重复则插入
|
|
|
+ List<String> barList = detailList.stream()
|
|
|
+ .map(SNBindMaterialRequest.DetailDTO::getSm_barcode)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ String checksql = "select wm_concat(sm_barcode) from SNBINDMATERIAL where sm_barcode IN (%s) and rownum<20";
|
|
|
+ String inClause = String.join(",", Collections.nCopies(barList.size(), "?"));
|
|
|
+ checksql = String.format(checksql, inClause);
|
|
|
+ String barr = baseDao.getJdbcTemplate().queryForObject(checksql,String.class,barList.toArray());
|
|
|
+ if(null != barr){
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "sm_barcode与历史已有数据表重复: " + barr);
|
|
|
+ }
|
|
|
+ baseDao.getJdbcTemplate().batchUpdate(insertSql, batchArgs);
|
|
|
+ }
|
|
|
+ return ApiResponse.successRsp("0",requestId,"操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Transactional
|
|
|
public ApiResult<Map<Object, Object>> executeSNBindInfo(String accessKey, String requestId, SNBindInfoRequest reqData) {
|
|
|
List<SNBindInfoRequest.DetailDTO> detailList = reqData.getData().getDetail();
|