seal.go 12 KB

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