|
|
@@ -4,10 +4,7 @@ import com.uas.eis.annotation.ApiLog;
|
|
|
import com.uas.eis.core.config.SpObserver;
|
|
|
import com.uas.eis.dao.BaseDao;
|
|
|
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.entity.*;
|
|
|
import com.uas.eis.exception.ApiSystemException;
|
|
|
import com.uas.eis.sdk.entity.ApiResult;
|
|
|
import com.uas.eis.sdk.resp.ApiResponse;
|
|
|
@@ -709,6 +706,126 @@ public class MESDataServiceImpl implements MESDataService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @ApiLog(actionType = "删除SN绑定采集数据")
|
|
|
+ @Override
|
|
|
+ public ApiResult<String> SNBindDel(String accessKey, String requestId, String rawJson) {
|
|
|
+ String AE_MASTER = checkAccessKey(accessKey, requestId);
|
|
|
+ SpObserver.putSp(AE_MASTER); //切换数据源
|
|
|
+ SNBindDelRequest reqData = SNBindDelCheck(requestId,rawJson);
|
|
|
+ //执行业务操作
|
|
|
+ return executeSNBindDel(accessKey,requestId,reqData);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public ApiResult<String> executeSNBindDel(String accessKey, String requestId, SNBindDelRequest reqData) {
|
|
|
+ String type = reqData.getData().getType();
|
|
|
+ List<SNBindDelRequest.DetailDTO> detailList = reqData.getData().getDetail();
|
|
|
+
|
|
|
+ // 1. 去重检查
|
|
|
+ Set<String> snSet = new HashSet<>();
|
|
|
+ List<String> duplicates = detailList.stream()
|
|
|
+ .map(SNBindDelRequest.DetailDTO::getSncode)
|
|
|
+ .filter(s -> !snSet.add(s))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (!duplicates.isEmpty()) {
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId,
|
|
|
+ "本次传参存在重复的sncode: " + String.join(", ", duplicates));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> sncodes = new ArrayList<>(snSet);
|
|
|
+ boolean needInfo = "INFO".equals(type) || "ALL".equals(type);
|
|
|
+ boolean needMaterial = "MATERIAL".equals(type) || "ALL".equals(type);
|
|
|
+
|
|
|
+ // 2. 批量查询已存在的sncode(分别查两张表)
|
|
|
+ String placeholders = String.join(",", Collections.nCopies(sncodes.size(), "?"));
|
|
|
+ Set<String> existInfo = new HashSet<>();
|
|
|
+ Set<String> existMaterial = new HashSet<>();
|
|
|
+
|
|
|
+ if (needInfo) {
|
|
|
+ String queryInfoSql = "SELECT SI_SNCODE FROM SNBIND_INFO WHERE SI_SNCODE IN (" + placeholders + ")";
|
|
|
+ existInfo = new HashSet<>(baseDao.getJdbcTemplate().queryForList(queryInfoSql, String.class, sncodes.toArray()));
|
|
|
+ }
|
|
|
+ if (needMaterial) {
|
|
|
+ String queryMatSql = "SELECT SM_SNCODE FROM SNBINDMATERIAL WHERE SM_SNCODE IN (" + placeholders + ")";
|
|
|
+ existMaterial = new HashSet<>(baseDao.getJdbcTemplate().queryForList(queryMatSql, String.class, sncodes.toArray()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 生成消息(根据类型组合)
|
|
|
+ List<String> resData = new ArrayList<>();
|
|
|
+ for (String sn : sncodes) {
|
|
|
+ boolean hasInfo = existInfo.contains(sn);
|
|
|
+ boolean hasMat = existMaterial.contains(sn);
|
|
|
+
|
|
|
+ if (needInfo && needMaterial) { // ALL
|
|
|
+ if (!hasInfo && !hasMat) {
|
|
|
+ resData.add("sncode:" + sn + ",未绑定测试LOG采集信息和物料信息!");
|
|
|
+ } else if (!hasInfo) {
|
|
|
+ resData.add("sncode:" + sn + ",未绑定测试LOG采集信息!");
|
|
|
+ } else if (!hasMat) {
|
|
|
+ resData.add("sncode:" + sn + ",未绑定物料信息!");
|
|
|
+ }
|
|
|
+ } else if (needInfo) { // INFO
|
|
|
+ if (!hasInfo) {
|
|
|
+ resData.add("sncode:" + sn + ",未绑定测试LOG采集信息!");
|
|
|
+ }
|
|
|
+ } else if (needMaterial) { // MATERIAL
|
|
|
+ if (!hasMat) {
|
|
|
+ resData.add("sncode:" + sn + ",未绑定物料信息!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 执行迁移操作(插入历史 + 删除原表)
|
|
|
+ if (needInfo && !existInfo.isEmpty()) {
|
|
|
+ List<String> infoList = new ArrayList<>(existInfo);
|
|
|
+ String infoPlaceholders = String.join(",", Collections.nCopies(infoList.size(), "?"));
|
|
|
+
|
|
|
+ String insertInfoSql = "INSERT INTO SNBIND_INFO_HIS (SI_ID,SI_SNCODE,SI_PRODCODE,SI_MACODE,SI_CPU,SI_WIFI,SI_BT,SI_UUID,SI_BIOS,SI_OS,SI_EC,SI_DP,SI_INDATE,SIH_INDATE) " +
|
|
|
+ "SELECT SI_ID,SI_SNCODE,SI_PRODCODE,SI_MACODE,SI_CPU,SI_WIFI,SI_BT,SI_UUID,SI_BIOS,SI_OS,SI_EC,SI_DP,SI_INDATE,SYSDATE FROM SNBIND_INFO WHERE SI_SNCODE IN (" + infoPlaceholders + ")";
|
|
|
+ String deleteInfoSql = "DELETE FROM SNBIND_INFO WHERE SI_SNCODE IN (" + infoPlaceholders + ")";
|
|
|
+
|
|
|
+ baseDao.getJdbcTemplate().update(insertInfoSql, infoList.toArray());
|
|
|
+ baseDao.getJdbcTemplate().update(deleteInfoSql, infoList.toArray());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (needMaterial && !existMaterial.isEmpty()) {
|
|
|
+ List<String> matList = new ArrayList<>(existMaterial);
|
|
|
+ String matPlaceholders = String.join(",", Collections.nCopies(matList.size(), "?"));
|
|
|
+
|
|
|
+ String insertMatSql = "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,'删除解绑-SNBindDel' FROM SNBINDMATERIAL WHERE SM_SNCODE IN (" + matPlaceholders + ")";
|
|
|
+ String deleteMatSql = "DELETE FROM SNBINDMATERIAL WHERE SM_SNCODE IN (" + matPlaceholders + ")";
|
|
|
+
|
|
|
+ baseDao.getJdbcTemplate().update(insertMatSql, matList.toArray());
|
|
|
+ baseDao.getJdbcTemplate().update(deleteMatSql, matList.toArray());
|
|
|
+ }
|
|
|
+ if(existMaterial.isEmpty() && existInfo.isEmpty()) {
|
|
|
+ // 5. 返回成功(附带未绑定的消息,如有)
|
|
|
+ return ApiResponse.failRsp(ErrorMessage.BUSINESS_ILLEGAL.getCode(), requestId, "无符合删除要求的数据。"+String.join(";", resData));
|
|
|
+ }
|
|
|
+ // 5. 返回成功(附带未绑定的消息,如有)
|
|
|
+ return ApiResponse.successRsp("0", "操作成功", requestId, String.join(";", resData));
|
|
|
+ }
|
|
|
+
|
|
|
+ private SNBindDelRequest SNBindDelCheck(String requestId, String rawJson) {
|
|
|
+ SNBindDelRequest reqData;
|
|
|
+ try {
|
|
|
+ reqData = FlexJsonUtil.fromJson(rawJson, SNBindDelRequest.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new ApiSystemException(new ApiResult(ErrorMessage.ACCESSKEY_ILLEGAL.getCode(),requestId,"传参数据格式错误"));
|
|
|
+ }
|
|
|
+ // 手动校验
|
|
|
+ Set<ConstraintViolation<SNBindDelRequest>> violations = validator.validate(reqData);
|
|
|
+ if (!violations.isEmpty()) {
|
|
|
+ String msg = violations.stream()
|
|
|
+ .map(ConstraintViolation::getMessage)
|
|
|
+ .distinct() // 按消息内容去重
|
|
|
+ .collect(Collectors.joining(";"));
|
|
|
+ throw new ApiSystemException(new ApiResult(ErrorMessage.ACCESSKEY_ILLEGAL.getCode(),requestId,msg));
|
|
|
+ }
|
|
|
+ return reqData;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Transactional
|
|
|
public ApiResult<Map<Object, Object>> executeSNBindMaterial(String accessKey, String requestId, SNBindMaterialRequest reqData) {
|