company_approval.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. package company_approval
  2. import (
  3. "hongze/hongze_mobile_admin/models/tables/admin"
  4. "hongze/hongze_mobile_admin/models/tables/company_delay_permission"
  5. "hongze/hongze_mobile_admin/models/tables/company_permission_log"
  6. "hongze/hongze_mobile_admin/models/tables/company_report_permission"
  7. "hongze/hongze_mobile_admin/utils"
  8. "rdluck_tools/orm"
  9. "time"
  10. )
  11. type CompanyApproval struct {
  12. CompanyApprovalId int `orm:"column(company_approval_id);pk"`
  13. CompanyId int
  14. ProductId int
  15. ApproveStatus string `description:"'待审批','已审批','驳回','已撤回'"`
  16. ApproveUserId int `description:"审批人"`
  17. ApproveRoleTypeCode string `description:"审批人角色类型"`
  18. ApproveRealName string `description:"审批人姓名"`
  19. ApproveTime time.Time `description:"审批时间"`
  20. ApproveContent string `description:"待审内容"`
  21. ApplyMethod int `description:"申请类型:1:试用->正式,2:冻结—>试用,3:流失—>正式,4:试用延期,5:原销售申请领取流失客户,6:正式客户申请服务更新"`
  22. ApplyReasons string `description:"申请原因"`
  23. ApplyUserId int `description:"申请人"`
  24. ApplyRealName string `description:"申请人姓名"`
  25. CreateTime time.Time `description:"申请时间"`
  26. ModifyTime time.Time `description:"修改时间"`
  27. CompanyContractId int `description:"合同id"`
  28. }
  29. //新增客户产品
  30. func AddCompanyApproval(item *CompanyApproval) (lastId int, err error) {
  31. o := orm.NewOrm()
  32. o.Begin()
  33. defer func() {
  34. if err != nil {
  35. o.Rollback()
  36. } else {
  37. o.Commit()
  38. }
  39. }()
  40. var newId int64
  41. newId, err = o.Insert(item)
  42. lastId = int(newId)
  43. if err != nil {
  44. return
  45. }
  46. sql := `UPDATE company_product SET approve_status=? WHERE company_id=? AND product_id=? `
  47. _, err = o.Raw(sql, item.ApproveStatus, item.CompanyId, item.ProductId).Exec()
  48. return
  49. }
  50. func GetCompanyApprovalCountById(companyId, productId int) (count int, err error) {
  51. sql := `SELECT COUNT(1) AS count FROM company_approval WHERE company_id=? AND product_id=? AND approve_status='待审批' `
  52. o := orm.NewOrm()
  53. err = o.Raw(sql, companyId, productId).QueryRow(&count)
  54. return
  55. }
  56. func GetCompanyApprovalByCompanyId(companyId, productId int) (item *CompanyApproval, err error) {
  57. sql := `SELECT * FROM company_approval WHERE company_id=? AND product_id=? AND approve_status='待审批' LIMIT 1 `
  58. o := orm.NewOrm()
  59. err = o.Raw(sql, companyId, productId).QueryRow(&item)
  60. return
  61. }
  62. //根据审批单id获取审批单详情
  63. func GetCompanyApprovalById(companyApprovalId int) (item *CompanyApproval, err error) {
  64. sql := `SELECT * FROM company_approval WHERE company_approval_id=? LIMIT 1 `
  65. o := orm.NewOrm()
  66. err = o.Raw(sql, companyApprovalId).QueryRow(&item)
  67. return
  68. }
  69. func GetCompanyApprovalByApprovalId(companyApprovalId int) (item *CompanyApproval, err error) {
  70. sql := `SELECT * FROM company_approval WHERE company_approval_id=? LIMIT 1 `
  71. o := orm.NewOrm()
  72. err = o.Raw(sql, companyApprovalId).QueryRow(&item)
  73. return
  74. }
  75. //客户审批单
  76. type CompanyApprovalList struct {
  77. CompanyId int
  78. ProductId int
  79. CompanyName string `description:"客户名称"`
  80. CreditCode string `description:"社会统一信用码"`
  81. CompanyType string `description:"客户类型"`
  82. IndustryName string `description:"行业名称"`
  83. SellerName string `description:"销售名称"`
  84. CreateTime string `description:"创建时间"`
  85. ApprovalTime string `description:"提交申请时间"`
  86. ApproveTime string `description:"审批时间"`
  87. Status string `description:"客户状态"`
  88. ApproveContent string `description:"待审内容"`
  89. ApproveStatus string `description:"当前状态"`
  90. ApplyMethod int `description:"申请类型:申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新"`
  91. ApplyReasons string `description:"申请理由"`
  92. FreezeStartDate string `description:"冻结开始日期"`
  93. FreezeEndDate string `description:"冻结结束日期"`
  94. FreezeExpireDays int `description:"冻结到期天数"`
  95. Address string `description:"地址"`
  96. Source string `description:"客户来源"`
  97. ApproveRemark string `description:"驳回理由"`
  98. StartDate string `description:"开始日期"`
  99. EndDate string `description:"结束日期"`
  100. ExpireDay int `description:"服务到期天数"`
  101. CompanyApprovalId int `description:"审批记录ID"`
  102. ApprovalCount int `description:"已延期审批次数"`
  103. CompanyContractId int `description:"合同id"`
  104. DelayPermission string `description:"延期申请品种"`
  105. ApplyRealName string `description:"申请人姓名"`
  106. ApproveRoleTypeCode string `description:"审批人角色类型",json:"-"`
  107. OpButton bool `description:"是否审批操作权限"`
  108. }
  109. func GetApprovalList(condition string, pars []interface{}, startSize, pageSize int) (items []*CompanyApprovalList, err error) {
  110. o := orm.NewOrm()
  111. sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
  112. b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
  113. c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
  114. c.apply_real_name,c.approve_role_type_code
  115. FROM company AS a
  116. INNER JOIN company_product AS b ON a.company_id=b.company_id
  117. INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
  118. WHERE 1=1 `
  119. if condition != "" {
  120. sql += condition
  121. }
  122. sql += ` ORDER BY c.modify_time DESC LIMIT ?,? `
  123. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  124. return
  125. }
  126. func GetApprovalListByApprovalId(condition string, pars []interface{}, companyApprovalId int) (item *CompanyApprovalList, err error) {
  127. o := orm.NewOrm()
  128. sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
  129. b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
  130. c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
  131. c.apply_real_name,c.approve_role_type_code
  132. FROM company AS a
  133. INNER JOIN company_product AS b ON a.company_id=b.company_id
  134. INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
  135. WHERE 1=1 AND company_approval_id=?`
  136. if condition != "" {
  137. sql += condition
  138. }
  139. sql += ` ORDER BY c.modify_time DESC `
  140. err = o.Raw(sql, companyApprovalId, pars).QueryRow(&item)
  141. return
  142. }
  143. func GetApprovalCount(condition string, pars []interface{}) (count int, err error) {
  144. o := orm.NewOrm()
  145. sql := `SELECT COUNT(1) AS count
  146. FROM company AS a
  147. INNER JOIN company_product AS b ON a.company_id=b.company_id
  148. INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
  149. WHERE 1=1 `
  150. if condition != "" {
  151. sql += condition
  152. }
  153. sql += ` ORDER BY c.modify_time DESC `
  154. err = o.Raw(sql, pars).QueryRow(&count)
  155. return
  156. }
  157. //试用转正式
  158. func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string) (err error) {
  159. o := orm.NewOrm()
  160. o.Begin()
  161. defer func() {
  162. if err != nil {
  163. o.Rollback()
  164. } else {
  165. o.Commit()
  166. }
  167. }()
  168. sql := `UPDATE company_product SET status='正式',approve_status='已审批',start_date=?,end_date=?,modify_time=NOW(),formal_time=NOW() WHERE company_id=? AND product_id=? `
  169. _, err = o.Raw(sql, startDate, endDate, companyId, productId).Exec()
  170. if err != nil {
  171. return
  172. }
  173. sql = `UPDATE company SET type=1,last_updated_time=NOW() WHERE company_id=? `
  174. _, err = o.Raw(sql, companyId).Exec()
  175. if err != nil {
  176. return
  177. }
  178. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  179. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  180. if err != nil {
  181. return
  182. }
  183. items := make([]*company_report_permission.CompanyReportPermission, 0)
  184. sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
  185. _, err = o.Raw(sql, companyId, productId).QueryRows(&items)
  186. for _, pv := range items {
  187. cpLog := new(company_permission_log.CompanyPermissionLog)
  188. cpLog.CompanyId = companyId
  189. cpLog.ChartPermissionId = pv.ChartPermissionId
  190. cpLog.CreateTime = time.Now()
  191. cpLog.SysUserId = sellerId
  192. cpLog.SysUserName = sellerName
  193. cpLog.StartDate = pv.StartDate
  194. cpLog.EndDate = pv.EndDate
  195. cpLog.ProductId = productId
  196. cpLog.ProductName = pv.ProductName
  197. go company_permission_log.AddCompanyPermissionLog(cpLog)
  198. }
  199. sql = `DELETE FROM company_report_permission WHERE company_id=? AND product_id=?`
  200. _, err = o.Raw(sql, companyId, productId).Exec()
  201. if err != nil {
  202. return
  203. }
  204. contractPermission := make([]*company_report_permission.CompanyReportPermission, 0)
  205. sql = `SELECT * FROM company_contract_permission WHERE company_contract_id=? AND company_id=? `
  206. _, err = o.Raw(sql, companyContractId, companyId).QueryRows(&contractPermission)
  207. if err != nil {
  208. return
  209. }
  210. for _, pv := range contractPermission {
  211. sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
  212. chart_permission_id, start_date,end_date,product_id,product_name, modify_time,company_contract_id,status)
  213. VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?,?) `
  214. _, err = o.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
  215. if err != nil {
  216. return
  217. }
  218. }
  219. sql = `UPDATE company_contract SET status=1 WHERE company_contract_id=? AND company_id=? AND product_id=? `
  220. _, err = o.Raw(sql, companyContractId, companyId, productId).Exec()
  221. if err != nil {
  222. return
  223. }
  224. return
  225. }
  226. //冻结转试用
  227. func FreezeToTryOut(companyId, productId, sellerId, companyApprovalId, applyUserId int, sellerName, productName string) (err error) {
  228. o := orm.NewOrm()
  229. o.Begin()
  230. defer func() {
  231. if err != nil {
  232. o.Rollback()
  233. } else {
  234. o.Commit()
  235. }
  236. }()
  237. startDate := time.Now().Format(utils.FormatDate)
  238. endDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
  239. sellerItem, err := admin.GetAdminById(applyUserId)
  240. if err != nil {
  241. return
  242. }
  243. //更新用户产品状态
  244. sql := `UPDATE company_product SET status='试用',approve_status='已审批',freeze_start_date=null,freeze_end_date=null,freeze_time=null,
  245. start_date=?,end_date=?,seller_id=?,seller_name=?,group_id=?,department_id=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  246. _, err = o.Raw(sql, startDate, endDate, sellerItem.AdminId, sellerItem.RealName, sellerItem.GroupId, sellerItem.DepartmentId, companyId, productId).Exec()
  247. if err != nil {
  248. return
  249. }
  250. //更新用户状态
  251. sql = `UPDATE company SET type=2,last_updated_time=NOW() WHERE company_id=? `
  252. _, err = o.Raw(sql, companyId).Exec()
  253. if err != nil {
  254. return
  255. }
  256. //更新审批单
  257. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  258. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  259. if err != nil {
  260. return
  261. }
  262. //查询该用户所有产品权限,并把当前数据做日志(允许添加不修改的数据)
  263. items := make([]*company_report_permission.CompanyReportPermission, 0)
  264. sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
  265. _, err = o.Raw(sql, companyId, productId).QueryRows(&items)
  266. for _, pv := range items {
  267. cpLog := new(company_permission_log.CompanyPermissionLog)
  268. cpLog.CompanyId = companyId
  269. cpLog.ChartPermissionId = pv.ChartPermissionId
  270. cpLog.CreateTime = time.Now()
  271. cpLog.SysUserId = sellerId
  272. cpLog.SysUserName = sellerName
  273. cpLog.StartDate = pv.StartDate
  274. cpLog.EndDate = pv.EndDate
  275. cpLog.ProductId = productId
  276. cpLog.ProductName = pv.ProductName
  277. go company_permission_log.AddCompanyPermissionLog(cpLog)
  278. }
  279. //更新产品(2021年03月02日14:58:50注释,调整为从申请权限表中获取数据并修改)
  280. //sql = `UPDATE company_report_permission SET start_date=?,end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  281. //_, err = o.Raw(sql, startDate, endDate, companyId, productId).Exec()
  282. //if err != nil {
  283. // return
  284. //}
  285. //查询原先是否已经存在权限,如果有权限了,那么需要先删除原有的权限
  286. count, _ := company_report_permission.GetCompanyReportPermissionCount(companyId, productId)
  287. if count > 0 {
  288. sql := ` DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
  289. _, err = o.Raw(sql, companyId, productId).Exec()
  290. if err != nil {
  291. return
  292. }
  293. }
  294. //获取需要试用的权限
  295. delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
  296. if err != nil {
  297. return err
  298. }
  299. status := `试用`
  300. for _, v := range delayPermissionItems {
  301. sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
  302. chart_permission_id, start_date,end_date,product_id,product_name, modify_time,status)
  303. VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
  304. _, err = o.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
  305. if err != nil {
  306. return err
  307. }
  308. }
  309. return
  310. }
  311. //试用延期
  312. func TryOutDelay(companyId, productId, sellerId, companyApprovalId int, sellerName, endDate, productName string) (err error) {
  313. o := orm.NewOrm()
  314. o.Begin()
  315. defer func() {
  316. if err != nil {
  317. o.Rollback()
  318. } else {
  319. o.Commit()
  320. }
  321. }()
  322. endDateTime, err := time.Parse(utils.FormatDate, endDate)
  323. if err != nil {
  324. return
  325. }
  326. newEndDate := endDateTime.AddDate(0, 2, 0).Format(utils.FormatDate)
  327. //更新用户产品状态
  328. sql := `UPDATE company_product SET approve_status='已审批',end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  329. _, err = o.Raw(sql, newEndDate, companyId, productId).Exec()
  330. if err != nil {
  331. return
  332. }
  333. //更新审批单
  334. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  335. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  336. if err != nil {
  337. return
  338. }
  339. //查询该用户所有产品权限,并把当前数据做日志(允许添加不修改的数据)
  340. items := make([]*company_report_permission.CompanyReportPermission, 0)
  341. sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
  342. _, err = o.Raw(sql, companyId, productId).QueryRows(&items)
  343. for _, pv := range items {
  344. cpLog := new(company_permission_log.CompanyPermissionLog)
  345. cpLog.CompanyId = companyId
  346. cpLog.ChartPermissionId = pv.ChartPermissionId
  347. cpLog.CreateTime = time.Now()
  348. cpLog.SysUserId = sellerId
  349. cpLog.SysUserName = sellerName
  350. cpLog.StartDate = pv.StartDate
  351. cpLog.EndDate = pv.EndDate
  352. cpLog.ProductId = productId
  353. cpLog.ProductName = pv.ProductName
  354. go company_permission_log.AddCompanyPermissionLog(cpLog)
  355. }
  356. //获取需要延期的权限
  357. delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
  358. if err != nil {
  359. return err
  360. }
  361. status := `试用`
  362. for _, v := range delayPermissionItems {
  363. isExist, err := company_report_permission.GetCompanyPermissionCheck(companyId, v.ChartPermissionId)
  364. if err != nil {
  365. return err
  366. }
  367. if isExist > 0 {
  368. sql = `UPDATE company_report_permission SET end_date=?,status=?,modify_time=NOW() WHERE company_id=? AND product_id=? AND chart_permission_id=?`
  369. _, err = o.Raw(sql, newEndDate, status, companyId, productId, v.ChartPermissionId).Exec()
  370. if err != nil {
  371. return err
  372. }
  373. } else {
  374. sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
  375. chart_permission_id, start_date,end_date,product_id,product_name, modify_time,status)
  376. VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
  377. _, err = o.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, newEndDate, productId, productName, status).Exec()
  378. if err != nil {
  379. return err
  380. }
  381. }
  382. }
  383. return
  384. }
  385. //原销售申请领取
  386. func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserId int, sysUserName, productName string) (err error) {
  387. o := orm.NewOrm()
  388. o.Begin()
  389. defer func() {
  390. if err != nil {
  391. o.Rollback()
  392. } else {
  393. o.Commit()
  394. }
  395. }()
  396. sellerItem, err := admin.GetAdminById(applyUserId)
  397. if err != nil {
  398. return
  399. }
  400. startDate := time.Now().Format(utils.FormatDate)
  401. endDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
  402. //更新用户产品状态
  403. sql := `UPDATE company_product SET status='试用',approve_status='已审批', start_date=?,end_date=?,seller_id=?,seller_name=?,group_id=?,department_id=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  404. _, err = o.Raw(sql, startDate, endDate, sellerItem.AdminId, sellerItem.RealName, sellerItem.GroupId, sellerItem.DepartmentId, companyId, productId).Exec()
  405. if err != nil {
  406. return
  407. }
  408. //更新用户状态
  409. sql = `UPDATE company SET type=2,last_updated_time=NOW() WHERE company_id=? `
  410. _, err = o.Raw(sql, companyId).Exec()
  411. if err != nil {
  412. return
  413. }
  414. //更新审批单
  415. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  416. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  417. if err != nil {
  418. return
  419. }
  420. //查询该用户所有产品权限,并把当前数据做日志(允许添加不修改的数据)
  421. items := make([]*company_report_permission.CompanyReportPermission, 0)
  422. sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
  423. _, err = o.Raw(sql, companyId, productId).QueryRows(&items)
  424. for _, pv := range items {
  425. cpLog := new(company_permission_log.CompanyPermissionLog)
  426. cpLog.CompanyId = companyId
  427. cpLog.ChartPermissionId = pv.ChartPermissionId
  428. cpLog.CreateTime = time.Now()
  429. cpLog.SysUserId = sysUserId
  430. cpLog.SysUserName = sysUserName
  431. cpLog.StartDate = pv.StartDate
  432. cpLog.EndDate = pv.EndDate
  433. cpLog.ProductId = productId
  434. cpLog.ProductName = pv.ProductName
  435. go company_permission_log.AddCompanyPermissionLog(cpLog)
  436. }
  437. //更新产品(2021年03月02日14:58:50注释,调整为从申请权限表中获取数据并修改)
  438. //sql = `UPDATE company_report_permission SET start_date=?,end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  439. //_, err = o.Raw(sql, startDate, endDate, companyId, productId).Exec()
  440. //if err != nil {
  441. // return
  442. //}
  443. //查询原先是否已经存在权限,如果有权限了,那么需要先删除原有的权限
  444. count, _ := company_report_permission.GetCompanyReportPermissionCount(companyId, productId)
  445. if count > 0 {
  446. sql := ` DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
  447. _, err = o.Raw(sql, companyId, productId).Exec()
  448. if err != nil {
  449. return
  450. }
  451. }
  452. //获取需要试用的权限
  453. delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
  454. if err != nil {
  455. return err
  456. }
  457. status := `试用`
  458. for _, v := range delayPermissionItems {
  459. sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
  460. chart_permission_id, start_date,end_date,product_id,product_name, modify_time,status)
  461. VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
  462. _, err = o.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
  463. if err != nil {
  464. return err
  465. }
  466. }
  467. return
  468. }
  469. //申请服务更新
  470. func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string) (err error) {
  471. o := orm.NewOrm()
  472. o.Begin()
  473. defer func() {
  474. if err != nil {
  475. o.Rollback()
  476. } else {
  477. o.Commit()
  478. }
  479. }()
  480. items := make([]*company_report_permission.CompanyReportPermission, 0)
  481. sql := `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
  482. _, err = o.Raw(sql, companyId, productId).QueryRows(&items)
  483. if err != nil {
  484. return
  485. }
  486. //已存在的权限map
  487. nowCompanyReportPermissionMap := make(map[int]*company_report_permission.CompanyReportPermission)
  488. //产品服务的开始、结束日期(非产品权限)
  489. updateStartDate := startDate
  490. updateStartDateTime, err := time.Parse(utils.FormatDate, updateStartDate)
  491. if err != nil {
  492. return
  493. }
  494. updateEndDate := endDate
  495. updateEndDateTime, err := time.Parse(utils.FormatDate, updateEndDate)
  496. if err != nil {
  497. return
  498. }
  499. for _, pv := range items {
  500. cpLog := new(company_permission_log.CompanyPermissionLog)
  501. cpLog.CompanyId = companyId
  502. cpLog.ChartPermissionId = pv.ChartPermissionId
  503. cpLog.CreateTime = time.Now()
  504. cpLog.SysUserId = sellerId
  505. cpLog.SysUserName = sellerName
  506. cpLog.StartDate = pv.StartDate
  507. cpLog.EndDate = pv.EndDate
  508. cpLog.ProductId = productId
  509. cpLog.ProductName = pv.ProductName
  510. go company_permission_log.AddCompanyPermissionLog(cpLog)
  511. //将权限插入到已存在的权限map中
  512. nowCompanyReportPermissionMap[pv.ChartPermissionId] = pv
  513. //校验原始数据中的开始日期是否小于合同内的开始日期,如果小于,那么变更为原先的合同开始日期
  514. tmpStartDate, tmpErr := time.Parse(utils.FormatDate, pv.StartDate)
  515. if tmpErr != nil {
  516. err = tmpErr
  517. return
  518. }
  519. if tmpStartDate.Before(updateStartDateTime) {
  520. updateStartDateTime = tmpStartDate
  521. }
  522. //校验原始数据中的结束日期是否大于合同内的结束日期,如果大于,那么变更为原先的合同结束日期
  523. tmpEndDate, tmpErr := time.Parse(utils.FormatDate, pv.EndDate)
  524. if tmpErr != nil {
  525. err = tmpErr
  526. return
  527. }
  528. if tmpEndDate.After(updateEndDateTime) {
  529. updateEndDateTime = tmpEndDate
  530. }
  531. }
  532. //删除所有权限
  533. //sql = `DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
  534. //_, err = o.Raw(sql, companyId, productId).Exec()
  535. //if err != nil {
  536. // return
  537. //}
  538. //更新客户产品信息
  539. sql = `UPDATE company_product SET status='正式',approve_status='已审批',start_date=?,end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
  540. _, err = o.Raw(sql, updateStartDateTime, updateEndDateTime, companyId, productId).Exec()
  541. if err != nil {
  542. return
  543. }
  544. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  545. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  546. if err != nil {
  547. return
  548. }
  549. contractPermission := make([]*company_report_permission.CompanyReportPermission, 0)
  550. sql = `SELECT * FROM company_contract_permission WHERE company_contract_id=? AND company_id=? `
  551. _, err = o.Raw(sql, companyContractId, companyId).QueryRows(&contractPermission)
  552. if err != nil {
  553. return
  554. }
  555. for _, pv := range contractPermission {
  556. nowPermission, ok := nowCompanyReportPermissionMap[pv.ChartPermissionId]
  557. //判断是否已经存在该权限,如果存在的话,那么是修改,否则是新增
  558. if ok {
  559. needUpdate := false
  560. if nowPermission.Status != "正式" && nowPermission.Status != "永续" {
  561. needUpdate = true
  562. }
  563. //如果 需要更新 字段 为false,那么再去校验时间
  564. if needUpdate == false {
  565. //如果当前存该权限,那么去校验是否需要修改
  566. nowPermissionEndDateTime, tmpErr := time.Parse(utils.FormatDate, nowPermission.EndDate)
  567. if tmpErr != nil {
  568. err = tmpErr
  569. return
  570. }
  571. contractPermissionEndDateTime, tmpErr := time.Parse(utils.FormatDate, pv.EndDate)
  572. if tmpErr != nil {
  573. err = tmpErr
  574. return
  575. }
  576. if contractPermissionEndDateTime.After(nowPermissionEndDateTime) {
  577. needUpdate = true
  578. }
  579. }
  580. //如果 需要更新 字段 为 true,那么就去更新
  581. if needUpdate {
  582. sql = `update company_report_permission set end_date=?,last_updated_time=now(),modify_time=now(),company_contract_id=?,status=? where company_report_permission_id=? `
  583. _, tmpErr := o.Raw(sql, pv.EndDate, pv.CompanyContractId, pv.Status, nowPermission.CompanyReportPermissionId).Exec()
  584. err = tmpErr
  585. if err != nil {
  586. return
  587. }
  588. }
  589. } else {
  590. sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
  591. chart_permission_id, start_date,end_date,product_id,product_name, modify_time,company_contract_id,status)
  592. VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?,?) `
  593. _, tmpErr := o.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
  594. err = tmpErr
  595. if err != nil {
  596. return
  597. }
  598. }
  599. }
  600. sql = `UPDATE company_contract SET status=1,modify_time=NOW() WHERE company_contract_id=? AND company_id=? AND product_id=? `
  601. _, err = o.Raw(sql, companyContractId, companyId, productId).Exec()
  602. if err != nil {
  603. return
  604. }
  605. return
  606. }
  607. //审批拒绝
  608. func ApproveRefuse(companyId, productId int, approveStatus, approveRemark string) (err error) {
  609. o := orm.NewOrm()
  610. o.Begin()
  611. defer func() {
  612. if err != nil {
  613. o.Rollback()
  614. } else {
  615. o.Commit()
  616. }
  617. }()
  618. sql := `UPDATE company_product
  619. SET
  620. approve_status = '驳回',
  621. modify_time=NOW()
  622. WHERE company_id = ? AND product_id=? `
  623. _, err = o.Raw(sql, companyId, productId).Exec()
  624. if err != nil {
  625. return
  626. }
  627. sql = ` UPDATE company_approval
  628. SET
  629. approve_status = '驳回',
  630. approve_remark=?,
  631. approve_time=NOW(),
  632. modify_time=NOW()
  633. WHERE company_id = ? AND product_id=? AND approve_status='待审批' `
  634. _, err = o.Raw(sql, approveRemark, companyId, productId).Exec()
  635. return
  636. }
  637. //更新审批单、合同状态
  638. func ApplyApproveContract(companyId, productId, companyApprovalId, companyContractId int) (err error) {
  639. o := orm.NewOrm()
  640. o.Begin()
  641. defer func() {
  642. if err != nil {
  643. o.Rollback()
  644. } else {
  645. o.Commit()
  646. }
  647. }()
  648. sql := `UPDATE company_product SET approve_status='已审批',modify_time=NOW() WHERE company_id=? AND product_id=? `
  649. _, err = o.Raw(sql, companyId, productId).Exec()
  650. if err != nil {
  651. return
  652. }
  653. //更新审批单
  654. sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
  655. _, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
  656. if err != nil {
  657. return
  658. }
  659. //更新合同
  660. sql = `UPDATE company_contract SET status=1,modify_time=NOW() WHERE company_contract_id=? AND company_id=? AND product_id=? `
  661. _, err = o.Raw(sql, companyContractId, companyId, productId).Exec()
  662. if err != nil {
  663. return
  664. }
  665. return
  666. }
  667. func GetCompanyApprovalDetailById(companyId, productId int) (item *CompanyApproval, err error) {
  668. sql := `SELECT * FROM company_approval WHERE company_id=? AND product_id=? AND approve_status IN('驳回','已撤回') ORDER BY modify_time DESC LIMIT 1 `
  669. o := orm.NewOrm()
  670. err = o.Raw(sql, companyId, productId).QueryRow(&item)
  671. return
  672. }
  673. type CompanyApplyDeleteReq struct {
  674. CompanyId int `description:"客户id"`
  675. CompanyApprovalId int `description:"审批记录ID"`
  676. }
  677. //申请服务更新
  678. func ApplyDelete(companyId, companyApprovalId, productId int) (err error) {
  679. o := orm.NewOrm()
  680. o.Begin()
  681. defer func() {
  682. if err != nil {
  683. o.Rollback()
  684. } else {
  685. o.Commit()
  686. }
  687. }()
  688. sql := `DELETE FROM company_approval WHERE company_approval_id=? `
  689. _, err = o.Raw(sql, companyApprovalId).Exec()
  690. if err != nil {
  691. return
  692. }
  693. sql = `UPDATE company_product SET approve_status='' WHERE company_id=? AND product_id=? `
  694. _, err = o.Raw(sql, companyId, productId).Exec()
  695. if err != nil {
  696. return
  697. }
  698. return
  699. }
  700. //修改申请信息
  701. func ModifyCompanyApproval(companyId, productId, companyApprovalId int, approveContent, applyReasons string) (err error) {
  702. o := orm.NewOrm()
  703. o.Begin()
  704. defer func() {
  705. if err != nil {
  706. utils.FileLog.Info("试用延期申请:Err %s", err.Error())
  707. o.Rollback()
  708. } else {
  709. o.Commit()
  710. }
  711. }()
  712. sql := `UPDATE company_approval SET approve_status = '待审批', approve_content=?,apply_reasons=?,modify_time=NOW() WHERE company_approval_id = ? `
  713. _, err = o.Raw(sql, approveContent, applyReasons, companyApprovalId).Exec()
  714. if err != nil {
  715. return
  716. }
  717. sql = `UPDATE company_product SET approve_status='待审批' WHERE company_id=? AND product_id=? `
  718. _, err = o.Raw(sql, companyId, productId).Exec()
  719. utils.FileLog.Info("试用延期申请:Err %s,%s,%d", sql, companyId, productId)
  720. return
  721. }
  722. ////修改申请信息
  723. //func ModifyCompanyTurnPositive(item *CompanyApplyTurnPositiveReq, productId, companyContractId int) (err error) {
  724. // o := orm.NewOrm()
  725. // o.Begin()
  726. // defer func() {
  727. // if err != nil {
  728. // o.Rollback()
  729. // } else {
  730. // o.Commit()
  731. // }
  732. // }()
  733. // sql := `UPDATE company_contract
  734. // SET
  735. // start_date = ?,
  736. // end_date = ?,
  737. // money = ?,
  738. // pay_method = ?,
  739. // pay_channel = ?,
  740. // img_url = ?,
  741. // modify_time = NOW()
  742. // WHERE company_contract_id = ? `
  743. // _, err = o.Raw(sql, item.StartDate, item.EndDate, item.Money, item.PayMethod, item.PayChannel, item.ImgUrl, companyContractId).Exec()
  744. // if err != nil {
  745. // return
  746. // }
  747. //
  748. // sql = `DELETE FROM company_contract_permission WHERE company_contract_id = ? `
  749. // _, err = o.Raw(sql, companyContractId).Exec()
  750. // if err != nil {
  751. // return
  752. // }
  753. //
  754. // permissionArr := strings.Split(item.PermissionIds, ",")
  755. // for _, v := range permissionArr {
  756. // contractPermission := new(CompanyContractPermission)
  757. // contractPermission.CompanyId = item.CompanyId
  758. // contractPermission.CompanyContractId = companyContractId
  759. // contractPermission.ChartPermissionId = v
  760. // contractPermission.StartDate = item.StartDate
  761. // contractPermission.EndDate = item.EndDate
  762. // contractPermission.ModifyTime = time.Now()
  763. // contractPermission.CreateTime = time.Now()
  764. // err = AddCompanyContractPermission(contractPermission)
  765. // if err != nil {
  766. // return
  767. // }
  768. // //新增日志
  769. // {
  770. // itemLog := new(CompanyContractPermissionLog)
  771. // itemLog.CompanyId = item.CompanyId
  772. // itemLog.CompanyContractId = companyContractId
  773. // itemLog.ChartPermissionId = v
  774. // itemLog.StartDate = item.StartDate
  775. // itemLog.EndDate = item.EndDate
  776. // itemLog.ModifyTime = time.Now()
  777. // itemLog.CreateTime = time.Now()
  778. // itemLog.LogCreateTime = time.Now()
  779. // go AddCompanyContractPermissionLog(itemLog)
  780. // }
  781. // }
  782. //
  783. // sql = `UPDATE company_approval SET approve_status = '待审批',modify_time=NOW() WHERE company_approval_id = ? `
  784. // _, err = o.Raw(sql, item.CompanyApprovalId).Exec()
  785. // if err != nil {
  786. // return
  787. // }
  788. // sql = `UPDATE company_product SET approve_status='待审批' WHERE company_id=? AND product_id=? `
  789. // _, err = o.Raw(sql, item.CompanyId, productId).Exec()
  790. // return
  791. //}
  792. //
  793. ////修改申请信息
  794. //func ModifyCompanyApplyServiceUpdate(item *CompanyApplyServiceUpdateReq, productId, companyContractId int) (err error) {
  795. // o := orm.NewOrm()
  796. // o.Begin()
  797. // defer func() {
  798. // if err != nil {
  799. // o.Rollback()
  800. // } else {
  801. // o.Commit()
  802. // }
  803. // }()
  804. // sql := `UPDATE company_contract
  805. // SET
  806. // start_date = ?,
  807. // end_date = ?,
  808. // money = ?,
  809. // pay_method = ?,
  810. // pay_channel = ?,
  811. // img_url = ?,
  812. // modify_time = NOW()
  813. // WHERE company_contract_id = ? `
  814. // _, err = o.Raw(sql, item.StartDate, item.EndDate, item.Money, item.PayMethod, item.PayChannel, item.ImgUrl, companyContractId).Exec()
  815. // if err != nil {
  816. // return
  817. // }
  818. //
  819. // sql = `DELETE FROM company_contract_permission WHERE company_contract_id = ? `
  820. // _, err = o.Raw(sql, companyContractId).Exec()
  821. // if err != nil {
  822. // return
  823. // }
  824. //
  825. // permissionArr := strings.Split(item.PermissionIds, ",")
  826. // for _, v := range permissionArr {
  827. // contractPermission := new(CompanyContractPermission)
  828. // contractPermission.CompanyId = item.CompanyId
  829. // contractPermission.CompanyContractId = companyContractId
  830. // contractPermission.ChartPermissionId = v
  831. // contractPermission.StartDate = item.StartDate
  832. // contractPermission.EndDate = item.EndDate
  833. // contractPermission.ModifyTime = time.Now()
  834. // contractPermission.CreateTime = time.Now()
  835. // err = AddCompanyContractPermission(contractPermission)
  836. // if err != nil {
  837. // return
  838. // }
  839. // //新增日志
  840. // {
  841. // itemLog := new(CompanyContractPermissionLog)
  842. // itemLog.CompanyId = item.CompanyId
  843. // itemLog.CompanyContractId = companyContractId
  844. // itemLog.ChartPermissionId = v
  845. // itemLog.StartDate = item.StartDate
  846. // itemLog.EndDate = item.EndDate
  847. // itemLog.ModifyTime = time.Now()
  848. // itemLog.CreateTime = time.Now()
  849. // itemLog.LogCreateTime = time.Now()
  850. // go AddCompanyContractPermissionLog(itemLog)
  851. // }
  852. // }
  853. //
  854. // sql = `UPDATE company_approval SET approve_status = '待审批',modify_time=NOW() WHERE company_approval_id = ? `
  855. // _, err = o.Raw(sql, item.CompanyApprovalId).Exec()
  856. // if err != nil {
  857. // return
  858. // }
  859. // sql = `UPDATE company_product SET approve_status='待审批' WHERE company_id=? AND product_id=? `
  860. // _, err = o.Raw(sql, item.CompanyId, productId).Exec()
  861. // return
  862. //}
  863. func GetCompanyApprovalCount(companyId, productId int) (count int, err error) {
  864. sql := `SELECT COUNT(1) AS count FROM company_approval WHERE company_id=? AND product_id=? AND approve_content='试用延期' `
  865. o := orm.NewOrm()
  866. err = o.Raw(sql, companyId, productId).QueryRow(&count)
  867. return
  868. }