customer.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. package erms3
  2. import (
  3. "mtp2_if/global/app"
  4. "mtp2_if/global/e"
  5. "mtp2_if/logger"
  6. "mtp2_if/models"
  7. "net/http"
  8. "sort"
  9. "time"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // customer.go 客户管理
  13. // AddUserInfoApplyReq 新增客户申请请求参数
  14. type AddUserInfoApplyReq struct {
  15. models.Wskhuserinfo
  16. }
  17. // AddUserInfoApply 新增客户申请
  18. // @Summary 新增客户申请
  19. // @Produce json
  20. // @Security ApiKeyAuth
  21. // @Param jsonBody body AddUserInfoApplyReq true "用户信息"
  22. // @Success 200 {object} app.Response
  23. // @Failure 500 {object} app.Response
  24. // @Router /Erms3/AddUserInfoApply [post]
  25. // @Tags 风险管理v3
  26. func AddUserInfoApply(c *gin.Context) {
  27. appG := app.Gin{C: c}
  28. // 获取请求参数
  29. var req AddUserInfoApplyReq
  30. err := appG.C.ShouldBindJSON(&req)
  31. if err != nil {
  32. logger.GetLogger().Errorf("AddUserInfoApply failed: %s", err.Error())
  33. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  34. return
  35. }
  36. // 设置值
  37. req.Isvalidate = "1" // 是否有效 (删除后标记为失效) - 0:无效 1:有效
  38. req.Usertype = 6 // 用户类型 - 1:投资者 2:机构
  39. if err := models.InsertWSKHUserInfo(req.Wskhuserinfo); err != nil {
  40. // 执行失败
  41. logger.GetLogger().Errorf("AddUserInfoApply failed: %s", err.Error())
  42. appG.Response(http.StatusBadRequest, e.ERROR_OPERATION_FAILED, nil)
  43. return
  44. }
  45. // 执行成功
  46. logger.GetLogger().Debugln("AddUserInfoApply successed: %v", "OK")
  47. appG.Response(http.StatusOK, e.SUCCESS, "OK")
  48. }
  49. // ModifyUserInfoApplyReq 修改客户申请请求参数
  50. type ModifyUserInfoApplyReq struct {
  51. models.Wskhuserinfo
  52. }
  53. // ModifyUserInfoApply 修改客户申请
  54. // @Summary 修改客户申请
  55. // @description 保存草稿(撤回)- { "userid": int, "userstate": 1 } 提交审核 - { "userid": int, "userstate": 2 }
  56. // @Produce json
  57. // @Security ApiKeyAuth
  58. // @Param jsonBody body ModifyUserInfoApplyReq true "用户信息"
  59. // @Success 200 {object} app.Response
  60. // @Failure 500 {object} app.Response
  61. // @Router /Erms3/ModifyUserInfoApply [post]
  62. // @Tags 风险管理v3
  63. func ModifyUserInfoApply(c *gin.Context) {
  64. appG := app.Gin{C: c}
  65. // 获取请求参数
  66. var req ModifyUserInfoApplyReq
  67. err := appG.C.ShouldBindJSON(&req)
  68. if err != nil {
  69. logger.GetLogger().Errorf("ModifyUserInfoApply failed: %s", err.Error())
  70. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  71. return
  72. }
  73. if err := models.UpdateWSKHUserInfo(req.Wskhuserinfo); err != nil {
  74. // 执行失败
  75. logger.GetLogger().Errorf("ModifyUserInfoApply failed: %s", err.Error())
  76. appG.Response(http.StatusBadRequest, e.ERROR_OPERATION_FAILED, nil)
  77. return
  78. }
  79. // 执行成功
  80. logger.GetLogger().Debugln("ModifyUserInfoApply successed: %v", "OK")
  81. appG.Response(http.StatusOK, e.SUCCESS, "OK")
  82. }
  83. // DeleteUserInfoApplyReq 删除客户申请请求参数
  84. type DeleteUserInfoApplyReq struct {
  85. UserID int `form:"userID" binding:"required"`
  86. }
  87. // DeleteUserInfoApply 删除客户申请
  88. // @Summary 删除客户申请
  89. // @description 只可删除 UserState = 1 (未提交)状态的申请信息
  90. // @Produce json
  91. // @Security ApiKeyAuth
  92. // @Param userID query int true "用户ID"
  93. // @Success 200 {object} app.Response
  94. // @Failure 500 {object} app.Response
  95. // @Router /Erms3/DeleteUserInfoApply [get]
  96. // @Tags 风险管理v3
  97. func DeleteUserInfoApply(c *gin.Context) {
  98. appG := app.Gin{C: c}
  99. // 获取请求参数
  100. var req DeleteUserInfoApplyReq
  101. err := appG.C.ShouldBindQuery(&req)
  102. if err != nil {
  103. logger.GetLogger().Errorf("DeleteUserInfoApply failed: %s", err.Error())
  104. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  105. return
  106. }
  107. if err := models.DeleteWSKHUserInfo(req.UserID); err != nil {
  108. // 执行失败
  109. logger.GetLogger().Errorf("DeleteUserInfoApply failed: %s", err.Error())
  110. appG.Response(http.StatusBadRequest, e.ERROR_OPERATION_FAILED, nil)
  111. return
  112. }
  113. // 执行成功
  114. logger.GetLogger().Debugln("DeleteUserInfoApply successed: %v", "OK")
  115. appG.Response(http.StatusOK, e.SUCCESS, "OK")
  116. }
  117. // QueryUserInfoAppliesReq 客户申请信息查询请求参数
  118. type QueryUserInfoAppliesReq struct {
  119. app.PageInfo
  120. UserName string `form:"userName"`
  121. }
  122. // QueryUserInfoAppliesRsp 客户申请信息查询返回模型
  123. type QueryUserInfoAppliesRsp struct {
  124. Userid int64 `json:"userid" xorm:"'USERID'" binding:"required"` // 用户ID(自增ID)
  125. Username string `json:"username" xorm:"'USERNAME'"` // 用户姓名
  126. Userinfotype int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户信息类型 - 1:个人 2:企业
  127. Biznature int32 `json:"biznature" xorm:"'BIZNATURE'"` // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
  128. Contactname string `json:"contactname" xorm:"'CONTACTNAME'"` // 联系人
  129. Userstate int32 `json:"userstate" xorm:"'USERSTATE'"` // 开户状态 - 1:未提交 2: 待初审 3:初审拒绝 4:待复审 5:复审拒绝 6:测评不通过
  130. Createtime time.Time `json:"createtime" xorm:"'CREATETIME'"` // 开户申请时间
  131. }
  132. // QueryUserInfoApplies 客户申请信息查询
  133. // @Summary 客户申请信息查询
  134. // @Produce json
  135. // @Security ApiKeyAuth
  136. // @Param page query int false "页码"
  137. // @Param pagesize query int false "每页条数"
  138. // @Param userName query string false "客户名称,支持模糊查询"
  139. // @Success 200 {object} QueryUserInfoAppliesRsp
  140. // @Failure 500 {object} app.Response
  141. // @Router /Erms3/QueryUserInfoApplies [get]
  142. // @Tags 风险管理v3
  143. func QueryUserInfoApplies(c *gin.Context) {
  144. appG := app.Gin{C: c}
  145. // 获取请求参数
  146. var req QueryUserInfoAppliesReq
  147. err := appG.C.ShouldBindQuery(&req)
  148. if err != nil {
  149. logger.GetLogger().Errorf("QueryUserInfoApplies failed: %s", err.Error())
  150. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  151. return
  152. }
  153. // 获取客户信息
  154. userInfos, err := models.GetWSKHUserInfos(req.UserName)
  155. if err != nil {
  156. // 查询失败
  157. logger.GetLogger().Errorf("QueryUserInfoApplies failed: %s", err.Error())
  158. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  159. return
  160. }
  161. // 排序
  162. sort.Slice(userInfos, func(i int, j int) bool {
  163. return userInfos[i].Createtime.After(userInfos[j].Createtime)
  164. })
  165. // 分页
  166. total := len(userInfos)
  167. if req.PageSize > 0 {
  168. rstByPage := make([]models.Wskhuserinfo, 0)
  169. // 开始上标
  170. start := req.Page * req.PageSize
  171. // 结束下标
  172. end := start + req.PageSize
  173. if start <= len(userInfos) {
  174. // 判断结束下标是否越界
  175. if end > len(userInfos) {
  176. end = len(userInfos)
  177. }
  178. rstByPage = userInfos[start:end]
  179. } else {
  180. rstByPage = userInfos[0:0]
  181. }
  182. userInfos = rstByPage
  183. }
  184. // 转换返回模型
  185. rsp := make([]QueryUserInfoAppliesRsp, 0)
  186. for _, v := range userInfos {
  187. rsp = append(rsp, QueryUserInfoAppliesRsp{
  188. Userid: v.Userid,
  189. Username: v.Username,
  190. Userinfotype: v.Userinfotype,
  191. Biznature: v.Biznature,
  192. Contactname: v.Contactname,
  193. Userstate: v.Userstate,
  194. Createtime: v.Createtime,
  195. })
  196. }
  197. // 查询成功返回
  198. if req.PageSize > 0 {
  199. logger.GetLogger().Debugln("QueryUserInfoApplies successed: %v", rsp)
  200. appG.ResponseByPage(http.StatusOK, e.SUCCESS, rsp, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: total})
  201. } else {
  202. logger.GetLogger().Debugln("QueryUserInfoApplies successed: %v", rsp)
  203. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  204. }
  205. }
  206. // QueryUserInfosReq 客户信息查询请求参数
  207. type QueryUserInfosReq struct {
  208. app.PageInfo
  209. UserName string `form:"userName"`
  210. }
  211. // QueryUserInfosRsp 客户信息查询返回模型
  212. type QueryUserInfosRsp struct {
  213. Userid int64 `json:"userid" xorm:"'USERID'" binding:"required"` // 用户ID
  214. Userinfotype int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户信息类型 - 1:个人 2:企业
  215. Customername string `json:"customername" xorm:"'CUSTOMERNAME'"` // 客户名称(企业名称)
  216. Userstatus int32 `json:"userstatus" xorm:"'USERSTATUS'"` // 用户状态 - 1:正常 2:注销
  217. Biznature int32 `json:"biznature" xorm:"'BIZNATURE'"` // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
  218. Contactname string `json:"contactname" xorm:"'CONTACTNAME'"` // 联系人
  219. }
  220. // QueryUserInfos 客户信息查询
  221. // @Summary 客户信息查询
  222. // @Produce json
  223. // @Security ApiKeyAuth
  224. // @Param page query int false "页码"
  225. // @Param pagesize query int false "每页条数"
  226. // @Param userName query string false "客户名称,支持模糊查询"
  227. // @Success 200 {object} QueryUserInfosRsp
  228. // @Failure 500 {object} app.Response
  229. // @Router /Erms3/QueryUserInfos [get]
  230. // @Tags 风险管理v3
  231. func QueryUserInfos(c *gin.Context) {
  232. appG := app.Gin{C: c}
  233. // 获取请求参数
  234. var req QueryUserInfosReq
  235. err := appG.C.ShouldBindQuery(&req)
  236. if err != nil {
  237. logger.GetLogger().Errorf("QueryUserInfos failed: %s", err.Error())
  238. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  239. return
  240. }
  241. // 获取客户信息
  242. userInfos, err := models.GetUserInfos(req.UserName)
  243. if err != nil {
  244. // 查询失败
  245. logger.GetLogger().Errorf("QueryUserInfos failed: %s", err.Error())
  246. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  247. return
  248. }
  249. // 排序
  250. sort.Slice(userInfos, func(i int, j int) bool {
  251. return userInfos[i].Createtime.After(userInfos[j].Createtime)
  252. })
  253. // 分页
  254. total := len(userInfos)
  255. if req.PageSize > 0 {
  256. rstByPage := make([]models.Userinfo, 0)
  257. // 开始上标
  258. start := req.Page * req.PageSize
  259. // 结束下标
  260. end := start + req.PageSize
  261. if start <= len(userInfos) {
  262. // 判断结束下标是否越界
  263. if end > len(userInfos) {
  264. end = len(userInfos)
  265. }
  266. rstByPage = userInfos[start:end]
  267. } else {
  268. rstByPage = userInfos[0:0]
  269. }
  270. userInfos = rstByPage
  271. }
  272. // 转换返回模型
  273. rsp := make([]QueryUserInfosRsp, 0)
  274. for _, v := range userInfos {
  275. rsp = append(rsp, QueryUserInfosRsp{
  276. Userid: v.Userid,
  277. Userinfotype: v.Userinfotype,
  278. Customername: v.Customername,
  279. Userstatus: v.Userstatus,
  280. Biznature: v.Biznature,
  281. Contactname: v.Contactname,
  282. })
  283. }
  284. // 查询成功返回
  285. if req.PageSize > 0 {
  286. logger.GetLogger().Debugln("QueryUserInfos successed: %v", rsp)
  287. appG.ResponseByPage(http.StatusOK, e.SUCCESS, rsp, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: total})
  288. } else {
  289. logger.GetLogger().Debugln("QueryUserInfos successed: %v", rsp)
  290. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  291. }
  292. }