contract_register.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. package fms
  2. import (
  3. "hongze/fms_api/global"
  4. "hongze/fms_api/models/base"
  5. "hongze/fms_api/utils"
  6. "time"
  7. )
  8. // ContractRegister 合同登记表
  9. type ContractRegister struct {
  10. ContractRegisterId int `gorm:"primaryKey;column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  11. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  12. PayContractCode string `gorm:"column:pay_contract_code" json:"pay_contract_code" description:"代付合同编号"`
  13. CrmContractId int `gorm:"column:crm_contract_id" json:"crm_contract_id" description:"CRM系统-合同ID"`
  14. ContractSource int `gorm:"column:contract_source" json:"contract_source" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
  15. CompanyName string `gorm:"column:company_name" json:"company_name" description:"客户名称"`
  16. PayCompanyName string `gorm:"column:pay_company_name" json:"pay_company_name" description:"代付方-客户名称"`
  17. ProductId int `gorm:"column:product_id" json:"product_id" description:"产品ID: 1-FICC; 2-权益"`
  18. SellerId int `gorm:"column:seller_id" json:"seller_id" description:"CRM系统-销售ID"`
  19. SellerName string `gorm:"column:seller_name" json:"seller_name" description:"CRM系统-销售名称"`
  20. ContractType int `gorm:"column:contract_type" json:"contract_type" description:"合同类型: 1-新签; 2-续约; 3-代付; 4-补充协议"`
  21. ContractAmount float64 `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
  22. InvoicedAmount float64 `gorm:"column:invoiced_amount" json:"invoiced_amount" description:"开票金额"`
  23. PaymentAmount float64 `gorm:"column:payment_amount" json:"payment_amount" description:"到款金额"`
  24. StartDate time.Time `gorm:"column:start_date" json:"start_date" description:"合同开始日期"`
  25. EndDate time.Time `gorm:"column:end_date" json:"end_date" description:"合同结束日期"`
  26. SignDate time.Time `gorm:"column:sign_date" json:"sign_date" description:"合同签订日期"`
  27. AgreedPayTime string `gorm:"column:agreed_pay_time" json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
  28. ContractStatus int `gorm:"column:contract_status" json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  29. RegisterStatus int `gorm:"column:register_status" json:"register_status" description:"登记状态: 1-进行中; 2-已完成;"`
  30. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  31. ServiceRemark string `gorm:"column:service_remark" json:"service_remark" description:"套餐备注信息"`
  32. IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
  33. base.TimeBase
  34. }
  35. func (c *ContractRegister) TableName() string {
  36. return "contract_register"
  37. }
  38. func (c *ContractRegister) Create() (err error) {
  39. err = global.DEFAULT_MYSQL.Create(c).Error
  40. return
  41. }
  42. func (c *ContractRegister) AddInBatches(list []*ContractRegister) (err error) {
  43. err = global.DEFAULT_MYSQL.CreateInBatches(list, len(list)).Error
  44. return
  45. }
  46. func (c *ContractRegister) Update(updateCols []string) (err error) {
  47. err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
  48. return
  49. }
  50. func (c *ContractRegister) Fetch(id int) (item *ContractRegister, err error) {
  51. err = global.DEFAULT_MYSQL.Model(c).Where("is_deleted = 0 AND contract_register_id = ?", id).First(&item).Error
  52. return
  53. }
  54. func (c *ContractRegister) FetchByCondition(condition string, pars []interface{}) (item *ContractRegister, err error) {
  55. err = global.DEFAULT_MYSQL.Model(c).
  56. Where("is_deleted = 0").
  57. Where(condition, pars...).
  58. First(&item).Error
  59. return
  60. }
  61. func (c *ContractRegister) List(condition string, pars []interface{}) (list []*ContractRegister, err error) {
  62. list = make([]*ContractRegister, 0)
  63. err = global.DEFAULT_MYSQL.Model(c).
  64. Where("is_deleted = 0").
  65. Where(condition, pars...).
  66. Find(&list).Error
  67. return
  68. }
  69. func (c *ContractRegister) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractRegister, err error) {
  70. results = make([]*ContractRegister, 0)
  71. query := global.DEFAULT_MYSQL.Model(c).
  72. Where("is_deleted = 0").
  73. Where(condition, pars...)
  74. query.Count(&count)
  75. if len(page.GetOrderItemsString()) > 0 {
  76. query = query.Order(page.GetOrderItemsString())
  77. }
  78. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  79. return
  80. }
  81. // ContractRegisterListReq 合同登记列表请求体
  82. type ContractRegisterListReq struct {
  83. Keyword string `json:"keyword" form:"keyword" binding:"omitempty" description:"关键词"`
  84. StartDate string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"合同开始日期"`
  85. EndDate string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"合同结束日期"`
  86. ServiceType int `json:"service_type" form:"service_type" description:"套餐类型"`
  87. ContractType int `json:"contract_type" form:"contract_type" description:"合同类型"`
  88. RegisterStatus int `json:"register_status" form:"register_status" description:"登记状态"`
  89. base.PageReq
  90. }
  91. // ContractRegisterItem 合同登记
  92. type ContractRegisterItem struct {
  93. ContractRegisterId int `json:"contract_register_id" description:"登记ID"`
  94. ContractCode string `json:"contract_code" description:"合同编号"`
  95. CrmContractId int `json:"crm_contract_id" description:"CRM系统-合同ID"`
  96. ContractSource int `json:"contract_source" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
  97. CompanyName string `json:"company_name" description:"客户名称"`
  98. SellerId int `json:"seller_id" description:"CRM系统-销售ID"`
  99. SellerName string `json:"seller_name" description:"CRM系统-销售名称"`
  100. ContractType int `json:"contract_type" description:"合同类型: 1-新签; 2-续约"`
  101. ContractAmount float64 `json:"contract_amount" description:"合同金额"`
  102. InvoicedAmount float64 `json:"invoiced_amount" description:"开票金额"`
  103. PaymentAmount float64 `json:"payment_amount" description:"到款金额"`
  104. StartDate string `json:"start_date" description:"合同开始日期"`
  105. EndDate string `json:"end_date" description:"合同结束日期"`
  106. SignDate string `json:"sign_date" description:"合同签订日期"`
  107. AgreedPayTime string `json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
  108. ContractStatus int `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  109. RegisterStatus int `json:"register_status" description:"登记状态: 1-进行中; 2-已完成;"`
  110. Remark string `json:"remark" description:"备注信息"`
  111. CreateTime string `json:"create_time" description:"登记时间"`
  112. }
  113. // ContractRegisterList 合同登记列表
  114. type ContractRegisterList struct {
  115. *ContractRegisterItem
  116. ServicesName string `json:"services" description:"套餐名称"`
  117. InvoiceList []*ContractInvoiceItem `json:"invoice_list" description:"开票信息"`
  118. PaymentList []*ContractInvoiceItem `json:"payment_list" description:"到款信息"`
  119. }
  120. // ContractRegisterDelReq 合同登记-删除请求体
  121. type ContractRegisterDelReq struct {
  122. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  123. }
  124. // ContractRegisterUpdateStatusReq 合同登记-修改合同状态请求体
  125. type ContractRegisterUpdateStatusReq struct {
  126. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  127. ContractStatus int `json:"contract_status" binding:"oneof=1 2 3" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  128. }
  129. // ContractRegisterAddReq 新增合同登记请求体
  130. type ContractRegisterAddReq struct {
  131. ContractCode string `json:"contract_code" binding:"required" description:"合同编号"`
  132. PayContractCode string `json:"pay_contract_code" description:"代付合同编号"`
  133. CrmContractId int `json:"crm_contract_id" description:"CRM系统-合同ID"`
  134. ContractSource int `json:"contract_source" binding:"oneof=0 1" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
  135. CompanyName string `json:"company_name" binding:"required" description:"客户名称"`
  136. PayCompanyName string `json:"pay_company_name" description:"代付方客户名称"`
  137. SellerId int `json:"seller_id" binding:"required" description:"CRM系统-销售ID"`
  138. SellerName string `json:"seller_name" binding:"required" description:"CRM系统-销售名称"`
  139. ContractType int `json:"contract_type" binding:"oneof=1 2 3 4" description:"合同类型: 1-新签; 2-续约; 3-代付; 4-补充协议"`
  140. ContractAmount float64 `json:"contract_amount" binding:"required" description:"合同金额"`
  141. StartDate string `json:"start_date" binding:"required" description:"合同开始日期"`
  142. EndDate string `json:"end_date" binding:"required" description:"合同结束日期"`
  143. SignDate string `json:"sign_date" description:"合同签订日期"`
  144. AgreedPayTime string `json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
  145. ContractStatus int `json:"contract_status" binding:"oneof=1 2 3" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  146. Remark string `json:"remark" description:"备注信息"`
  147. ProductId int `json:"product_id" binding:"oneof=1 2" description:"产品ID"`
  148. ServiceRemark string `json:"service_remark" description:"套餐备注"`
  149. Services []ContractServiceAddReq `json:"services" description:"服务套餐内容"`
  150. }
  151. // ContractRegisterEditReq 编辑合同登记请求体
  152. type ContractRegisterEditReq struct {
  153. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  154. ContractRegisterAddReq
  155. }
  156. // CreateContractRegisterAndServices 新增合同登记及套餐
  157. func CreateContractRegisterAndServices(item *ContractRegister, serviceDetail []*ContractServiceAndDetail) (err error) {
  158. tx := global.DEFAULT_MYSQL.Begin()
  159. defer func() {
  160. if err != nil {
  161. tx.Rollback()
  162. } else {
  163. tx.Commit()
  164. }
  165. }()
  166. // 合同登记
  167. tx.Create(item)
  168. //nowTime := time.Now().Local()
  169. for i := 0; i < len(serviceDetail); i++ {
  170. // 合同服务
  171. t := serviceDetail[i]
  172. contractService := &ContractService{
  173. ContractRegisterId: item.ContractRegisterId,
  174. ProductId: item.ProductId,
  175. ServiceTemplateId: t.ServiceTemplateId,
  176. Title: t.Title,
  177. Value: t.Value,
  178. TableValue: t.TableValue,
  179. HasDetail: t.HasDetail,
  180. ChartPermissionId: t.ChartPermissionId,
  181. ChartPermissionIds: t.ChartPermissionIds,
  182. }
  183. contractService.Set()
  184. tx.Create(contractService)
  185. //// 合同服务详情
  186. //for j := 0; j < len(t.Detail); j++ {
  187. // contractServiceDetail := t.Detail[j]
  188. // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
  189. // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
  190. // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
  191. // contractServiceDetail.CreateTime = nowTime
  192. // tx.Create(contractServiceDetail)
  193. // t.Detail[j] = contractServiceDetail
  194. //}
  195. }
  196. return
  197. }
  198. // UpdateContractRegisterAndServices 新增合同登记及套餐
  199. func UpdateContractRegisterAndServices(item *ContractRegister, updateCols []string, serviceDetail []*ContractServiceAndDetail) (err error) {
  200. tx := global.DEFAULT_MYSQL.Begin()
  201. defer func() {
  202. if err != nil {
  203. tx.Rollback()
  204. } else {
  205. tx.Commit()
  206. }
  207. }()
  208. // 更新合同登记
  209. if e := item.Update(updateCols); e != nil {
  210. err = e
  211. return
  212. }
  213. // 删除原服务及详情信息
  214. sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
  215. tx.Exec(sql, item.ContractRegisterId)
  216. sql = `DELETE FROM contract_service_detail WHERE contract_register_id = ?`
  217. tx.Exec(sql, item.ContractRegisterId)
  218. // 新增合同服务
  219. //nowTime := time.Now().Local()
  220. for i := 0; i < len(serviceDetail); i++ {
  221. // 合同服务
  222. t := serviceDetail[i]
  223. contractService := &ContractService{
  224. ContractRegisterId: item.ContractRegisterId,
  225. ProductId: item.ProductId,
  226. ServiceTemplateId: t.ServiceTemplateId,
  227. Title: t.Title,
  228. Value: t.Value,
  229. TableValue: t.TableValue,
  230. HasDetail: t.HasDetail,
  231. ChartPermissionId: t.ChartPermissionId,
  232. ChartPermissionIds: t.ChartPermissionIds,
  233. }
  234. contractService.Set()
  235. tx.Create(contractService)
  236. //// 合同服务详情
  237. //for j := 0; j < len(t.Detail); j++ {
  238. // contractServiceDetail := t.Detail[j]
  239. // contractServiceDetail.ContractServiceId = contractService.ContractServiceId
  240. // contractServiceDetail.ContractRegisterId = item.ContractRegisterId
  241. // contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
  242. // contractServiceDetail.CreateTime = nowTime
  243. // tx.Create(contractServiceDetail)
  244. // t.Detail[j] = contractServiceDetail
  245. //}
  246. }
  247. return
  248. }
  249. // ContractRegisterDetailReq 合同登记-详情请求体
  250. type ContractRegisterDetailReq struct {
  251. ContractRegisterId int `json:"contract_register_id" form:"contract_register_id" binding:"required,gte=1"`
  252. }
  253. // ContractRegisterDetail-合同登记详情
  254. type ContractRegisterDetail struct {
  255. *ContractRegisterItem
  256. ServiceList []*ContractServiceAndDetail `json:"service_list" description:"合同服务及详情"`
  257. InvoiceList []*ContractInvoiceItem `json:"invoice_list" description:"开票信息"`
  258. PaymentList []*ContractInvoiceItem `json:"payment_list" description:"到款信息"`
  259. Logs []*ContractRegisterLogItem `json:"logs" description:"登记日志"`
  260. }
  261. // GetContractRegisterItemById 获取合同登记信息
  262. func GetContractRegisterItemById(id int) (result *ContractRegisterItem, err error) {
  263. item := new(ContractRegister)
  264. err = global.DEFAULT_MYSQL.Model(ContractRegister{}).
  265. Where("is_deleted = 0 AND contract_register_id = ?", id).
  266. First(&item).Error
  267. if err != nil && err != utils.ErrNoRow {
  268. return
  269. }
  270. result = formatContractRegister2Item(item)
  271. return
  272. }
  273. // GetContractRegisterItemPageList 获取合同登记列表-分页
  274. func GetContractRegisterItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractRegisterItem, err error) {
  275. list := make([]*ContractRegister, 0)
  276. query := global.DEFAULT_MYSQL.Table("contract_register").
  277. Where("is_deleted = 0").
  278. Where(condition, pars...)
  279. query.Count(&count)
  280. if len(page.GetOrderItemsString()) > 0 {
  281. query = query.Order(page.GetOrderItemsString())
  282. }
  283. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&list).Error
  284. if err != nil {
  285. return
  286. }
  287. for i := range list {
  288. results = append(results, formatContractRegister2Item(list[i]))
  289. }
  290. return
  291. }
  292. // formatContractRegister2Item 格式化ContractRegister
  293. func formatContractRegister2Item(item *ContractRegister) (formatItem *ContractRegisterItem) {
  294. formatItem = new(ContractRegisterItem)
  295. formatItem.ContractRegisterId = item.ContractRegisterId
  296. formatItem.ContractCode = item.ContractCode
  297. formatItem.CrmContractId = item.CrmContractId
  298. formatItem.ContractSource = item.ContractSource
  299. formatItem.CompanyName = item.CompanyName
  300. formatItem.SellerId = item.SellerId
  301. formatItem.SellerName = item.SellerName
  302. formatItem.ContractType = item.ContractType
  303. formatItem.ContractAmount = item.ContractAmount
  304. formatItem.InvoicedAmount = item.InvoicedAmount
  305. formatItem.PaymentAmount = item.PaymentAmount
  306. formatItem.StartDate = utils.TimeTransferString(utils.FormatDate, item.StartDate)
  307. formatItem.EndDate = utils.TimeTransferString(utils.FormatDate, item.EndDate)
  308. formatItem.SignDate = utils.TimeTransferString(utils.FormatDate, item.SignDate)
  309. formatItem.AgreedPayTime = item.AgreedPayTime
  310. formatItem.ContractStatus = item.ContractStatus
  311. formatItem.RegisterStatus = item.RegisterStatus
  312. formatItem.Remark = item.Remark
  313. formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
  314. return
  315. }