seal.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. package controllers
  2. import (
  3. "encoding/json"
  4. sealReq "hongze/hongze_mobile_admin/models/request/seal"
  5. sealResp "hongze/hongze_mobile_admin/models/response/seal"
  6. "hongze/hongze_mobile_admin/models/tables/seal"
  7. contractService "hongze/hongze_mobile_admin/services/contract"
  8. sealService "hongze/hongze_mobile_admin/services/seal"
  9. "hongze/hongze_mobile_admin/utils"
  10. "path"
  11. "rdluck_tools/paging"
  12. "strconv"
  13. )
  14. //SealCommon
  15. //用印模块
  16. type SealCommon struct {
  17. BaseAuth
  18. }
  19. //Add
  20. // @Title 新增用印
  21. // @Description 新增用印接口
  22. // @Param request body seal.AddReq true "type json string"
  23. // @Success Ret=200 新增用印成功
  24. // @router /add [post]
  25. func (c *SealCommon) Add() {
  26. var req sealReq.AddReq
  27. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  28. if err != nil {
  29. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  30. return
  31. }
  32. //参数校验
  33. paramVerify := utils.Rules{
  34. "Use": {utils.NotEmpty()},
  35. "CompanyName": {utils.NotEmpty()},
  36. "CreditCode": {utils.NotEmpty()},
  37. "ServiceType": {utils.NotEmpty()},
  38. "SealType": {utils.NotEmpty()},
  39. "FileUrl": {utils.NotEmpty()},
  40. }
  41. err = utils.Verify(req, paramVerify, utils.LANG_CN)
  42. if err != nil {
  43. c.FailWithMessage("缺少参数", err.Error())
  44. return
  45. }
  46. sealInfo, err := sealService.AddSeal(c.AdminWx.AdminId, req.ContractId, req.FileNum, c.AdminWx.RealName, req.Use, req.UseCompanyName, req.CompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl)
  47. if err != nil {
  48. c.FailWithMessage("用印添加失败", err.Error())
  49. return
  50. }
  51. err = sealService.Apply(sealInfo)
  52. if err != nil {
  53. c.FailWithMessage("发起用印审批失败", "发起用印审批失败,Err:"+err.Error())
  54. return
  55. }
  56. c.OkDetailed(sealResp.AddSealResp{
  57. SealId: sealInfo.SealId,
  58. }, "发起用印审批成功")
  59. }
  60. //Edit
  61. // @Title 编辑用印
  62. // @Description 编辑用印接口
  63. // @Param request body seal.EditReq true "type json string"
  64. // @Success 200 {object} seal.AddSealResp
  65. // @router /edit [post]
  66. func (c *SealCommon) Edit() {
  67. var req sealReq.EditReq
  68. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  69. if err != nil {
  70. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  71. return
  72. }
  73. //参数校验
  74. paramVerify := utils.Rules{
  75. "SealId": {utils.NotEmpty()},
  76. "Use": {utils.NotEmpty()},
  77. "CompanyName": {utils.NotEmpty()},
  78. "CreditCode": {utils.NotEmpty()},
  79. "ServiceType": {utils.NotEmpty()},
  80. "SealType": {utils.NotEmpty()},
  81. "FileUrl": {utils.NotEmpty()},
  82. }
  83. err = utils.Verify(req, paramVerify, utils.LANG_CN)
  84. if req.SealId <= 0 {
  85. c.FailWithMessage("合同编号必传!", "合同编号必传!")
  86. return
  87. }
  88. sealInfo, err := sealService.Edit(req.SealId, c.AdminWx.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl)
  89. if err != nil {
  90. c.FailWithMessage("修改合同失败!", "修改合同失败,Err:"+err.Error())
  91. return
  92. }
  93. tmpErr := sealService.Apply(sealInfo)
  94. if tmpErr != nil {
  95. c.FailWithMessage("发起重申失败!", "发起重申失败,Err:"+tmpErr.Error())
  96. return
  97. }
  98. c.OkDetailed(sealResp.AddSealResp{
  99. SealId: sealInfo.SealId,
  100. }, "发起重申成功")
  101. }
  102. //CheckEdit
  103. // @Title 审批者编辑用印
  104. // @Description 审批者编辑用印接口
  105. // @Param request body seal.CheckEditReq true "type json string"
  106. // @Success 200 {object} seal.AddSealResp
  107. // @router /check_edit [post]
  108. func (c *SealCommon) CheckEdit() {
  109. var req sealReq.CheckEditReq
  110. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  111. if err != nil {
  112. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  113. return
  114. }
  115. //参数校验
  116. paramVerify := utils.Rules{
  117. "SealId": {utils.NotEmpty()},
  118. "Use": {utils.NotEmpty()},
  119. "CompanyName": {utils.NotEmpty()},
  120. "CreditCode": {utils.NotEmpty()},
  121. "ServiceType": {utils.NotEmpty()},
  122. "SealType": {utils.NotEmpty()},
  123. "FileUrl": {utils.NotEmpty()},
  124. }
  125. err = utils.Verify(req, paramVerify, utils.LANG_CN)
  126. sealId := req.SealId
  127. if sealId <= 0 {
  128. c.FailWithMessage("请传入用印单编号!", "请传入用印单编号!")
  129. return
  130. }
  131. //数据校验(校验是否具有审批权限)
  132. sealInfo, approvalInfo, approvalRecord, err := sealService.CheckApproveAuth(sealId, c.AdminWx)
  133. //合规修改
  134. err = sealService.CheckEdit(sealInfo, approvalInfo, approvalRecord, req.FileNum, req.FileUrl, req.Use, req.SealType, req.Remark, c.AdminWx)
  135. if err != nil {
  136. c.FailWithMessage("修改合同失败!", "修改合同失败,Err:"+err.Error())
  137. return
  138. }
  139. c.OkDetailed(sealResp.AddSealResp{
  140. SealId: sealInfo.SealId,
  141. }, "修改合同成功")
  142. }
  143. // List
  144. // @Title 用印列表
  145. // @Description 用印列表接口
  146. // @Param Status query string false "合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回'"
  147. // @Param ProductId query int false "客户类型:传0或者不传为当前账号权限,1 代表是:ficc;2 代表是:权益"
  148. // @Param ModifyStartTime query string false "服务更新时间的选择开始时间,格式:2021-05-23 00:00:00"
  149. // @Param ModifyEndTime query string false "服务更新时间的选择结束时间,格式:2021-05-26 23:59:59"
  150. // @Param AdminId query string false "选择的用户id"
  151. // @Param Keyword query string false "搜索关键字"
  152. // @Param KeywordEq query string false "搜索关键字(全匹配搜索)"
  153. // @Success 200 {object} contract.ContractListResp
  154. // @router /list [get]
  155. func (c *SealCommon) List() {
  156. //合同类型、产品类型、合同状态、更新时间、所选销售
  157. //关键字:合同编号、客户名称,社会信用码
  158. status := c.GetString("Status")
  159. productId, _ := c.GetInt("ProductId")
  160. modifyStartTime := c.GetString("ModifyStartTime")
  161. modifyEndTime := c.GetString("ModifyEndTime")
  162. adminIds := c.GetString("AdminId")
  163. keyword := c.GetString("Keyword")
  164. keywordEq := c.GetString("KeywordEq")
  165. condition := ""
  166. pars := make([]interface{}, 0)
  167. //合同类型、、更新时间、所选销售
  168. //关键字:合同编号、客户名称,社会信用码
  169. //合同状态
  170. if status != "" {
  171. condition += ` AND status = ? `
  172. pars = append(pars, status)
  173. }
  174. //产品类型
  175. if productId > 0 {
  176. condition += ` AND product_id = ? `
  177. pars = append(pars, productId)
  178. }
  179. //所选销售
  180. if adminIds != "" {
  181. condition += ` AND user_id IN (` + adminIds + `) `
  182. } else {
  183. condition += ` AND user_id =?`
  184. pars = append(pars, c.AdminWx.AdminId)
  185. }
  186. //更新开始时间
  187. if modifyStartTime != "" {
  188. condition += ` AND modify_time >= ? `
  189. pars = append(pars, modifyStartTime)
  190. }
  191. //更新结束时间
  192. if modifyEndTime != "" {
  193. condition += ` AND modify_time <= ? `
  194. pars = append(pars, modifyEndTime)
  195. }
  196. //关键字
  197. if keyword != "" {
  198. condition += ` AND (code LIKE '%` + keyword + `%' OR company_name LIKE '%` + keyword + `%' OR credit_code LIKE '%` + keyword + `%' ) `
  199. }
  200. //关键字(全等)
  201. if keywordEq != "" {
  202. condition += ` AND (c.use_company_name =? OR c.company_name =?) `
  203. pars = append(pars, keywordEq, keywordEq)
  204. }
  205. pageSize, _ := c.GetInt("PageSize")
  206. currentIndex, _ := c.GetInt("CurrentIndex")
  207. var startSize int
  208. if pageSize <= 0 {
  209. pageSize = utils.PageSize20
  210. }
  211. if currentIndex <= 0 {
  212. currentIndex = 1
  213. }
  214. startSize = paging.StartIndex(currentIndex, pageSize)
  215. total, err := seal.GetListCount(condition, pars)
  216. if err != nil {
  217. c.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
  218. return
  219. }
  220. list, err := seal.GetList(condition, pars, startSize, pageSize)
  221. if err != nil {
  222. c.FailWithMessage("获取合同列表失败", "获取合同列表失败,Err:"+err.Error())
  223. return
  224. }
  225. page := paging.GetPaging(currentIndex, pageSize, total)
  226. c.OkDetailed(sealResp.RespSealList{
  227. List: list,
  228. Paging: page,
  229. }, "获取成功")
  230. }
  231. //Detail
  232. // @Title 获取用印详情
  233. // @Description 获取用印详情接口
  234. // @Param SealId query int true "用印id"
  235. // @Success 200 {object} seal.SealDetailResp
  236. // @router /detail [get]
  237. func (c *SealCommon) Detail() {
  238. //合同类型、产品类型、合同状态、更新时间、所选销售
  239. //关键字:合同编号、客户名称,社会信用码
  240. sealId, _ := c.GetInt("SealId")
  241. //用印id
  242. if sealId <= 0 {
  243. c.FailWithMessage("用印id必传!", "用印id必传!")
  244. return
  245. }
  246. sealInfo, flowNodeListResp, opButton, err := sealService.GetSealDetailBySealId(sealId, c.AdminWx)
  247. if err != nil {
  248. c.FailWithMessage("获取详情失败", "获取详情失败,Err:"+err.Error())
  249. return
  250. }
  251. resp := sealResp.SealDetailResp{
  252. SealDetail: sealInfo,
  253. FlowNodeList: flowNodeListResp,
  254. OpButton: opButton,
  255. }
  256. c.OkDetailed(resp, "获取成功")
  257. }
  258. //Invalid
  259. // @Title 作废合同
  260. // @Description 作废合同接口
  261. // @Param request body seal.InvalidReq true "type json string"
  262. // @Success Ret=200 作废成功
  263. // @router /invalid [post]
  264. func (c *SealCommon) Invalid() {
  265. var req sealReq.InvalidReq
  266. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  267. if err != nil {
  268. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  269. return
  270. }
  271. //用印id
  272. if req.SealId <= 0 {
  273. c.FailWithMessage("用印id必传!", "用印id必传!")
  274. return
  275. }
  276. err = sealService.Invalid(req.SealId, c.AdminWx, req.IsInvalidContract)
  277. if err != nil {
  278. c.FailWithMessage("作废用印失败!", "作废用印失败,Err:"+err.Error())
  279. return
  280. }
  281. c.OkWithMessage("作废成功")
  282. return
  283. }
  284. // UploadCheckBackFile
  285. // @Title 上传签回附件
  286. // @Description 上传签回附件接口
  287. // @Param request body seal.UploadCheckBackFileReq true "type json string"
  288. // @Success Ret=200 上传成功
  289. // @router /upload_check_back_file [post]
  290. func (c *SealCommon) UploadCheckBackFile() {
  291. //var req sealReq.UploadCheckBackFileReq
  292. //err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  293. //if err != nil {
  294. // c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  295. // return
  296. //}
  297. ////用印编号
  298. //if req.SealId <= 0 {
  299. // c.FailWithMessage("请传入用印编号!", "请传入用印编号")
  300. // return
  301. //}
  302. //
  303. //if req.FileUrl == "" {
  304. // c.FailWithMessage("请先上传附件!", "请先上传附件")
  305. // return
  306. //}
  307. sealIdStr := c.Ctx.Request.Form.Get("SealId")
  308. if sealIdStr == "" {
  309. c.FailWithMessage("用印ID必传!", "用印ID必传")
  310. return
  311. }
  312. sealId, err := strconv.Atoi(sealIdStr)
  313. if err != nil {
  314. c.FailWithMessage("用印ID异常!", "用印ID必传")
  315. return
  316. }
  317. //合同编号
  318. if sealId <= 0 {
  319. c.FailWithMessage("请传入用印编号", "请传入用印编号")
  320. return
  321. }
  322. fileMulti, h, err := c.GetFile("file")
  323. if err != nil {
  324. c.FailWithMessage("获取资源信息失败", "获取资源信息失败,Err:"+err.Error())
  325. return
  326. }
  327. ext := path.Ext(h.Filename)
  328. //sealInfo, err := sealService.UploadCheckBackFile(req.SealId, req.FileUrl, c.AdminWx)
  329. sealInfo, err := sealService.UploadCheckBackFileByFile(sealId, ext, fileMulti, c.AdminWx)
  330. if err != nil {
  331. c.FailWithMessage("更新签回附件失败!", "更新签回附件失败,Err:"+err.Error())
  332. return
  333. }
  334. //如果是系统合同,那么需要去更新系统的签回附件
  335. if sealInfo.ContractId > 0 {
  336. _ = contractService.UploadCheckBackFile(sealInfo.ContractId, sealInfo.CheckBackFileUrl, c.AdminWx)
  337. }
  338. c.OkWithMessage("上传成功")
  339. }
  340. //CompanyList
  341. // @Title 根据客户名称获取已存在系统中客户名称列表
  342. // @Description 获取合同详情接口
  343. // @Param Keyword query string true "关键字:客户名称、组织社会信用码"
  344. // @Success 200 {object} []string
  345. // @router /company_list [get]
  346. func (c *SealCommon) CompanyList() {
  347. sysUser := c.AdminWx
  348. keyword := c.GetString("Keyword")
  349. //合同id
  350. if keyword == "" {
  351. c.FailWithMessage("搜索关键字必传!", "搜索关键字必传!")
  352. return
  353. }
  354. companyNameList := make([]string, 0)
  355. childCondition := ""
  356. condition := ""
  357. childPars := make([]interface{}, 0)
  358. pars := make([]interface{}, 0)
  359. //归属
  360. condition += ` AND (c.user_id = ? or (d.approve_user_id = ? and d.node_id <= a.curr_node_id))`
  361. pars = append(pars, sysUser.AdminId, sysUser.AdminId)
  362. condition += ` AND (c.company_name like "%` + keyword + `%" or c.credit_code like "%` + keyword + `%")`
  363. list, err := seal.GetCompanyNameListV2(childCondition, condition, childPars, pars)
  364. if err != nil {
  365. c.FailWithMessage("获取客户名称列表失败!", "获取客户名称列表失败,ERR:"+err.Error())
  366. return
  367. }
  368. for _, v := range list {
  369. companyNameList = append(companyNameList, v.CompanyName)
  370. }
  371. c.OkDetailed(companyNameList, "获取成功")
  372. }