diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/dto/QualitySystemDto.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/dto/QualitySystemDto.java index 2f8e256d..8c3ffcb0 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/dto/QualitySystemDto.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/dto/QualitySystemDto.java @@ -42,7 +42,7 @@ public class QualitySystemDto { /** * 图号 */ - private String number;//工单 + private String number;//图号 /** * 产品条码 */ @@ -75,7 +75,7 @@ public class QualitySystemDto { /** * 问题提报人 */ - private String pbUser; + private String submission_man_employee_no; /** * 表单标题 @@ -158,7 +158,7 @@ public class QualitySystemDto { /** * 责任人 */ - private String problem_owner;//责任人 + private String problem_owner_name;//责任人 /** * 发送用户组 */ diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/model/AbnormalBill.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/model/AbnormalBill.java index 27b6f193..80ef2875 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/model/AbnormalBill.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/model/AbnormalBill.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.activerecord.Model; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; /** *

@@ -257,6 +258,9 @@ public class AbnormalBill extends Model { @TableField(value = "BPM_SUBMIT") private String bpmSubmit; + @TableField(exist = false) + private List ncCodeDesc; + @TableField(exist = false) private String filePath; @@ -290,6 +294,13 @@ public class AbnormalBill extends Model { this.userConTime = userConTime; } + public List getNcCodeDesc() { + return ncCodeDesc; + } + + public void setNcCodeDesc(List ncCodeDesc) { + this.ncCodeDesc = ncCodeDesc; + } public String getBpmFlowId() { return bpmFlowId; diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/YunBpmService.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/YunBpmService.java index c90a5c5a..8b647877 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/YunBpmService.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/YunBpmService.java @@ -71,4 +71,18 @@ public interface YunBpmService { */ YunBpmApiRes saveQualitySystem(AbnormalBill abnormalBill, AbnormalBillDispose abnormalBillDispose, String ncGroup, String ncCode); + /** + * 提交待办任务 + * @author donglt + * @date 2021/8/14 23:55 + * @param sheetCode 表单CodegetH3URL + * @param workflowCode 工作流Code + * @param workflowFormId 表单ID + * @param workflowInstanceId 流程实例ID + * @param workItemId 任务ID + * @param replayToken ReplayToken + * @param accessToken AccessToken + * @return org.jeecg.modules.pq.yunbpm.bean.YunBpmApiRes + **/ + YunBpmApiRes defaultSubmitForm(String sheetCode, String workflowCode, String workflowFormId, String workflowInstanceId, String workItemId, String replayToken, String accessToken); } \ No newline at end of file diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillLogServiceImpl.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillLogServiceImpl.java index 9084c0cb..9fb8b698 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillLogServiceImpl.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillLogServiceImpl.java @@ -10,6 +10,7 @@ import com.foreverwin.mesnac.anomaly.model.AbnormalBillDispose; import com.foreverwin.mesnac.anomaly.model.AbnormalBillLog; import com.foreverwin.mesnac.anomaly.model.AbnormalNcCode; import com.foreverwin.mesnac.anomaly.service.*; +import com.foreverwin.mesnac.anomaly.utils.YunBpmApiRes; import com.foreverwin.mesnac.common.constant.Constants; import com.foreverwin.mesnac.common.enums.HandleEnum; import com.foreverwin.mesnac.meapi.mapper.ShopOrderMapper; @@ -17,6 +18,7 @@ import com.foreverwin.mesnac.meapi.model.Router; import com.foreverwin.mesnac.meapi.model.ShopOrder; import com.foreverwin.mesnac.meapi.service.NwaUserService; import com.foreverwin.mesnac.meapi.service.RouterService; +import com.foreverwin.modular.core.exception.BaseException; import com.foreverwin.modular.core.exception.BusinessException; import com.foreverwin.modular.core.util.CommonMethods; import com.foreverwin.modular.core.util.FrontPage; @@ -29,6 +31,8 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; + /** *

* 异常单记录表 服务实现类 @@ -70,6 +74,9 @@ public class AbnormalBillLogServiceImpl extends ServiceImpl selectPage(FrontPage frontPage, AbnormalBillLog abnormalBillLog) { @@ -91,6 +98,26 @@ public class AbnormalBillLogServiceImpl extends ServiceImpl abnormalBills = abnormalBillService.selectList(aBill); + if (abnormalBills.get(0).getBpmSubmit().equals("false")) { + //abnormalBill.setBpmSubmit("false"); + abnormalBill.setBpmFlowId(abnormalBills.get(0).getBpmFlowId()); + List NcCodeGroupList = (List)abnormalBill.getNcCodeDesc().stream().map((e) -> { + return e.split("/")[0]; + }).collect(Collectors.toList()); + YunBpmApiRes bpmApiRes = yunBpmService.saveQualitySystem(abnormalBill, abnormalBillDispose, + String.join(";", NcCodeGroupList), String.join(";", abnormalBill.getNcCodeDesc())); + if (!bpmApiRes.getErrCode().equals(0)) { + throw new BaseException("MES->质量BPM系统,修改失败"); + } + + } + if (!StringUtil.isBlank(abnormalBillDispose.getRouterBo())) { //分割该工艺路线 String[] routerSplit = abnormalBillDispose.getRouterBo().split(","); diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/YunBpmServiceImpl.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/YunBpmServiceImpl.java index b879a153..212c5a39 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/YunBpmServiceImpl.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/YunBpmServiceImpl.java @@ -9,6 +9,7 @@ import com.foreverwin.mesnac.anomaly.model.AbnormalBill; import com.foreverwin.mesnac.anomaly.model.AbnormalBillDispose; import com.foreverwin.mesnac.anomaly.service.YunBpmService; import com.foreverwin.mesnac.anomaly.utils.*; +import com.foreverwin.mesnac.common.constant.Constants; import com.foreverwin.mesnac.common.util.DateUtil; import com.foreverwin.mesnac.meapi.util.StringUtils; import org.apache.http.Consts; @@ -21,6 +22,8 @@ import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -35,7 +38,11 @@ import java.util.Map; */ @Service public class YunBpmServiceImpl implements YunBpmService { + private final Logger logger = LoggerFactory.getLogger(YunBpmServiceImpl.class); + private final static String DEFAULT_ACTION_CODE = "submit"; + private final static Boolean DEFAULT_AGREE = true; + private final static String DEFAULT_FORM_TYPE = "1"; @Override public YunBpmApiRes saveForm(Object formData, String owner, String ownerDeptId, String sheetCode, String workflowCode, String replayToken, String accessToken) { return saveOrUpdateForm(formData, owner, ownerDeptId, sheetCode, workflowCode, null, null, null, replayToken, accessToken); @@ -64,6 +71,7 @@ public class YunBpmServiceImpl implements YunBpmService { .product_barcode(abnormalBill.getSfc()).work_order(abnormalBill.getWorkOrder()).submit_date(DateUtil.getCurrentDate()) .item_number(abnormalBill.getItemNumber()).product_category(abnormalBill.getProductCategory()) .submission_users(abnormalBill.getReportSendUserGroup()).working_procedure_code(abnormalBill.getOperation()) + .submission_man_employee_no(abnormalBill.getPbUser()) //不良明细 .problem_description(abnormalBill.getPbDescription()).problem_number(abnormalBill.getPbQty()) .discover_link(abnormalBill.getDiscover()).entity_location(abnormalBill.getEntityLocation()) @@ -74,7 +82,7 @@ public class YunBpmServiceImpl implements YunBpmService { //责任划分 .cause_analysis(abnormalBillDispose.getDutyCauseDescription()).reason_type(abnormalBillDispose.getDutyCauseType()) .responsibility_type(abnormalBillDispose.getDutyType()).responsibility_dept(abnormalBillDispose.getDutyDepart()) - .problem_owner(abnormalBillDispose.getPrincipalUser()) + .problem_owner_name(abnormalBillDispose.getPrincipalUser()) //.send_user_group() /*//解决方案 .abnormalbill_programme().repair_process_route().repair_process_version() @@ -89,15 +97,54 @@ public class YunBpmServiceImpl implements YunBpmService { OAuthTokenInfo auth = getTokenByUserNameAndPassword(yunBpmConfig.userName, yunBpmConfig.passWord); YunBpmApiRes tokenRes = getReplayToken(auth.getAccess_token()); if (auth.getSuccess()) { - /** - * 新建bpm表单 - */ - YunBpmApiRes result = saveForm(qualitySystem, auth.getUser_id(), yunBpmConfig.deptId, - yunBpmConfig.workCode, yunBpmConfig.workCode, (String)tokenRes.getData(), auth.getAccess_token()); - /*YunBpmApiRes result = updateForm(qualitySystem, yunBpmConfig.workCode, yunBpmConfig.workCode, - "d9e5aa7ec13849aabf2a879aa94ebc15", "1165ec5df80f4df8ae615539de6fa7ff", "50f1f3cf78124e7ab91a0432f3aeb3f0", - (String) tokenRes.getData(), auth.getAccess_token());*/ - System.out.println(result.toString()); + YunBpmApiRes result = null; + if (abnormalBill.getStatus().equals("N")){ + //mes->bpm 提报 + try { + result = saveForm(qualitySystem, auth.getUser_id(), yunBpmConfig.deptId, + yunBpmConfig.workCode, yunBpmConfig.workCode, (String)tokenRes.getData(), auth.getAccess_token()); + String workflowInstanceId = JSON.parseObject(String.valueOf(result.getData())).getString("workflowInstanceId"); + abnormalBill.setBpmFlowId(workflowInstanceId); + //mes->bpm 提交 + String url = yunBpmConfig.getApiBaseUrl() + "/api/api/runtime/form/load?workflowInstanceId=" + abnormalBill.getBpmFlowId() + + "&access_token=" + auth.getAccess_token(); + + String res = HttpUtil.get(url); + JSONObject jsonObject = JSON.parseObject(res); + JSONObject jsonData = jsonObject.getJSONObject("data"); + String workItemId = jsonData.getString("workItemId"); + String workflowFormId = jsonData.getJSONObject("bizObject").getJSONObject("data").getString("id"); + result = defaultSubmitForm(yunBpmConfig.workCode, yunBpmConfig.workCode,workflowFormId, abnormalBill.getBpmFlowId(), + workItemId,(String)tokenRes.getData(), auth.getAccess_token()); + } catch (Exception e) { + logger.error("bpm表单返回错误结果:" + e.toString(),result); + } + }else { + String url = yunBpmConfig.getApiBaseUrl() + "/api/api/runtime/form/load?workflowInstanceId=" + abnormalBill.getBpmFlowId() + + "&access_token=" + auth.getAccess_token(); + String res = HttpUtil.get(url); + JSONObject jsonObject = JSON.parseObject(res); + JSONObject jsonData = jsonObject.getJSONObject("data"); + String workItemId = jsonData.getString("workItemId"); + String workflowFormId = jsonData.getJSONObject("bizObject").getJSONObject("data").getString("id"); + if (!abnormalBill.getStatus().equals(Constants.SHUT_DOWN)){ + //保存 + result = updateForm(qualitySystem, yunBpmConfig.workCode, yunBpmConfig.workCode, + workflowFormId, abnormalBill.getBpmFlowId(), workItemId, + (String) tokenRes.getData(), auth.getAccess_token()); + }else { + //闭关关闭 + JSONObject jsonObj = new JSONObject(); + jsonObj.put("abnormalbill_reason",abnormalBillDispose.getAbnormalReason()); + jsonObj.put("preventive_measure",abnormalBillDispose.getBeforeMeasure()); + jsonObj.put("mes_status",0); + System.out.println(jsonObj); + result = updateForm(jsonObj, yunBpmConfig.workCode, yunBpmConfig.workCode, + workflowFormId, abnormalBill.getBpmFlowId(), workItemId, + (String) tokenRes.getData(), auth.getAccess_token()); + } + } + logger.info("bpm表单返回结果:" + result.toString()); return result; } return null; @@ -140,10 +187,59 @@ public class YunBpmServiceImpl implements YunBpmService { String requestUrl = yunBpmConfig.getApiBaseUrl() + String.format(YunBpmApis.SAVE_OR_UPDATE_FORM, accessToken); String jsons = JSONUtil.toJsonStr(saveFormModel); + System.out.println(jsons); String respBody = HttpUtil.post(requestUrl, JSONUtil.toJsonStr(saveFormModel)); return JSONUtil.toBean(respBody, YunBpmApiRes.class); } + @Override + public YunBpmApiRes defaultSubmitForm(String sheetCode, String workflowCode, String workflowFormId, String workflowInstanceId, String workItemId, String replayToken, String accessToken) { + return submitForm(DEFAULT_ACTION_CODE,DEFAULT_AGREE,DEFAULT_FORM_TYPE, sheetCode, workflowCode, workflowFormId, workflowInstanceId, workItemId, replayToken, accessToken); + } + + /** + * 提交待办任务 + * @author donglt + * @date 2021/8/14 23:55 + * @param actionCode 操作按钮编码,提交submit,同意agree,不同意disAgree + * @param agree 是否同意, true:同意。false:不同意 + * @param formType 表单类型: 1:流程表单,2:业务表单 + * @param sheetCode 表单Code + * @param workflowCode 工作流Code + * @param workflowFormId 表单ID + * @param workflowInstanceId 流程实例ID + * @param workItemId 任务ID + * @param replayToken ReplayToken + * @param accessToken AccessToken + * @return org.jeecg.modules.pq.yunbpm.bean.YunBpmApiRes + **/ + private YunBpmApiRes submitForm(String actionCode,Boolean agree,String formType, String sheetCode,String workflowCode, String workflowFormId, String workflowInstanceId, String workItemId, String replayToken, String accessToken) { + String requestUrl = yunBpmConfig.getApiBaseUrl() + String.format(YunBpmApis.FORM_SUBMIT,accessToken); + Map formData = new HashMap<>(); + formData.put("id", workflowFormId); + + BizObjectModel bizObjectModel = BizObjectModel.builder() + .data(formData) + .id(workflowFormId) + .sheetCode(sheetCode) + .schemaCode(sheetCode) + .workflowInstanceId(workflowInstanceId) + .build(); + + SubmitFormModel submitFormModel = SubmitFormModel.builder() + .actionCode(actionCode) + .agree(agree) + .formType(formType) + .replayToken(replayToken) + .workflowCode(workflowCode) + .workItemId(workItemId) + .workflowInstanceId(workflowInstanceId) + .bizObject(bizObjectModel) + .build(); + + String respBody = HttpUtil.post(requestUrl, JSONUtil.toJsonStr(submitFormModel)); + return JSONUtil.toBean(respBody, YunBpmApiRes.class); + } /** * 用户鉴权 diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/AttachmentModel.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/AttachmentModel.java new file mode 100644 index 00000000..877790dd --- /dev/null +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/AttachmentModel.java @@ -0,0 +1,73 @@ +package com.foreverwin.mesnac.anomaly.utils; + +import lombok.Data; + +import java.util.Date; + +/** + * AttachmentModel + * TODO + * + * @author donglt + * @version 1.0 + * @date 2021/8/12 01:20 + */ +@Data +public class AttachmentModel { + + /** + * base64图片改造 + */ + private String base64ImageStr; + + /** + * 创建人id + */ + private String createdBy; + + private Date createdTime; + + private Boolean deleted; + /** + * 资源文件扩展名 + */ + private String fileExtension; + /** + * 资源大小 + */ + private Integer fileSize; + /** + * 资源id + */ + private String id; + + /** + * 资源mime type + */ + private String mimeType; + + /** + * 修改人id + */ + private String modifiedBy; + + private Date modifiedTime; + + /** + * 资源名称 + */ + private String name; + + /** + * 资源关联id + */ + private String refId; + + private String remarks; + + /** + * 模型编码 + */ + private String schemaCode; + +} diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/BizCommentModel.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/BizCommentModel.java new file mode 100644 index 00000000..7fcd84fc --- /dev/null +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/BizCommentModel.java @@ -0,0 +1,107 @@ +package com.foreverwin.mesnac.anomaly.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * Approval + * TODO + * + * @author donglt + * @version 1.0 + * @date 2021/8/12 01:06 + */ +@Data +@Builder +@JsonInclude(value= JsonInclude.Include.NON_NULL) +public class BizCommentModel { + /** + * 审批对应操作类型. 1 审批 2 协办 3 加签 4 转办 5 作废 6 结束流程 7: 系统自动添加. 其中2, 3不需要审批结果 + */ + private String actionType; + + /** + * 节点编码 + */ + private String activityCode; + + /** + * 节点名称 + */ + private String activityName; + + /** + * 业务对象id + */ + private String bizObjectId; + + /** + * 数据项编码 + */ + private String bizPropertyCode; + /** + * 审批时间 + */ + private Date commentTime; + /** + * 审批意见内容 + */ + private String content; + /** + * 创建人id + */ + private String createdBy; + /** + * 创建时间 + */ + private Date createdTime; + /** + * 创建人 + */ + private String creater; + private Boolean deleted; + private String id; + /** + * 修改人id + */ + private Date modifiedBy; + private Date modifiedTime; + /** + * 协办、加签关联用户. 格式同选人控件的存储值: [{id: "xxx", type: 3}] + */ + private String relUsers; + private String remarks; + /** + * 审批结果. 1: 同意, 2: 不同意, 3: 转办, 0或null: 空(无意义的值)', + */ + private String result; + /** + * 数据模型编码 + */ + private String schemaCode; + /** + * 任务id + */ + private Integer tokenId; + /** + * 任务id + */ + private String workItemId; + /** + * 流程实例id + */ + private String workflowInstanceId; + /** + * 任务的TokenId + */ + private String workflowTokenId; + + /** + * 关联的附件资源 + **/ + private List resources; +} diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/yunBpmConfig.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/yunBpmConfig.java index 6341a5a1..a07f4217 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/yunBpmConfig.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/utils/yunBpmConfig.java @@ -9,12 +9,17 @@ public class yunBpmConfig { public static final String userName = "zhangzy"; public static final String passWord = "123456"; - public static final String apiBaseUrl = "http://yunbpmcs.mesnac.com:8080"; + public static final String apiBaseUrl = "http://yunbpmcs.mesnac.com:8080";//测试 + //public static final String apiBaseUrl = "http://754f8392.r2.cpolar.top";//测试 + public static final String apiBaseToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXBpIl0sImNvcnBJZCI6bnVsbCwidXNlcl9pZCI6ImU1MGVmMDE2NzhkZDQ2MGViZWUwNmYwZjE5OTU4M2JjIiwidXNlcl9uYW1lIjoiMjYyMjI2MTY0NTcwMzE3MCIsInNjb3BlIjpbInJlYWQiXSwibW9iaWxlIjpmYWxzZSwiaXNBZG1pbiI6dHJ1ZSwiZXhwIjoxNjYyNjI3MTM3LCJpc0FwcEFkbWluIjpmYWxzZSwiYXV0aG9yaXRpZXMiOlsiVVNFUiIsIkFVVEhfU1lTVEVNX01BTkFHRSJdLCJqdGkiOiI1YmJhNjQ3Yy0yNWNkLTRhZTMtYmRlMC0zYjE4NDYyZGI5YmYiLCJjbGllbnRfaWQiOiJhcGkifQ.NiQUUBapr9K5Tx3xIJzRaRfk426Rwl9bUiRCRpsF_fIQp19wot9FXJQWMTKF7mLkjbKxo6IBAfo-mGkpQRC_WLjaRnMGzVxalwXojN95KR1NAvAgSyiEsgwFDdatW_Yiwan4orHZHUc1Q_eyr_8AmZ-OIWrhFhS9hosky4FQx-v7M_L065a5xW8MDeuMOUSSoVWcxZP1Obo12PAMGHMBl36TJR4C7XanBSLw0kW7K3Ab6fhlJ6QLLC8SOb3dC4LTJToxFmXRNU7REKIs5Vu6087hJM7eSttZNu4aaSwqxeigWulHMFJGktSzQKl50l8breWXyb7AxcgvI0wG-FmA6g";//测试 + //public static final String apiBaseUrl = "http://yunbpm.mesnac.com:8080";//正式 /** * 上传附件url */ public static final String urlStr = "http://yunbpmcs.mesnac.com:8080/api/api/aliyun/upload"; + public static final String clientSecret = "c31b32364ce19ca8fcd150a417ecce58"; + public static final String clientId = "api"; /** * 部门Id