pre_payment.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. package contract
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "github.com/go-playground/validator/v10"
  6. "hongze/fms_api/controller/resp"
  7. "hongze/fms_api/global"
  8. "hongze/fms_api/models/base"
  9. "hongze/fms_api/models/fms"
  10. "hongze/fms_api/models/system"
  11. fmsService "hongze/fms_api/services/fms"
  12. "hongze/fms_api/utils"
  13. "time"
  14. )
  15. // // RegisterController 合同登记
  16. type PrePaymentController struct{}
  17. // List
  18. // @Title 到款预登记列表
  19. // @Description 到款预登记列表
  20. // @Param Keyword query string false "关键词"
  21. // @Param StartDate query string false "约定开始时间"
  22. // @Param EndDate query string false "约定结束时间"
  23. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  24. // @Success 200 {object} fms.ContractRegisterItem
  25. // @router /contract/pre_pay/list [get]
  26. func (rg *PrePaymentController) List(c *gin.Context) {
  27. var req fms.PrePayListReq
  28. if e := c.BindQuery(&req); e != nil {
  29. err, ok := e.(validator.ValidationErrors)
  30. if !ok {
  31. resp.FailData("参数解析失败", "Err:"+e.Error(), c)
  32. return
  33. }
  34. resp.FailData("参数解析失败", err.Translate(global.Trans), c)
  35. return
  36. }
  37. cond := `1 = 1`
  38. pars := make([]interface{}, 0)
  39. // 合同编号/客户姓名/销售/实际使用方
  40. if req.Keyword != "" {
  41. kw := "%" + req.Keyword + "%"
  42. cond += ` AND (company_name LIKE ? OR seller_name LIKE ? )`
  43. pars = append(pars, kw, kw)
  44. }
  45. if req.StartDate != "" && req.EndDate != "" {
  46. st := fmt.Sprint(req.StartDate, " 00:00:00")
  47. ed := fmt.Sprint(req.EndDate, " 23:59:59")
  48. cond += ` AND (create_time BETWEEN ? AND ?)`
  49. pars = append(pars, st, ed)
  50. }
  51. page := new(base.Page)
  52. page.SetPageSize(req.PageSize)
  53. page.SetCurrent(req.Current)
  54. sortTypeMap := map[int]bool{0: false, 1: true, 2: false}
  55. page.AddOrderItem(base.OrderItem{Column: "create_time", Asc: sortTypeMap[req.SortType]})
  56. total, list, e := fms.GetPrePayItemPageList(page, cond, pars)
  57. if e != nil {
  58. resp.FailMsg("获取失败", "获取预登记列表失败, Err: "+e.Error(), c)
  59. return
  60. }
  61. registerIds := make([]int, 0)
  62. for i := range list {
  63. registerIds = append(registerIds, list[i].ContractRegisterId)
  64. }
  65. page.SetTotal(total)
  66. baseData := new(base.BaseData)
  67. baseData.SetPage(page)
  68. baseData.SetList(list)
  69. resp.OkData("获取成功", baseData, c)
  70. }
  71. // Add
  72. // @Title 新增到款预登记
  73. // @Description 新增到款预登记
  74. // @Param request body fms.PrepayAddReq true "type json string"
  75. // @Success 200 string "操作成功"
  76. // @router /contract/pre_pay/add [post]
  77. func (rg *PrePaymentController) Add(c *gin.Context) {
  78. req := new(fms.PrepayAddReq)
  79. err := c.ShouldBind(&req)
  80. if err != nil {
  81. errs, ok := err.(validator.ValidationErrors)
  82. if !ok {
  83. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  84. return
  85. }
  86. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  87. return
  88. }
  89. claims, _ := c.Get("adminInfo")
  90. adminInfo := claims.(*system.SysAdmin)
  91. // 日期校验
  92. startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
  93. if e != nil {
  94. resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
  95. return
  96. }
  97. endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
  98. if e != nil {
  99. resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
  100. return
  101. }
  102. // 货币及汇率
  103. rateList, e := fmsService.GetTodayCurrencyRateList()
  104. if e != nil {
  105. resp.FailMsg("操作失败", "获取今日货币汇率失败, Err: "+e.Error(), c)
  106. return
  107. }
  108. var rate float64
  109. for i := range rateList {
  110. if req.CurrencyUnit == rateList[i].Code {
  111. rate = rateList[i].RMBRate
  112. break
  113. }
  114. }
  115. if rate <= 0 {
  116. resp.FailMsg("操作失败", "货币汇率信息有误", c)
  117. return
  118. }
  119. ob := new(fms.ContractPrePayment)
  120. ob.CompanyName = req.CompanyName
  121. ob.SellerId = req.SellerId
  122. ob.SellerName = req.SellerName
  123. ob.CurrencyUnit = req.CurrencyUnit
  124. ob.StartDate = startDate
  125. ob.EndDate = endDate
  126. ob.AdminId = int(adminInfo.AdminId)
  127. ob.AdminName = adminInfo.AdminName
  128. ob.Amount = req.Amount * rate
  129. ob.OriginAmount = req.Amount
  130. ob.CurrencyUnit = req.CurrencyUnit
  131. ob.Remark = req.Remark
  132. ob.NewCompany = req.NewCompany
  133. ob.Set()
  134. // 新增合同及套餐
  135. if e = ob.Create(); e != nil {
  136. resp.FailMsg("操作失败", "新增合同及套餐失败, Err: "+e.Error(), c)
  137. return
  138. }
  139. resp.Ok("操作成功", c)
  140. }
  141. // Edit
  142. // @Title 编辑到款预登记
  143. // @Description 编辑到款预登记
  144. // @Param request body fms.ContractRegisterEditReq true "type json string"
  145. // @Success 200 string "操作成功"
  146. // @router /contract/pre_pay/edit [post]
  147. func (rg *PrePaymentController) Edit(c *gin.Context) {
  148. req := new(fms.PrepayEditReq)
  149. err := c.ShouldBind(&req)
  150. if err != nil {
  151. errs, ok := err.(validator.ValidationErrors)
  152. if !ok {
  153. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  154. return
  155. }
  156. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  157. return
  158. }
  159. claims, _ := c.Get("adminInfo")
  160. adminInfo := claims.(*system.SysAdmin)
  161. // 日期校验
  162. startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
  163. if e != nil {
  164. resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
  165. return
  166. }
  167. endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
  168. if e != nil {
  169. resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
  170. return
  171. }
  172. // 货币及汇率
  173. rateList, e := fmsService.GetTodayCurrencyRateList()
  174. if e != nil {
  175. resp.FailMsg("操作失败", "获取今日货币汇率失败, Err: "+e.Error(), c)
  176. return
  177. }
  178. var rate float64
  179. for i := range rateList {
  180. if req.CurrencyUnit == rateList[i].Code {
  181. rate = rateList[i].RMBRate
  182. break
  183. }
  184. }
  185. if rate <= 0 {
  186. resp.FailMsg("操作失败", "货币汇率信息有误", c)
  187. return
  188. }
  189. ob := new(fms.ContractPrePayment)
  190. item, e := ob.Fetch(req.PrePayId)
  191. if e != nil {
  192. if e == utils.ErrNoRow {
  193. resp.Fail("预到款登记记录不存在或已被删除", c)
  194. return
  195. }
  196. resp.FailMsg("操作失败", "获取预到款登记信息失败, Err:"+e.Error(), c)
  197. return
  198. }
  199. item.CompanyName = req.CompanyName
  200. item.SellerId = req.SellerId
  201. item.SellerName = req.SellerName
  202. item.CurrencyUnit = req.CurrencyUnit
  203. item.StartDate = startDate
  204. item.EndDate = endDate
  205. item.AdminId = int(adminInfo.AdminId)
  206. item.AdminName = adminInfo.AdminName
  207. item.Amount = req.Amount * rate
  208. item.OriginAmount = req.Amount
  209. item.CurrencyUnit = req.CurrencyUnit
  210. item.Remark = req.Remark
  211. item.NewCompany = req.NewCompany
  212. item.ModifyTime = time.Now().Local()
  213. updateCols := []string{
  214. "ContractCode", "CompanyName", "SellerId", "SellerName", "Amount", "StartDate", "EndDate",
  215. "Remark", "ModifyTime","NewCompany", "OriginAmount", "CurrencyUnit",
  216. }
  217. if e = item.Update(updateCols); e != nil {
  218. resp.FailMsg("操作失败", "更新到预款登记失败, Err:"+e.Error(), c)
  219. return
  220. }
  221. resp.Ok("操作成功", c)
  222. }
  223. // Del
  224. // @Title 删除到款预登记
  225. // @Description 删除到款预登记
  226. // @Param request body fms.ContractRegisterDelReq true "type json string"
  227. // @Success 200 string "操作成功"
  228. // @router /contract/pre_pay/del [post]
  229. func (rg *PrePaymentController) Del(c *gin.Context) {
  230. req := new(fms.PrepayDelReq)
  231. err := c.ShouldBind(&req)
  232. if err != nil {
  233. errs, ok := err.(validator.ValidationErrors)
  234. if !ok {
  235. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  236. return
  237. }
  238. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  239. return
  240. }
  241. ob := new(fms.ContractPrePayment)
  242. item, e := ob.Fetch(req.PrePayId)
  243. if e != nil {
  244. if e == utils.ErrNoRow {
  245. resp.Fail("合同登记不存在或已被删除", c)
  246. return
  247. }
  248. resp.FailMsg("获取合同登记失败", "Err:"+e.Error(), c)
  249. return
  250. }
  251. e = item.Delete()
  252. if e != nil {
  253. resp.FailMsg("删除记录失败", "Err:"+e.Error(), c)
  254. return
  255. }
  256. // 操作日志
  257. //go func() {
  258. // opData := ""
  259. // opDataByte, e := json.Marshal(req)
  260. // if e != nil {
  261. // return
  262. // }
  263. // opData = string(opDataByte)
  264. //
  265. // logItem := new(fms.ContractRegisterLog)
  266. // logItem.ContractRegisterId = req.ContractRegisterId
  267. // logItem.AdminId = int(adminInfo.AdminId)
  268. // logItem.AdminName = adminInfo.RealName
  269. // logItem.OpData = opData
  270. // logItem.OpType = fms.ContractRegisterOpTypeDel
  271. // logItem.CreateTime = nowTime
  272. // if e = logItem.Create(); e != nil {
  273. // return
  274. // }
  275. //}()
  276. resp.Ok("操作成功", c)
  277. }