|
|
@@ -1,6 +1,7 @@
|
|
|
package com.uas.eis.serviceImpl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.uas.eis.annotation.ApiLog;
|
|
|
import com.uas.eis.core.support.TokenHandler;
|
|
|
import com.uas.eis.dao.BaseDao;
|
|
|
import com.uas.eis.dao.SqlMap;
|
|
|
@@ -161,6 +162,119 @@ public class StepWorkServiceImpl implements StepWorkService {
|
|
|
return new StepWorkApiResult(true,200,"上传MES测试信息成功");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param data
|
|
|
+ * 数据格式
|
|
|
+ * {
|
|
|
+ * "SN":"序列号", //必填
|
|
|
+ * "DeviceType":"", //必填
|
|
|
+ * "MacStart":"",
|
|
|
+ * "MacEnd":"",
|
|
|
+ * "WholeDeviceCode":"",
|
|
|
+ * "CameraID":"",
|
|
|
+ * "ExtCode":"",
|
|
|
+ * "EncryKey":"",
|
|
|
+ * "RSANORM":""
|
|
|
+ * }
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @ApiLog(actionType = "产品SN个参校对成功")
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public StepWorkApiResult<Map<String, Object>> checkProdParam(HttpServletRequest request, String data) {
|
|
|
+ //解析data 获取数据
|
|
|
+ Map<Object,Object> map = BaseUtil.parseFormStoreToMap(data);
|
|
|
+ Object sn = map.get("SN");
|
|
|
+ if(!StringUtil.hasText(sn)){
|
|
|
+ return StepWorkApiResponse.failRsp("传参:SN,异常不能为空!");
|
|
|
+ }
|
|
|
+ Object prodcode = map.get("DeviceType");
|
|
|
+ if(!StringUtil.hasText(prodcode)){
|
|
|
+ return StepWorkApiResponse.failRsp("传参:DeviceType,异常不能为空!");
|
|
|
+ }
|
|
|
+ // 判断产品是否有设置个参字段
|
|
|
+ String paramCodes = null;
|
|
|
+ SqlRowList rsParam = baseDao.queryForRowSet(
|
|
|
+ "select wm_concat(pp_paramcode) as paramcodes " +
|
|
|
+ " from (select distinct pp_paramcode from product left join prodparam on pr_id=pp_prid " +
|
|
|
+ " where pr_code=? and pp_id>0 and pp_paramcode is not null)", prodcode);
|
|
|
+ if (rsParam.next()) {
|
|
|
+ paramCodes = rsParam.getGeneralString("paramcodes");
|
|
|
+ }
|
|
|
+ if (!StringUtil.hasText(paramCodes)) {
|
|
|
+ return StepWorkApiResponse.failRsp("产品[" + prodcode + "]未配置个参字段,无法校对!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据产品编号+sn号,寻找工作中心是组装的工单
|
|
|
+ String macode = "";
|
|
|
+ SqlRowList rs = baseDao.queryForRowSet("select ma_code from makeserial left join make on ma_code=ms_makecode where ms_sncode=? and ma_prodcode=? and ma_wccode='103'",sn,prodcode);
|
|
|
+ if(rs.next()){
|
|
|
+ macode = rs.getGeneralString("ma_code");
|
|
|
+ }else{
|
|
|
+ return StepWorkApiResponse.failRsp("(SN:"+sn+"和DeviceType:"+prodcode+"),未找到工作中心是组装的工单!");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 解析配置字段列表
|
|
|
+ Set<String> configFields = new HashSet<>();
|
|
|
+ for (String field : paramCodes.split(",")) {
|
|
|
+ configFields.add(field.trim().toUpperCase());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取传入参数(除 SN 外),key 转大写
|
|
|
+ Map<String, Object> inputMap = new HashMap<>();
|
|
|
+ for (Map.Entry<Object, Object> entry : map.entrySet()) {
|
|
|
+ String key = entry.getKey().toString();
|
|
|
+ if (!"SN".equalsIgnoreCase(key) && !"DEVICETYPE".equalsIgnoreCase(key)) {
|
|
|
+ inputMap.put(key.toUpperCase(), entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1. 校验字段一致性:传入字段必须在配置列表中,配置字段必须全部传入且非空
|
|
|
+ Set<String> inputFields = inputMap.keySet();
|
|
|
+ for (String field : inputFields) {
|
|
|
+ if (!configFields.contains(field)) {
|
|
|
+ return StepWorkApiResponse.failRsp("传入个参字段[" + field + "]不在产品个参配置中!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String field : configFields) {
|
|
|
+ Object value = inputMap.get(field);
|
|
|
+ if (value == null || !StringUtil.hasText(value.toString())) {
|
|
|
+ return StepWorkApiResponse.failRsp("产品个参设置字段[" + field + "]传入值为空,必须提供!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 2. 动态构建查询条件,检查 PRODPARAMDATA 中是否存在一条记录与传入数据完全匹配
|
|
|
+ StringBuilder sqlWhere = new StringBuilder(" where DeviceType=? and pd_makecode=? ");
|
|
|
+ List<Object> params = new ArrayList<>();
|
|
|
+ params.add(prodcode);
|
|
|
+ params.add(macode);
|
|
|
+
|
|
|
+ // 将配置的所有字段作为等值条件加入查询
|
|
|
+ for (String field : configFields) {
|
|
|
+ Object val = inputMap.get(field);
|
|
|
+ // 传入值必非空(已校验),直接做等值匹配
|
|
|
+ sqlWhere.append(" and ").append(field).append("=? ");
|
|
|
+ params.add(val.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ String sql = "select max(pd_id) from PRODPARAMDATA " + sqlWhere.toString();
|
|
|
+ int pd_id = baseDao.getJdbcTemplate().queryForObject(sql,Integer.class, params.toArray()); // 根据实际 DAO 调整方法名
|
|
|
+ if (pd_id > 0) {
|
|
|
+ baseDao.execute("update PRODPARAMDATA set pd_checkcount=nvl(pd_checkcount,0)+1 where pd_id=?",pd_id);
|
|
|
+ }else{
|
|
|
+ return StepWorkApiResponse.failRsp("工单[" + macode + "]+产品["+prodcode+"]中无任何个参数据与传入数据匹配!");
|
|
|
+ }
|
|
|
+ // ========== 所有校验通过,写入日志 ==========
|
|
|
+ long id = baseDao.getSeqId("PRODPARAMCHECKLOGGER_SEQ"); // 请确认序列名
|
|
|
+ String inman = request.getSession().getAttribute("usercode").toString(); // 从 request 或 session 获取操作人,示例留空
|
|
|
+ String sqlLog = "insert into prodparamchecklogger(pl_id, pl_indate, pl_inman, pl_sncode, pl_makecode, pl_prodcode) " +
|
|
|
+ "values(?, sysdate, ?, ?, ?, ?)";
|
|
|
+ baseDao.execute(sqlLog,id, inman,sn,macode,prodcode);
|
|
|
+ baseDao.saveClob("prodparamchecklogger", "PL_INDATA",data, "pl_id=" + id);
|
|
|
+ return new StepWorkApiResult(true,200,"SN:"+sn+",个参校对成功!");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 工单绑定,工序检测
|
|
|
*
|