123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- package pick
- import (
- "errors"
- "zhiyuan/models"
- "zhiyuan/pkg/app"
- "zhiyuan/pkg/db"
- "zhiyuan/pkg/param/material"
- "zhiyuan/pkg/param/material/pick"
- "zhiyuan/pkg/utils"
- "zhiyuan/services/form"
- "zhiyuan/services/material/brand"
- "zhiyuan/services/material/item"
- "zhiyuan/services/user"
- )
- var MatPickOrder models.MatPickOrder
- func GetOrders(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.MatPickOrder, error) {
- if page.PageNum > 0 && page.PageSize > 0 {
- where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
- }
- return MatPickOrder.GetMulti(where, fields, retVal)
- }
- func CountOrder(where map[string]interface{}) (int64, error) {
- return db.Count(MatPickOrder.TableName(), where)
- }
- func GetOrder(where map[string]interface{}, fields []string, dest interface{}) (*models.MatPickOrder, error) {
- return MatPickOrder.GetOne(where, fields, dest)
- }
- func GetOrderMap(form form.MaterialPickOrderAdd) (map[string]interface{}, error) {
- orderMap := map[string]interface{}{
- "admin_id": form.AdminID,
- "pkg_id": form.PkgID,
- "customer_name": form.CustomerName,
- "customer_phone": form.CustomerPhone,
- "house_address": form.HouseAddress,
- "house_area": form.HouseArea,
- "state": pick.OrderState.Finished.ID,
- }
- subGroup := make(map[int][]int, 0)
- subListMap := make(map[int]*models.MatPick)
- if pickList, err := GetPicks(map[string]interface{}{"pkg_id": form.PkgID}, nil, app.Page{}, nil); err == nil {
- for _, v := range pickList {
- subListMap[v.ID] = v
- subGroup[v.RoomType] = append(subGroup[v.RoomType], v.ID)
- }
- }
- itemIds := make([]int, 0)
- emptyNum := 0
- emptyNumMax := 2
- for _, v := range form.Item {
- for _, item := range v {
- if item.ID == 0 {
- emptyNum = emptyNum + 1
- } else {
- itemIds = append(itemIds, item.ID)
- }
- }
- }
- if emptyNum > emptyNumMax {
- orderMap["state"] = pick.OrderState.Unfinished.ID
- }
- itemListMap := make(map[int]*models.MatItem)
- if itemList, err := item.GetList(map[string]interface{}{"id in": itemIds}, nil, app.Page{}, nil); err == nil {
- for _, v := range itemList {
- itemListMap[v.ID] = v
- }
- }
- brandListMap := make(map[int]*models.MatBrand)
- if brandList, err := brand.GetList(map[string]interface{}{}, nil, app.Page{}, nil); err == nil {
- for _, v := range brandList {
- brandListMap[v.ID] = v
- }
- }
- // 主材,增项
- type PrimaryDataPick struct {
- PickID int `json:"pick_id"`
- PickName string `json:"pick_name"`
- ItemID int `json:"item_id"`
- ItemName string `json:"item_name"`
- BrandID int `json:"brand_id"`
- BrandName string `json:"brand_name"`
- Level int `json:"level"`
- Remarks string `json:"remarks"`
- UnitName string `json:"unit_name"`
- Color string `json:"color"`
- Num int `json:"num"`
- }
- type PrimaryData struct {
- RoomType int `json:"room_type"`
- RoomName string `json:"room_name"`
- Picks []PrimaryDataPick `json:"picks"`
- }
- roomTypes := utils.ParseSliceMap(material.Params.RoomType, "id")
- primaryData := make([]PrimaryData, 0)
- type Room struct {
- Type int `json:"type"`
- Name string `json:"name"`
- }
- roomList := []Room{{Type: 0, Name: utils.ToStr(roomTypes["0"]["name"])}}
- for _, v := range form.HouseStyle {
- roomName := utils.ToStr(roomTypes[utils.ToStr(v.Type)]["name"])
- for i := 0; i < v.Num; i++ {
- roomName = roomName + utils.ToStr(i+1)
- roomList = append(roomList, Room{
- Type: v.Type,
- Name: roomName,
- })
- }
- }
- unitTypes := utils.ParseSliceMap(item.Params.Unit, "id")
- for k, v := range roomList {
- primaryItem := PrimaryData{
- RoomType: v.Type,
- RoomName: v.Name,
- }
- subList := make([]PrimaryDataPick, 0)
- for _, subID := range subGroup[v.Type] {
- item := form.Item[k][subID]
- if item.ID > 0 {
- subList = append(subList, PrimaryDataPick{
- PickID: subID,
- PickName: subListMap[subID].PickName,
- ItemID: item.ID,
- Level: itemListMap[item.ID].Level,
- ItemName: itemListMap[item.ID].ItemName,
- BrandID: itemListMap[item.ID].BrandID,
- BrandName: brandListMap[itemListMap[item.ID].BrandID].BrandName,
- Num: item.Num,
- Remarks: item.Remarks,
- Color: item.Color,
- UnitName: utils.ToStr(unitTypes[utils.ToStr(itemListMap[item.ID].Unit)]["name"]),
- })
- } else {
- subList = append(subList, PrimaryDataPick{
- PickID: subID,
- PickName: subListMap[subID].PickName,
- ItemID: 0,
- Level: 1,
- ItemName: "",
- BrandID: 0,
- BrandName: "",
- Num: 1,
- Remarks: "",
- Color: "",
- })
- }
- }
- primaryItem.Picks = subList
- primaryData = append(primaryData, primaryItem)
- }
- orderMap["content"] = utils.JsonEncode(primaryData)
- orderMap["house_style"] = utils.JsonEncode(form.HouseStyle)
- return orderMap, nil
- }
- func AddOrder(form form.MaterialPickOrderAdd) (int64, error) {
- orderMap, err := GetOrderMap(form)
- if err != nil {
- return 0, err
- }
- // 添加用户
- if userInfo, _ := user.GetOne(map[string]interface{}{"phone": form.CustomerPhone}, nil, nil); userInfo == nil {
- userID, _ := user.InsertOne(map[string]interface{}{
- "name": form.CustomerName,
- "phone": form.CustomerPhone,
- })
- orderMap["user_id"] = userID
- } else {
- orderMap["user_id"] = userInfo.ID
- }
- roleID, err := db.InsertOne(MatPickOrder.TableName(), orderMap)
- // return 0, errors.New("提交失败")
- if err != nil {
- return 0, errors.New("提交失败")
- }
- return roleID, nil
- }
- func EditOrder(form form.MaterialPickOrderAdd, id int) (int64, error) {
- if orderInfo, err := GetOrder(map[string]interface{}{"id": id}, nil, nil); err != nil {
- return 0, err
- } else if !utils.IsContain(pick.OrderAllow.Edit, orderInfo.State) {
- return 0, errors.New("该报价单不允许编辑")
- }
- orderMap, err := GetOrderMap(form)
- if err != nil {
- return 0, err
- }
- // 添加用户
- if userInfo, _ := user.GetOne(map[string]interface{}{"phone": form.CustomerPhone}, nil, nil); userInfo == nil {
- userID, _ := user.InsertOne(map[string]interface{}{
- "name": form.CustomerName,
- "phone": form.CustomerPhone,
- })
- orderMap["user_id"] = userID
- } else {
- orderMap["user_id"] = userInfo.ID
- }
- roleID, err := db.Update(MatPickOrder.TableName(), map[string]interface{}{"id": id}, orderMap)
- // return 0, errors.New("提交失败")
- if err != nil {
- return 0, errors.New("提交失败")
- }
- return roleID, nil
- }
- func CheckOrder(form form.OrderCheck, id int) (int64, error) {
- orderInfo, err := GetOrder(map[string]interface{}{"id": id}, nil, nil)
- if err != nil {
- return 0, err
- }
- if !utils.IsContain(pick.OrderAllow.Check, orderInfo.State) {
- return 0, errors.New("状态有误")
- }
- return db.Update(MatPickOrder.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{"state": pick.OrderState.Checked.ID})
- }
|