order.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package pick
  2. import (
  3. "errors"
  4. "zhiyuan/models"
  5. "zhiyuan/pkg/app"
  6. "zhiyuan/pkg/db"
  7. "zhiyuan/pkg/param/material"
  8. "zhiyuan/pkg/param/material/pick"
  9. "zhiyuan/pkg/utils"
  10. "zhiyuan/services/form"
  11. "zhiyuan/services/material/brand"
  12. "zhiyuan/services/material/item"
  13. "zhiyuan/services/user"
  14. )
  15. var MatPickOrder models.MatPickOrder
  16. func GetOrders(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.MatPickOrder, error) {
  17. if page.PageNum > 0 && page.PageSize > 0 {
  18. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  19. }
  20. return MatPickOrder.GetMulti(where, fields, retVal)
  21. }
  22. func CountOrder(where map[string]interface{}) (int64, error) {
  23. return db.Count(MatPickOrder.TableName(), where)
  24. }
  25. func GetOrder(where map[string]interface{}, fields []string, dest interface{}) (*models.MatPickOrder, error) {
  26. return MatPickOrder.GetOne(where, fields, dest)
  27. }
  28. func GetOrderMap(form form.MaterialPickOrderAdd) (map[string]interface{}, error) {
  29. orderMap := map[string]interface{}{
  30. "admin_id": form.AdminID,
  31. "pkg_id": form.PkgID,
  32. "customer_name": form.CustomerName,
  33. "customer_phone": form.CustomerPhone,
  34. "house_address": form.HouseAddress,
  35. "house_area": form.HouseArea,
  36. "state": pick.OrderState.Finished.ID,
  37. }
  38. subGroup := make(map[int][]int, 0)
  39. subListMap := make(map[int]*models.MatPick)
  40. if pickList, err := GetPicks(map[string]interface{}{"pkg_id": form.PkgID}, nil, app.Page{}, nil); err == nil {
  41. for _, v := range pickList {
  42. subListMap[v.ID] = v
  43. subGroup[v.RoomType] = append(subGroup[v.RoomType], v.ID)
  44. }
  45. }
  46. itemIds := make([]int, 0)
  47. emptyNum := 0
  48. emptyNumMax := 2
  49. for _, v := range form.Item {
  50. for _, item := range v {
  51. if item.ID == 0 {
  52. emptyNum = emptyNum + 1
  53. } else {
  54. itemIds = append(itemIds, item.ID)
  55. }
  56. }
  57. }
  58. if emptyNum > emptyNumMax {
  59. orderMap["state"] = pick.OrderState.Unfinished.ID
  60. }
  61. itemListMap := make(map[int]*models.MatItem)
  62. if itemList, err := item.GetList(map[string]interface{}{"id in": itemIds}, nil, app.Page{}, nil); err == nil {
  63. for _, v := range itemList {
  64. itemListMap[v.ID] = v
  65. }
  66. }
  67. brandListMap := make(map[int]*models.MatBrand)
  68. if brandList, err := brand.GetList(map[string]interface{}{}, nil, app.Page{}, nil); err == nil {
  69. for _, v := range brandList {
  70. brandListMap[v.ID] = v
  71. }
  72. }
  73. // 主材,增项
  74. type PrimaryDataPick struct {
  75. PickID int `json:"pick_id"`
  76. PickName string `json:"pick_name"`
  77. ItemID int `json:"item_id"`
  78. ItemName string `json:"item_name"`
  79. BrandID int `json:"brand_id"`
  80. BrandName string `json:"brand_name"`
  81. Level int `json:"level"`
  82. Remarks string `json:"remarks"`
  83. UnitName string `json:"unit_name"`
  84. Color string `json:"color"`
  85. Num int `json:"num"`
  86. }
  87. type PrimaryData struct {
  88. RoomType int `json:"room_type"`
  89. RoomName string `json:"room_name"`
  90. Picks []PrimaryDataPick `json:"picks"`
  91. }
  92. roomTypes := utils.ParseSliceMap(material.Params.RoomType, "id")
  93. primaryData := make([]PrimaryData, 0)
  94. type Room struct {
  95. Type int `json:"type"`
  96. Name string `json:"name"`
  97. }
  98. roomList := []Room{{Type: 0, Name: utils.ToStr(roomTypes["0"]["name"])}}
  99. for _, v := range form.HouseStyle {
  100. roomName := utils.ToStr(roomTypes[utils.ToStr(v.Type)]["name"])
  101. for i := 0; i < v.Num; i++ {
  102. roomName = roomName + utils.ToStr(i+1)
  103. roomList = append(roomList, Room{
  104. Type: v.Type,
  105. Name: roomName,
  106. })
  107. }
  108. }
  109. unitTypes := utils.ParseSliceMap(item.Params.Unit, "id")
  110. for k, v := range roomList {
  111. primaryItem := PrimaryData{
  112. RoomType: v.Type,
  113. RoomName: v.Name,
  114. }
  115. subList := make([]PrimaryDataPick, 0)
  116. for _, subID := range subGroup[v.Type] {
  117. item := form.Item[k][subID]
  118. if item.ID > 0 {
  119. subList = append(subList, PrimaryDataPick{
  120. PickID: subID,
  121. PickName: subListMap[subID].PickName,
  122. ItemID: item.ID,
  123. Level: itemListMap[item.ID].Level,
  124. ItemName: itemListMap[item.ID].ItemName,
  125. BrandID: itemListMap[item.ID].BrandID,
  126. BrandName: brandListMap[itemListMap[item.ID].BrandID].BrandName,
  127. Num: item.Num,
  128. Remarks: item.Remarks,
  129. Color: item.Color,
  130. UnitName: utils.ToStr(unitTypes[utils.ToStr(itemListMap[item.ID].Unit)]["name"]),
  131. })
  132. } else {
  133. subList = append(subList, PrimaryDataPick{
  134. PickID: subID,
  135. PickName: subListMap[subID].PickName,
  136. ItemID: 0,
  137. Level: 1,
  138. ItemName: "",
  139. BrandID: 0,
  140. BrandName: "",
  141. Num: 1,
  142. Remarks: "",
  143. Color: "",
  144. })
  145. }
  146. }
  147. primaryItem.Picks = subList
  148. primaryData = append(primaryData, primaryItem)
  149. }
  150. orderMap["content"] = utils.JsonEncode(primaryData)
  151. orderMap["house_style"] = utils.JsonEncode(form.HouseStyle)
  152. return orderMap, nil
  153. }
  154. func AddOrder(form form.MaterialPickOrderAdd) (int64, error) {
  155. orderMap, err := GetOrderMap(form)
  156. if err != nil {
  157. return 0, err
  158. }
  159. // 添加用户
  160. if userInfo, _ := user.GetOne(map[string]interface{}{"phone": form.CustomerPhone}, nil, nil); userInfo == nil {
  161. userID, _ := user.InsertOne(map[string]interface{}{
  162. "name": form.CustomerName,
  163. "phone": form.CustomerPhone,
  164. })
  165. orderMap["user_id"] = userID
  166. } else {
  167. orderMap["user_id"] = userInfo.ID
  168. }
  169. roleID, err := db.InsertOne(MatPickOrder.TableName(), orderMap)
  170. // return 0, errors.New("提交失败")
  171. if err != nil {
  172. return 0, errors.New("提交失败")
  173. }
  174. return roleID, nil
  175. }
  176. func EditOrder(form form.MaterialPickOrderAdd, id int) (int64, error) {
  177. if orderInfo, err := GetOrder(map[string]interface{}{"id": id}, nil, nil); err != nil {
  178. return 0, err
  179. } else if !utils.IsContain(pick.OrderAllow.Edit, orderInfo.State) {
  180. return 0, errors.New("该报价单不允许编辑")
  181. }
  182. orderMap, err := GetOrderMap(form)
  183. if err != nil {
  184. return 0, err
  185. }
  186. // 添加用户
  187. if userInfo, _ := user.GetOne(map[string]interface{}{"phone": form.CustomerPhone}, nil, nil); userInfo == nil {
  188. userID, _ := user.InsertOne(map[string]interface{}{
  189. "name": form.CustomerName,
  190. "phone": form.CustomerPhone,
  191. })
  192. orderMap["user_id"] = userID
  193. } else {
  194. orderMap["user_id"] = userInfo.ID
  195. }
  196. roleID, err := db.Update(MatPickOrder.TableName(), map[string]interface{}{"id": id}, orderMap)
  197. // return 0, errors.New("提交失败")
  198. if err != nil {
  199. return 0, errors.New("提交失败")
  200. }
  201. return roleID, nil
  202. }
  203. func CheckOrder(form form.OrderCheck, id int) (int64, error) {
  204. orderInfo, err := GetOrder(map[string]interface{}{"id": id}, nil, nil)
  205. if err != nil {
  206. return 0, err
  207. }
  208. if !utils.IsContain(pick.OrderAllow.Check, orderInfo.State) {
  209. return 0, errors.New("状态有误")
  210. }
  211. return db.Update(MatPickOrder.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{"state": pick.OrderState.Checked.ID})
  212. }