pre_register.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  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 PreRegisterController 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) List1(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. // 货币列表
  52. currencyOB := new(fms.CurrencyUnit)
  53. currencyCond := `enable = 1`
  54. currencyPars := make([]interface{}, 0)
  55. currencyList, e := currencyOB.List(currencyCond, currencyPars)
  56. if e != nil {
  57. resp.FailMsg("获取失败", "获取货币列表失败, Err: "+e.Error(), c)
  58. return
  59. }
  60. unitMap := make(map[string]string)
  61. for i := range currencyList {
  62. unitMap[currencyList[i].Code] = currencyList[i].UnitName
  63. }
  64. page := new(base.Page)
  65. page.SetPageSize(req.PageSize)
  66. page.SetCurrent(req.Current)
  67. sortTypeMap := map[int]bool{0: false, 1: true, 2: false}
  68. page.AddOrderItem(base.OrderItem{Column: "create_time", Asc: sortTypeMap[req.SortType]})
  69. total, list, e := fms.GetPrePayItemPageList(page, cond, pars)
  70. if e != nil {
  71. resp.FailMsg("获取失败", "获取预登记列表失败, Err: "+e.Error(), c)
  72. return
  73. }
  74. for i := range list {
  75. list[i].UnitName = unitMap[list[i].CurrencyUnit]
  76. }
  77. page.SetTotal(total)
  78. baseData := new(base.BaseData)
  79. baseData.SetPage(page)
  80. baseData.SetList(list)
  81. resp.OkData("获取成功", baseData, c)
  82. }
  83. // InvoiceList
  84. // @Title 开票/到款列表
  85. // @Description 开票/到款列表
  86. // @Param Keyword query string false "关键词"
  87. // @Success 200 {object} fms.ContractInvoiceItem
  88. // @router /contract/pre_register/list [get]
  89. func (rg *PreRegisterController) List(c *gin.Context) {
  90. var req fms.PreRegisterListReq
  91. if e := c.BindQuery(&req); e != nil {
  92. err, ok := e.(validator.ValidationErrors)
  93. if !ok {
  94. resp.FailData("参数解析失败", "Err:"+e.Error(), c)
  95. return
  96. }
  97. resp.FailData("参数解析失败", err.Translate(global.Trans), c)
  98. return
  99. }
  100. pageSize := req.PageSize
  101. pageIndex := req.Current
  102. if pageSize <= 0 {
  103. pageSize = utils.PageSize20
  104. }
  105. if pageIndex <= 0 {
  106. pageIndex = 1
  107. }
  108. cond := ` invoice_type IN (3, 4) `
  109. pars := make([]interface{}, 0)
  110. if req.Keyword != "" {
  111. kw := "%" + req.Keyword + "%"
  112. cond += ` AND company_name LIKE ? `
  113. pars = append(pars, kw)
  114. }
  115. // 货币列表
  116. currencyOB := new(fms.CurrencyUnit)
  117. currencyCond := `enable = 1`
  118. currencyPars := make([]interface{}, 0)
  119. currencyList, e := currencyOB.List(currencyCond, currencyPars)
  120. if e != nil {
  121. resp.FailMsg("获取失败", "获取货币列表失败, Err: "+e.Error(), c)
  122. return
  123. }
  124. unitMap := make(map[string]string)
  125. for i := range currencyList {
  126. unitMap[currencyList[i].Code] = currencyList[i].UnitName
  127. }
  128. page := new(base.Page)
  129. page.SetPageSize(req.PageSize)
  130. page.SetCurrent(req.Current)
  131. sortTypeMap := map[int]bool{0: false, 1: true, 2: false}
  132. page.AddOrderItem(base.OrderItem{Column: "create_time", Asc: sortTypeMap[0]})
  133. total, list, e := fms.GetPrePayItemPageList(page, cond, pars)
  134. if e != nil {
  135. resp.FailMsg("获取失败", "获取预登记列表失败, Err: "+e.Error(), c)
  136. return
  137. }
  138. for i := range list {
  139. list[i].UnitName = unitMap[list[i].CurrencyUnit]
  140. }
  141. page.SetTotal(total)
  142. baseData := new(base.BaseData)
  143. baseData.SetPage(page)
  144. baseData.SetList(list)
  145. resp.OkData("获取成功", baseData, c)
  146. }
  147. // Add
  148. // @Title 新增到款预登记
  149. // @Description 新增到款预登记
  150. // @Param request body fms.PrepayAddReq true "type json string"
  151. // @Success 200 string "操作成功"
  152. // @router /contract/pre_pay/add [post]
  153. func (rg *PrePaymentController) Add(c *gin.Context) {
  154. req := new(fms.PrepayAddReq)
  155. err := c.ShouldBind(&req)
  156. if err != nil {
  157. errs, ok := err.(validator.ValidationErrors)
  158. if !ok {
  159. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  160. return
  161. }
  162. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  163. return
  164. }
  165. claims, _ := c.Get("adminInfo")
  166. adminInfo := claims.(*system.SysAdmin)
  167. // 日期校验
  168. startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
  169. if e != nil {
  170. resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
  171. return
  172. }
  173. endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
  174. if e != nil {
  175. resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
  176. return
  177. }
  178. // 货币及汇率
  179. rateList, e := fmsService.GetTodayCurrencyRateList()
  180. if e != nil {
  181. resp.FailMsg("操作失败", "获取今日货币汇率失败, Err: "+e.Error(), c)
  182. return
  183. }
  184. var rate float64
  185. for i := range rateList {
  186. if req.CurrencyUnit == rateList[i].Code {
  187. rate = rateList[i].RMBRate
  188. break
  189. }
  190. }
  191. if rate <= 0 {
  192. resp.FailMsg("操作失败", "货币汇率信息有误", c)
  193. return
  194. }
  195. payDate, err := time.Parse(utils.FormatDate, req.PaymentDate)
  196. if e != nil {
  197. resp.FailMsg("日期转换失败", "日期转换失败, Err: "+e.Error(), c)
  198. return
  199. }
  200. ob := new(fms.ContractPrePayment)
  201. ob.CompanyName = req.CompanyName
  202. ob.CurrencyUnit = req.CurrencyUnit
  203. ob.StartDate = startDate
  204. ob.EndDate = endDate
  205. ob.AdminId = int(adminInfo.AdminId)
  206. ob.AdminName = adminInfo.AdminName
  207. ob.Amount = req.Amount / rate
  208. ob.OriginAmount = req.Amount
  209. ob.CurrencyUnit = req.CurrencyUnit
  210. ob.Remark = req.Remark
  211. ob.PaymentDate = payDate
  212. ob.Set()
  213. // 新增合同及套餐
  214. if e = ob.Create(); e != nil {
  215. resp.FailMsg("操作失败", "新增合同及套餐失败, Err: "+e.Error(), c)
  216. return
  217. }
  218. //// 开票到款汇总
  219. //nowTime := time.Now().Local()
  220. //v := new(fms.InvoicePaymentSummary)
  221. //v.CreateTime = nowTime
  222. //v.ModifyTime = nowTime
  223. //v.PrePayid = ob.PrePayId
  224. //
  225. //if e = v.Create(); e != nil {
  226. // err = fmt.Errorf("新增汇总数据失败, Err: %s", e.Error())
  227. //}
  228. resp.Ok("操作成功", c)
  229. }
  230. // Edit
  231. // @Title 编辑到款预登记
  232. // @Description 编辑到款预登记
  233. // @Param request body fms.ContractRegisterEditReq true "type json string"
  234. // @Success 200 string "操作成功"
  235. // @router /contract/pre_pay/edit [post]
  236. func (rg *PrePaymentController) Edit(c *gin.Context) {
  237. req := new(fms.PrepayEditReq)
  238. err := c.ShouldBind(&req)
  239. if err != nil {
  240. errs, ok := err.(validator.ValidationErrors)
  241. if !ok {
  242. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  243. return
  244. }
  245. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  246. return
  247. }
  248. claims, _ := c.Get("adminInfo")
  249. adminInfo := claims.(*system.SysAdmin)
  250. // 日期校验
  251. startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
  252. if e != nil {
  253. resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
  254. return
  255. }
  256. endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
  257. if e != nil {
  258. resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
  259. return
  260. }
  261. // 货币及汇率
  262. rateList, e := fmsService.GetTodayCurrencyRateList()
  263. if e != nil {
  264. resp.FailMsg("操作失败", "获取今日货币汇率失败, Err: "+e.Error(), c)
  265. return
  266. }
  267. var rate float64
  268. for i := range rateList {
  269. if req.CurrencyUnit == rateList[i].Code {
  270. rate = rateList[i].RMBRate
  271. break
  272. }
  273. }
  274. if rate <= 0 {
  275. resp.FailMsg("操作失败", "货币汇率信息有误", c)
  276. return
  277. }
  278. ob := new(fms.ContractPrePayment)
  279. item, e := ob.Fetch(req.PrePayId)
  280. if e != nil {
  281. if e == utils.ErrNoRow {
  282. resp.Fail("预到款登记记录不存在或已被删除", c)
  283. return
  284. }
  285. resp.FailMsg("操作失败", "获取预到款登记信息失败, Err:"+e.Error(), c)
  286. return
  287. }
  288. payDate, err := time.Parse(utils.FormatDate, req.PaymentDate)
  289. if e != nil {
  290. resp.FailMsg("日期转换失败", "日期转换失败, Err: "+e.Error(), c)
  291. return
  292. }
  293. item.CompanyName = req.CompanyName
  294. item.CurrencyUnit = req.CurrencyUnit
  295. item.StartDate = startDate
  296. item.EndDate = endDate
  297. item.AdminId = int(adminInfo.AdminId)
  298. item.AdminName = adminInfo.AdminName
  299. item.Amount = req.Amount / rate
  300. item.OriginAmount = req.Amount
  301. item.CurrencyUnit = req.CurrencyUnit
  302. item.Remark = req.Remark
  303. item.PaymentDate = payDate
  304. item.ModifyTime = time.Now().Local()
  305. updateCols := []string{
  306. "ContractCode", "CompanyName", "SellerId", "SellerName", "Amount", "StartDate", "EndDate",
  307. "Remark", "ModifyTime", "NewCompany", "OriginAmount", "CurrencyUnit", "PaymentDate",
  308. }
  309. if e = item.Update(updateCols); e != nil {
  310. resp.FailMsg("操作失败", "更新到预款登记失败, Err:"+e.Error(), c)
  311. return
  312. }
  313. resp.Ok("操作成功", c)
  314. }
  315. // Del
  316. // @Title 删除到款预登记
  317. // @Description 删除到款预登记
  318. // @Param request body fms.ContractRegisterDelReq true "type json string"
  319. // @Success 200 string "操作成功"
  320. // @router /contract/pre_pay/del [post]
  321. func (rg *PrePaymentController) Del(c *gin.Context) {
  322. req := new(fms.PrepayDelReq)
  323. err := c.ShouldBind(&req)
  324. if err != nil {
  325. errs, ok := err.(validator.ValidationErrors)
  326. if !ok {
  327. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  328. return
  329. }
  330. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  331. return
  332. }
  333. ob := new(fms.ContractPrePayment)
  334. item, e := ob.Fetch(req.PrePayId)
  335. if e != nil {
  336. if e == utils.ErrNoRow {
  337. resp.Fail("合同登记不存在或已被删除", c)
  338. return
  339. }
  340. resp.FailMsg("获取合同登记失败", "Err:"+e.Error(), c)
  341. return
  342. }
  343. e = item.Delete()
  344. if e != nil {
  345. resp.FailMsg("删除记录失败", "Err:"+e.Error(), c)
  346. return
  347. }
  348. // 操作日志
  349. //go func() {
  350. // opData := ""
  351. // opDataByte, e := json.Marshal(req)
  352. // if e != nil {
  353. // return
  354. // }
  355. // opData = string(opDataByte)
  356. //
  357. // logItem := new(fms.ContractRegisterLog)
  358. // logItem.ContractRegisterId = req.ContractRegisterId
  359. // logItem.AdminId = int(adminInfo.AdminId)
  360. // logItem.AdminName = adminInfo.RealName
  361. // logItem.OpData = opData
  362. // logItem.OpType = fms.ContractRegisterOpTypeDel
  363. // logItem.CreateTime = nowTime
  364. // if e = logItem.Create(); e != nil {
  365. // return
  366. // }
  367. //}()
  368. resp.Ok("操作成功", c)
  369. }