ng_cws_client.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package ng_cws_client
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "git.sxidc.com/service-supports/cws-sdk/service"
  6. "git.sxidc.com/service-supports/cws-sdk/service/request"
  7. "git.sxidc.com/service-supports/cws-sdk/service/response"
  8. "git.sxidc.com/service-supports/cws-sdk/utils"
  9. "git.sxidc.com/service-supports/cws-sdk/utils/http_client"
  10. "git.sxidc.com/service-supports/cws-sdk/utils/request_util"
  11. "strings"
  12. "time"
  13. )
  14. var NGCwsClient *http_client.Client
  15. var cwsUrl string
  16. var cwsTimeOut time.Duration
  17. func Init(url string, timeout time.Duration) error {
  18. if utils.IsStringEmpty(url) {
  19. return errors.New("未配置CWS地址")
  20. }
  21. NGCwsClient = http_client.New()
  22. cwsTimeOut = timeout
  23. //判断是否有 /
  24. if !strings.HasSuffix(url, "/") {
  25. url = url + "/"
  26. }
  27. cwsUrl = url
  28. return nil
  29. }
  30. func Destroy() {
  31. http_client.Destroy(NGCwsClient)
  32. }
  33. func StartWorkFlowByBusinessType(reqParams *request.StartWorkFlowByBusinessTypeRequest) (string, error) {
  34. //根据业务类型获取流程模型ID
  35. workflowTemplateId, err := getWorkTemplateInfoByBusinessTypeApi(reqParams.BusinessType, reqParams.TenantID)
  36. if err != nil {
  37. return "", err
  38. }
  39. if utils.IsStringEmpty(workflowTemplateId) {
  40. return "", errors.New("该业务类型未配置流程")
  41. }
  42. //发起流程前校验 获取人员组织信息
  43. customStructureInfo, err := LaunchWorkflowPrepare(&request.LaunchWorkflowPrepareParams{
  44. WorkflowTemplateID: workflowTemplateId,
  45. CreateUserID: reqParams.CreateUserID,
  46. TenantID: reqParams.TenantID,
  47. })
  48. if err != nil {
  49. return "", err
  50. }
  51. jsonBytes, err := json.Marshal(reqParams.Data)
  52. if err != nil {
  53. return "", err
  54. }
  55. businessEntityObjectStr := string(jsonBytes)
  56. workflowId, err := StartWorkflow(&request.StartWorkflowRequest{
  57. WorkflowTemplateID: workflowTemplateId,
  58. LaunchUserName: reqParams.LaunchUserName,
  59. Matter: reqParams.Matter,
  60. BusinessEntityObject: businessEntityObjectStr,
  61. BusinessObject: businessEntityObjectStr,
  62. UserStructureID: customStructureInfo.ID,
  63. CreateUserID: reqParams.CreateUserID,
  64. TenantID: reqParams.TenantID,
  65. })
  66. if err != nil {
  67. return "", err
  68. }
  69. return workflowId, nil
  70. }
  71. func StartWorkFlowWithoutPrepareByBusinessType(reqParams *request.StartWorkFlowWithoutPrepareByBusinessTypeRequest) (string, error) {
  72. //根据业务类型获取流程模型ID
  73. workflowTemplateId, err := getWorkTemplateInfoByBusinessTypeApi(reqParams.BusinessType, reqParams.TenantID)
  74. if err != nil {
  75. return "", err
  76. }
  77. if utils.IsStringEmpty(workflowTemplateId) {
  78. return "", errors.New("该业务类型未配置流程")
  79. }
  80. jsonBytes, err := json.Marshal(reqParams.Data)
  81. if err != nil {
  82. return "", err
  83. }
  84. businessEntityObjectStr := string(jsonBytes)
  85. workflowId, err := StartWorkflow(&request.StartWorkflowRequest{
  86. WorkflowTemplateID: workflowTemplateId,
  87. LaunchUserName: reqParams.LaunchUserName,
  88. Matter: reqParams.Matter,
  89. BusinessEntityObject: businessEntityObjectStr,
  90. BusinessObject: businessEntityObjectStr,
  91. UserStructureID: reqParams.UserStructureID,
  92. CreateUserID: reqParams.CreateUserID,
  93. TenantID: reqParams.TenantID,
  94. ChoiceApproveInfos: reqParams.ChoiceApproveInfos,
  95. })
  96. if err != nil {
  97. return "", err
  98. }
  99. return workflowId, nil
  100. }
  101. func StartWorkflowTemplate(reqParams *request.StartWorkflowTemplateRequest) (string, error) {
  102. if utils.IsStringEmpty(cwsUrl) {
  103. return "", errors.New("未配置CWS地址")
  104. }
  105. //发起流程前校验 获取人员组织信息
  106. customStructureInfo, err := LaunchWorkflowTemplatePrepare(&request.LaunchWorkflowTemplatePrepareParams{
  107. StructureRootID: reqParams.StructureRootID,
  108. CreateUserID: reqParams.CreateUserID,
  109. TenantID: reqParams.TenantID,
  110. })
  111. if err != nil {
  112. return "", err
  113. }
  114. jsonBytes, err := json.Marshal(reqParams.Data)
  115. if err != nil {
  116. return "", err
  117. }
  118. businessEntityObjectStr := string(jsonBytes)
  119. reqJsonParams := &request.StartWorkflowTemplateRequest{
  120. StructureRootID: reqParams.StructureRootID,
  121. WorkflowTemplateName: reqParams.WorkflowTemplateName,
  122. Process: reqParams.Process,
  123. LaunchUserName: reqParams.LaunchUserName,
  124. Matter: reqParams.Matter,
  125. BusinessEntityObject: businessEntityObjectStr,
  126. BusinessObject: businessEntityObjectStr,
  127. UserStructureID: customStructureInfo.ID,
  128. CreateUserID: reqParams.CreateUserID,
  129. TenantID: reqParams.TenantID,
  130. }
  131. if err != nil {
  132. return "", err
  133. }
  134. requestJson, err := json.Marshal(reqJsonParams)
  135. if err != nil {
  136. return "", err
  137. }
  138. postResponse, err := NGCwsClient.NewRequest(http_client.WithNewRequestTimeout(cwsTimeOut)).
  139. Post(cwsUrl+service.StartWorkFlowTemplateMethodName, requestJson)
  140. if err != nil {
  141. return "", err
  142. }
  143. resp := new(response.InfoResponse[string])
  144. err = postResponse.Json(resp)
  145. if err != nil {
  146. return "", err
  147. }
  148. if !resp.Success {
  149. return "", errors.New(resp.Msg)
  150. }
  151. return resp.Info, nil
  152. }
  153. func StartWorkflow(reqParams *request.StartWorkflowRequest) (string, error) {
  154. if utils.IsStringEmpty(cwsUrl) {
  155. return "", errors.New("未配置CWS地址")
  156. }
  157. reqMap := request_util.StructToMap(reqParams)
  158. for nodeID, userIDs := range reqParams.ChoiceApproveInfos {
  159. reqMap[nodeID] = userIDs
  160. }
  161. requestJson, err := json.Marshal(reqMap)
  162. if err != nil {
  163. return "", err
  164. }
  165. postResponse, err := NGCwsClient.NewRequest(http_client.WithNewRequestTimeout(cwsTimeOut)).
  166. Post(cwsUrl+service.StartWorkFlowMethodName, requestJson)
  167. if err != nil {
  168. return "", err
  169. }
  170. resp := new(response.InfoResponse[string])
  171. err = postResponse.Json(resp)
  172. if err != nil {
  173. return "", err
  174. }
  175. if !resp.Success {
  176. return "", errors.New(resp.Msg)
  177. }
  178. return resp.Info, nil
  179. }
  180. func LaunchWorkflowTemplatePrepare(reqParams *request.LaunchWorkflowTemplatePrepareParams) (*response.CustomStructureInfo, error) {
  181. requestJson, err := json.Marshal(reqParams)
  182. if err != nil {
  183. return nil, err
  184. }
  185. postResponse, err := NGCwsClient.NewRequest(http_client.WithNewRequestTimeout(cwsTimeOut)).
  186. Post(cwsUrl+service.StartWorkFlowTemplatePrepareMethodName, requestJson)
  187. if err != nil {
  188. return nil, err
  189. }
  190. resp := new(response.InfosResponse[response.PrepareInfo])
  191. err = postResponse.Json(resp)
  192. if err != nil {
  193. return nil, err
  194. }
  195. if !resp.Success {
  196. return nil, errors.New(resp.Msg)
  197. }
  198. customStructureInfo := &response.CustomStructureInfo{}
  199. for _, info := range resp.Infos {
  200. if info.ID == "userStructureId" {
  201. customStructureInfo.ID = info.Options[0].Value
  202. break
  203. }
  204. }
  205. return customStructureInfo, nil
  206. }
  207. func LaunchWorkflowPrepare(reqParams *request.LaunchWorkflowPrepareParams) (*response.CustomStructureInfo, error) {
  208. resp, err := launchWorkflowPrepareApi(reqParams)
  209. if err != nil {
  210. return nil, err
  211. }
  212. customStructureInfo := &response.CustomStructureInfo{}
  213. for _, info := range resp.Infos {
  214. if info.ID == "userStructureId" {
  215. customStructureInfo.ID = info.Options[0].Value
  216. break
  217. }
  218. }
  219. return customStructureInfo, nil
  220. }
  221. func LaunchWorkflowByBusinessTypePrepare(tenantID string, businessType string, createUserID string) ([]response.PrepareInfo, error) {
  222. //根据业务类型获取流程模型ID
  223. workflowTemplateId, err := getWorkTemplateInfoByBusinessTypeApi(businessType, tenantID)
  224. if err != nil {
  225. return nil, err
  226. }
  227. if utils.IsStringEmpty(workflowTemplateId) {
  228. return nil, errors.New("该业务类型未配置流程")
  229. }
  230. //发起流程前校验 获取人员组织信息
  231. resp, err := launchWorkflowPrepareApi(&request.LaunchWorkflowPrepareParams{
  232. WorkflowTemplateID: workflowTemplateId,
  233. CreateUserID: createUserID,
  234. TenantID: tenantID,
  235. })
  236. if err != nil {
  237. return nil, err
  238. }
  239. return resp.Infos, nil
  240. }