qryOPApply.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/11 17:58
  4. * @Modify : 2021/1/11 17:58
  5. */
  6. package ermcp
  7. import (
  8. "encoding/json"
  9. "github.com/gin-gonic/gin"
  10. "mtp2_if/global/app"
  11. "mtp2_if/global/e"
  12. "mtp2_if/models"
  13. "net/http"
  14. )
  15. //点价数据
  16. type DjData struct {
  17. PricedPrice *float64 `json:"pricedPrice,omitempty"` //点价价格(非必填)
  18. PricedQty *float64 `json:"pricedQty,omitempty"` //点价数量(非必填)
  19. Amount *models.SFLOAT64 `json:"amount,omitempty"` //点价金额=(点价价格+升贴水)*点价数量
  20. }
  21. //计算点价金额
  22. func (r *DjData) calc(priceMove float64) {
  23. if r.PricedPrice != nil && r.PricedQty != nil {
  24. r.Amount = new(models.SFLOAT64)
  25. *r.Amount = models.SFLOAT64((*r.PricedPrice + priceMove) * (*r.PricedQty))
  26. }
  27. }
  28. //结算登记数据
  29. type ReckonData struct {
  30. ReckonRealQty *float64 `json:"reckonrealqty,omitempty"` //结算实际数量(非必填)
  31. ReckonOsAmount *float64 `json:"reckonosamount,omitempty"` //结算溢短金额(非必填)
  32. ReckonOtherAmount *float64 `json:"reckonotheramount,omitempty"` //结算其他费用(非必填)
  33. ReckonAdjustAmount *float64 `json:"reckonadjustamount,omitempty"` //结算调整金额(非必填)
  34. AddMargin *float64 `json:"addmargin,omitempty"` //追加保证金(非必填)
  35. DecMargin *float64 `json:"decmargin,omitempty"` //减少保证金(非必填)
  36. }
  37. //款项操作
  38. type KxData struct {
  39. PayAmount *models.SFLOAT64 `json:"payamount,omitempty"` // 收付款(非必填)
  40. DeductAmount *models.SFLOAT64 `json:"deductamount,omitempty"` // 退款(非必填)
  41. KxType int32 `json:"kxtype,omitempty"` // 款项类型 1-收付款(PayAmount字段有值) 2-退款(DeductAmount字段有值) 3-收付款/退款(2个字段都有)
  42. }
  43. // 获取款项类型,1-收付款(PayAmount字段有值) 2-退款(DeductAmount字段有值) 3-收付款/退款(2个字段都有)
  44. func (r *KxData) CalcKxType() {
  45. if r.PayAmount != nil && r.DeductAmount != nil {
  46. r.KxType = 3
  47. } else if r.PayAmount != nil {
  48. r.KxType = 1
  49. } else if r.DeductAmount != nil {
  50. r.KxType = 2
  51. }
  52. }
  53. //开票操作数据
  54. type KpData struct {
  55. InvoiceAmount *float64 `json:"invoiceamount"` //已开收票金额(销售为开票,采购为收票)
  56. }
  57. // 查询合同操作请求
  58. type QryOPApplyReq struct {
  59. UserId int64 `form:"UserId" binding:"required"` //用户ID
  60. RelatedId string `form:"relatedid" binding:"required"` //现货合同ID, 不填则查所有
  61. OperateapplyId string `form:"operateapplyid"` //操作申请id
  62. Applystatus string `form:"applystatus"` // 申请状态 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
  63. USERTYPE int32 `form:"usertype"` // 用户类型 2-机构 7-企业成员
  64. }
  65. // 查询业务管理/点价应答
  66. type QryBusinessDjRsp struct {
  67. models.ErmcpOPApplyModel
  68. DjData
  69. }
  70. // QueryBusinessDj 企业风险管理合同操作查询
  71. // @Summary 查询业务管理(点价)(对应菜单:业务管理/点价)
  72. // @Produce json
  73. // @Security ApiKeyAuth
  74. // @Param UserId query int true "用户ID"
  75. // @Param usertype query int false "用户类型 2-机构 7-企业成员"
  76. // @Param relatedid query string false "现货合同ID, 不填则查所有"
  77. // @Param applystatus query string false "申请状态(逗号隔开) 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回"
  78. // @Success 200 {array} QryBusinessDjRsp
  79. // @Failure 500 {object} app.Response
  80. // @Router /Ermcp/QueryBusinessDj [get]
  81. // @Tags 企业风险管理(app)
  82. func QueryBusinessDj(c *gin.Context) {
  83. appG := app.Gin{C: c}
  84. var req QryOPApplyReq
  85. _ = c.ShouldBind(&req)
  86. m := models.ErmcpOPApplyModel{RELATEDID: req.RelatedId, USERID: req.UserId, FilterAppStatus: req.Applystatus, UserType: req.USERTYPE}
  87. if d, err := m.GetData(1); err == nil {
  88. //构建应答数据
  89. sData := make([]QryBusinessDjRsp, 0)
  90. for _, v := range d {
  91. var rsp QryBusinessDjRsp
  92. rsp.ErmcpOPApplyModel = v
  93. if len(rsp.DETAILJSON) > 0 {
  94. if err := json.Unmarshal([]byte(rsp.DETAILJSON), &rsp.DjData); err == nil {
  95. rsp.DjData.calc(rsp.PRICEMOVE)
  96. }
  97. sData = append(sData, rsp)
  98. }
  99. }
  100. appG.Response(http.StatusOK, e.SUCCESS, sData)
  101. } else {
  102. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  103. }
  104. }
  105. // 查询业务管理/结算响应
  106. type QryBussinessJsRsp struct {
  107. models.ErmcpOPApplyModel
  108. ReckonData
  109. }
  110. // QueryBusinessJs 企业风险管理合同操作查询
  111. // @Summary 查询业务管理(结算)(对应菜单:业务管理/结算)
  112. // @Produce json
  113. // @Security ApiKeyAuth
  114. // @Param UserId query int true "用户ID"
  115. // @Param usertype query int false "用户类型 2-机构 7-企业成员"
  116. // @Param relatedid query string false "现货合同ID, 不填则查所有"
  117. // @Param operateapplyid query string false "操作申请id"
  118. // @Param applystatus query string false "申请状态(逗号隔开) 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回"
  119. // @Success 200 {array} QryBussinessJsRsp
  120. // @Failure 500 {object} app.Response
  121. // @Router /Ermcp/QueryBusinessJs [get]
  122. // @Tags 企业风险管理(app)
  123. func QueryBusinessJs(c *gin.Context) {
  124. appG := app.Gin{C: c}
  125. var req QryOPApplyReq
  126. _ = c.ShouldBind(&req)
  127. m := models.ErmcpOPApplyModel{RELATEDID: req.RelatedId, USERID: req.UserId,
  128. OPERATEAPPLYID: req.OperateapplyId, FilterAppStatus: req.Applystatus, UserType: req.USERTYPE}
  129. if d, err := m.GetData(2); err == nil {
  130. //构建应答数据
  131. sData := make([]QryBussinessJsRsp, 0)
  132. for _, v := range d {
  133. var rsp QryBussinessJsRsp
  134. rsp.ErmcpOPApplyModel = v
  135. if len(rsp.DETAILJSON) > 0 {
  136. _ = json.Unmarshal([]byte(rsp.DETAILJSON), &rsp.ReckonData)
  137. }
  138. sData = append(sData, rsp)
  139. }
  140. appG.Response(http.StatusOK, e.SUCCESS, sData)
  141. } else {
  142. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  143. }
  144. }
  145. // 查询业务管理/结算响应(拆分字段)
  146. type QryBussinessJsExRsp struct {
  147. models.ErmcpOPApplyModel
  148. ReckonType string `json:"reckontype"` // 结算类型
  149. ReckonValue float64 `json:"reckonvalue"` // 值
  150. }
  151. // QueryBusinessJsEx
  152. // @Summary 查询业务管理(结算)(对应菜单:业务管理/结算[拆分记录])
  153. // @Produce json
  154. // @Security ApiKeyAuth
  155. // @Param UserId query int true "用户ID"
  156. // @Param usertype query int false "用户类型 2-机构 7-企业成员"
  157. // @Param relatedid query string false "现货合同ID, 不填则查所有"
  158. // @Param applystatus query string false "申请状态(逗号隔开) 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回"
  159. // @Success 200 {array} QryBussinessJsExRsp
  160. // @Failure 500 {object} app.Response
  161. // @Router /Ermcp/QueryBusinessJsEx [get]
  162. // @Tags 企业风险管理(app)
  163. func QueryBusinessJsEx(c *gin.Context) {
  164. appG := app.Gin{C: c}
  165. var req QryOPApplyReq
  166. _ = c.ShouldBind(&req)
  167. m := models.ErmcpOPApplyModel{RELATEDID: req.RelatedId, USERID: req.UserId, FilterAppStatus: req.Applystatus, UserType: req.USERTYPE}
  168. if d, err := m.GetData(2); err == nil {
  169. //构建应答数据
  170. sData := make([]QryBussinessJsExRsp, 0)
  171. for _, v := range d {
  172. var rsp QryBussinessJsExRsp
  173. var rd ReckonData
  174. rsp.ErmcpOPApplyModel = v
  175. if len(rsp.DETAILJSON) > 0 {
  176. if err := json.Unmarshal([]byte(rsp.DETAILJSON), &rd); err == nil {
  177. if rd.ReckonRealQty != nil {
  178. rsp.ReckonType = "交收量"
  179. rsp.ReckonValue = *rd.ReckonRealQty
  180. sData = append(sData, rsp)
  181. }
  182. if rd.ReckonOtherAmount != nil {
  183. rsp.ReckonType = "其它费用"
  184. rsp.ReckonValue = *rd.ReckonOtherAmount
  185. sData = append(sData, rsp)
  186. }
  187. if rd.ReckonAdjustAmount != nil {
  188. rsp.ReckonType = "调整金额"
  189. rsp.ReckonValue = *rd.ReckonAdjustAmount
  190. sData = append(sData, rsp)
  191. }
  192. if rd.AddMargin != nil {
  193. rsp.ReckonType = "追加保证金"
  194. rsp.ReckonValue = *rd.AddMargin
  195. sData = append(sData, rsp)
  196. }
  197. if rd.DecMargin != nil {
  198. rsp.ReckonType = "退还保证金"
  199. rsp.ReckonValue = *rd.DecMargin
  200. sData = append(sData, rsp)
  201. }
  202. if rd.ReckonOsAmount != nil {
  203. rsp.ReckonType = "溢短金额"
  204. rsp.ReckonValue = *rd.ReckonOsAmount
  205. sData = append(sData, rsp)
  206. }
  207. }
  208. }
  209. }
  210. appG.Response(http.StatusOK, e.SUCCESS, sData)
  211. } else {
  212. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  213. }
  214. }
  215. // 查询业务管理/款项响应
  216. type QryBussinessKxRsp struct {
  217. models.ErmcpOPApplyModel
  218. KxData
  219. }
  220. // QueryBusinessKx 企业风险管理合同操作查询
  221. // @Summary 查询财务管理(款项)(对应菜单:财务管理/款项)
  222. // @Produce json
  223. // @Security ApiKeyAuth
  224. // @Param UserId query int true "用户ID"
  225. // @Param usertype query int false "用户类型 2-机构 7-企业成员"
  226. // @Param relatedid query string false "现货合同ID, 不填则查所有"
  227. // @Param applystatus query string false "申请状态(逗号隔开) 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回"
  228. // @Success 200 {array} QryBussinessKxRsp
  229. // @Failure 500 {object} app.Response
  230. // @Router /Ermcp/QueryBusinessKx [get]
  231. // @Tags 企业风险管理(app)
  232. func QueryBusinessKx(c *gin.Context) {
  233. appG := app.Gin{C: c}
  234. var req QryOPApplyReq
  235. _ = c.ShouldBind(&req)
  236. m := models.ErmcpOPApplyModel{RELATEDID: req.RelatedId, USERID: req.UserId, FilterAppStatus: req.Applystatus, UserType: req.USERTYPE}
  237. if d, err := m.GetData(3); err == nil {
  238. //构建应答数据
  239. sData := make([]QryBussinessKxRsp, 0)
  240. for _, v := range d {
  241. var rsp QryBussinessKxRsp
  242. rsp.ErmcpOPApplyModel = v
  243. if len(rsp.DETAILJSON) > 0 {
  244. if err := json.Unmarshal([]byte(rsp.DETAILJSON), &rsp.KxData); err == nil {
  245. rsp.KxData.CalcKxType()
  246. sData = append(sData, rsp)
  247. }
  248. }
  249. }
  250. appG.Response(http.StatusOK, e.SUCCESS, sData)
  251. } else {
  252. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  253. }
  254. }
  255. // 查询业务管理/款项响应
  256. type QryBussinessFpRsp struct {
  257. models.ErmcpOPApplyModel
  258. KpData
  259. }
  260. // QueryBusinessFp 企业风险管理合同操作查询
  261. // @Summary 查询财务管理(发票)(对应菜单:财务管理/发票)
  262. // @Produce json
  263. // @Security ApiKeyAuth
  264. // @Param UserId query int true "用户ID"
  265. // @Param usertype query int false "用户类型 2-机构 7-企业成员"
  266. // @Param relatedid query string false "现货合同ID, 不填则查所有"
  267. // @Param applystatus query string false "申请状态(逗号隔开) 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回"
  268. // @Success 200 {array} QryBussinessFpRsp
  269. // @Failure 500 {object} app.Response
  270. // @Router /Ermcp/QueryBusinessFp [get]
  271. // @Tags 企业风险管理(app)
  272. func QueryBusinessFp(c *gin.Context) {
  273. appG := app.Gin{C: c}
  274. var req QryOPApplyReq
  275. _ = c.ShouldBind(&req)
  276. m := models.ErmcpOPApplyModel{RELATEDID: req.RelatedId, USERID: req.UserId, FilterAppStatus: req.Applystatus, UserType: req.USERTYPE}
  277. if d, err := m.GetData(4); err == nil {
  278. //构建应答数据
  279. sData := make([]QryBussinessFpRsp, 0)
  280. for _, v := range d {
  281. var rsp QryBussinessFpRsp
  282. rsp.ErmcpOPApplyModel = v
  283. if len(rsp.DETAILJSON) > 0 {
  284. _ = json.Unmarshal([]byte(rsp.DETAILJSON), &rsp.KpData)
  285. }
  286. sData = append(sData, rsp)
  287. }
  288. appG.Response(http.StatusOK, e.SUCCESS, sData)
  289. } else {
  290. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  291. }
  292. }