final_material_process.go 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package final
  2. import (
  3. "errors"
  4. "fmt"
  5. "zhiyuan/pkg/db"
  6. "zhiyuan/pkg/logger"
  7. "zhiyuan/pkg/utils"
  8. "github.com/gin-gonic/gin"
  9. )
  10. type FinalMaterialProcess struct {
  11. ID int64 `json:"id" prop:"add:false"`
  12. MaterialId int64 `json:"material_id" label:"材料ID" type:"int"`
  13. CollectId int64 `json:"collect_id" label:"汇总ID" type:"int"`
  14. Explain string `json:"explain" label:"说明" type:"string" search:"like"`
  15. Pictures string `json:"pictures" label:"图片" type:"string" search:"like"`
  16. Total float64 `json:"total" label:"金额" type:"float" default:"0"`
  17. Modify string `json:"modify" type:"int" prop:"add:false" default:"0"`
  18. Type int64 `json:"type" label:"类型" type:"int" prop:"add" default:"0"`
  19. Signature string `json:"signature" label:"签名" prop:"add" type:"string"`
  20. State int64 `json:"state" label:"状态" type:"int" prop:"add" default:"0"`
  21. CreatedId int64 `json:"created_id" label:"创建人员" type:"int" prop:"add:false" search:"="`
  22. CreatedName string `json:"created_name" prop:"add:false select:created.username"`
  23. CreatedPhone string `json:"created_phone" prop:"add:false select:created.phone"`
  24. CreatedHeadimgurl string `json:"created_headimgurl" prop:"add:false select:created.headimgurl"`
  25. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  26. CreatedAt int64 `json:"created_at" prop:"add:false"`
  27. UpdatedAt int64 `json:"updated_at" prop:"add:false"`
  28. db.BaseModel
  29. }
  30. func (FinalMaterialProcess) TableName() string {
  31. return "zy_final_material_process"
  32. }
  33. func (model FinalMaterialProcess) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  34. material_id, _ := db.ToInt64(data["material_id"])
  35. collect_id, _ := db.ToInt64(data["collect_id"])
  36. if material_id != 0 && collect_id != 0 {
  37. s.Where = append(s.Where, fmt.Sprintf("`%s`.`material_id` = %s OR `%s`.`collect_id` = %s", model.TableName(), s.Param(material_id), model.TableName(), s.Param(collect_id)))
  38. } else if material_id != 0 {
  39. s.Where = append(s.Where, fmt.Sprintf("`%s`.`material_id` = %s", model.TableName(), s.Param(material_id)))
  40. } else if collect_id != 0 {
  41. s.Where = append(s.Where, fmt.Sprintf("`%s`.`collect_id` = %s", model.TableName(), s.Param(collect_id)))
  42. }
  43. return true
  44. }
  45. func (FinalMaterialProcess) OnePrivilege(c *gin.Context, id int64) bool {
  46. return true
  47. }
  48. func (FinalMaterialProcess) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  49. data["created_id"] = c.GetInt("adminID")
  50. typ, _ := db.ToInt64(data["type"])
  51. materialID, _ := db.ToInt64(post["material_id"])
  52. collectID, _ := db.ToInt64(data["collect_id"])
  53. //pictures := db.ToString(post["pictures"])
  54. //total, _ := db.ToFloat64(post["total"])
  55. state, _ := db.ToInt64(data["state"])
  56. receipt_date, _ := db.ToInt64(post["receipt_date"])
  57. modify := post["modify"]
  58. if materialID != 0 {
  59. var model FinalMaterial
  60. db.GetModel(map[string]interface{}{
  61. "id": materialID,
  62. }, &model)
  63. if model.ID == 0 {
  64. return errors.New("没有权限")
  65. }
  66. s := typ + 1
  67. datas := map[string]interface{}{
  68. "state": s,
  69. }
  70. switch typ {
  71. case 0:
  72. if model.State != 0 {
  73. return errors.New("没有权限")
  74. }
  75. num := float64(0)
  76. total := float64(0)
  77. supplierid := int64(0)
  78. items, _ := db.GetModelMap(db.Type(FinalMaterialItemMobile{}), map[string]interface{}{"material_id": materialID, "deleted_at": 0}, nil)
  79. for _, v := range items {
  80. if matid, ok := db.ToInt64(v["mat_id"]); ok && matid != 0 {
  81. vnum, _ := db.ToFloat64(v["num"])
  82. price, _ := db.ToFloat64(v["mat_price"])
  83. vsupplierid, _ := db.ToInt64(v["supplier_id"])
  84. if supplierid != 0 && supplierid != vsupplierid {
  85. return errors.New("请选择同一个材料商的材料")
  86. }
  87. num += vnum
  88. total += vnum * price
  89. supplierid = vsupplierid
  90. }
  91. }
  92. if num == 0 {
  93. return errors.New("请选择材料")
  94. }
  95. datas["total"] = total
  96. datas["supplier_id"] = supplierid
  97. if model.BudgetType == 0 && num <= model.Budget || model.BudgetType == 1 && total <= model.Budget {
  98. datas["state"] = 2
  99. }
  100. case 1:
  101. if model.State == 1 {
  102. if state != 0 {
  103. datas["state"] = 0
  104. }
  105. } else if model.State == 3 {
  106. datas["state"] = 2
  107. if state == 0 {
  108. var process FinalMaterialProcess
  109. db.GetModel(map[string]interface{}{
  110. "material_id": materialID,
  111. "type": 2,
  112. "order by": "id desc",
  113. }, &process)
  114. if process.ID == 0 {
  115. return errors.New("系统错误")
  116. }
  117. for id, num := range utils.JsonDecode(process.Modify).ToMap() {
  118. id, _ := db.ToInt64(id)
  119. db.UpdateModel(db.Type(FinalMaterialItem{}), id, map[string]interface{}{
  120. "num": num,
  121. })
  122. }
  123. total := float64(0)
  124. items, _ := db.GetModelMap(db.Type(FinalMaterialItemMobile{}), map[string]interface{}{"material_id": materialID, "deleted_at": 0}, nil)
  125. for _, v := range items {
  126. if matid, ok := db.ToInt64(v["mat_id"]); ok && matid != 0 {
  127. vnum, _ := db.ToFloat64(v["num"])
  128. price, _ := db.ToFloat64(v["mat_price"])
  129. total += vnum * price
  130. }
  131. }
  132. datas["total"] = total
  133. }
  134. } else {
  135. return errors.New("没有权限")
  136. }
  137. case 2:
  138. if model.State != 2 {
  139. return errors.New("没有权限")
  140. }
  141. if modify, ok := modify.(map[string]interface{}); ok {
  142. items := make([]FinalMaterialItem, 0)
  143. db.GetModel(map[string]interface{}{"material_id": materialID, "deleted_at": 0}, &items)
  144. modifys := make(map[int64]float64)
  145. for _, v := range items {
  146. if num, ok := modify[db.ToString(v.ID)]; ok {
  147. modifys[v.ID], _ = db.ToFloat64(num)
  148. }
  149. }
  150. if len(modifys) == 0 {
  151. return errors.New("请修改数量")
  152. }
  153. data["modify"] = utils.JsonEncode(modifys)
  154. } else {
  155. logger.Sugar.Infof("modify: %v;", modify)
  156. return errors.New("请修改数量")
  157. }
  158. case 3:
  159. if model.State != 2 {
  160. return errors.New("没有权限")
  161. }
  162. if state != 0 {
  163. datas["state"] = 0
  164. }
  165. case 4:
  166. if model.State != 4 {
  167. return errors.New("没有权限")
  168. }
  169. if receipt_date == 0 {
  170. return errors.New("请选择配送日期")
  171. }
  172. datas["receipt_date"] = receipt_date
  173. case 5:
  174. if model.State != 5 {
  175. return errors.New("没有权限")
  176. }
  177. case 6:
  178. if model.State != 6 {
  179. return errors.New("没有权限")
  180. }
  181. if state != 0 {
  182. datas["state"] = 5
  183. }
  184. case 7:
  185. if model.State != 7 {
  186. return errors.New("没有权限")
  187. }
  188. case 8:
  189. if model.State != 8 {
  190. return errors.New("没有权限")
  191. }
  192. if state != 0 {
  193. datas["state"] = 7
  194. }
  195. default:
  196. return errors.New("没有权限")
  197. }
  198. err := db.UpdateModel(db.Type(model), materialID, datas)
  199. if err != nil {
  200. return errors.New("没有权限")
  201. }
  202. } else if collectID != 0 {
  203. var model FinalSiteCollect
  204. db.GetModel(map[string]interface{}{
  205. "id": collectID,
  206. }, &model)
  207. if model.ID == 0 || model.State != typ {
  208. return errors.New("没有权限")
  209. }
  210. if state != 0 {
  211. return errors.New("没有权限")
  212. }
  213. s := model.State + 1
  214. err := db.UpdateModel(db.Type(model), collectID, map[string]interface{}{
  215. "state": s,
  216. })
  217. if err != nil {
  218. return errors.New("没有权限")
  219. }
  220. err = db.UpdateModels(db.Type(FinalMaterial{}), map[string]interface{}{
  221. "collect_id": collectID,
  222. }, map[string]interface{}{
  223. "state": s,
  224. })
  225. if err != nil {
  226. return errors.New("没有权限")
  227. }
  228. } else {
  229. return errors.New("没有权限")
  230. }
  231. return nil
  232. }
  233. func (FinalMaterialProcess) Page() bool {
  234. return false
  235. }
  236. func (model FinalMaterialProcess) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  237. return []db.JoinModel{
  238. {
  239. Model: JoinAdmin{},
  240. As: "created",
  241. On: []string{"`created`.`id` = " + model.TableName() + ".`created_id`"},
  242. },
  243. }
  244. }