|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- package svc
-
- import (
- "applet/app/admin/md"
- "applet/app/db"
- "applet/app/db/model"
- "applet/app/e"
- "applet/app/svc"
- "applet/app/utils"
- "applet/app/utils/logx"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "reflect"
- "strings"
- )
-
- func SchemeBindEnterprise(req md.SchemeBindEnterpriseReq) (err error) {
- session := db.Db.NewSession()
- defer session.Close()
- session.Begin()
- //1、查询 `scheme`
- schemeDb := db.SchemeDb{}
- schemeDb.Set()
- scheme, err := schemeDb.GetScheme(req.Id)
- if err != nil {
- return
- }
- if scheme == nil {
- return errors.New("未查询到相应记录")
- }
-
- //1、删除 `scheme_with_enterprise`
- schemeEnterpriseDb := db.SchemeEnterpriseDb{}
- schemeEnterpriseDb.Set()
- _, err = schemeEnterpriseDb.SchemeEnterpriseDeleteBySession(session, req.Id)
- if err != nil {
- _ = session.Rollback()
- return
- }
-
- //2、新增 `scheme_with_enterprise``
- var mm []*model.SchemeWithEnterprise
- for _, v := range req.EnterpriseIds {
- mm = append(mm, &model.SchemeWithEnterprise{
- SchemeId: scheme.Id,
- EnterpriseId: v,
- })
- }
- if len(mm) > 0 {
- _, err = schemeEnterpriseDb.BatchAddSchemeEnterpriseBySession(session, mm)
- if err != nil {
- _ = session.Rollback()
- return
- }
- }
- return session.Commit()
- }
-
- func DeleteScheme(id int) (err error) {
- session := db.Db.NewSession()
- defer session.Close()
- session.Begin()
-
- //1、删除 `scheme`
- schemeDb := db.SchemeDb{}
- schemeDb.Set()
- _, err = schemeDb.SchemeDeleteBySession(session, id)
- if err != nil {
- _ = session.Rollback()
- return
- }
-
- //2、删除 `scheme_with_enterprise`
- schemeEnterpriseDb := db.SchemeEnterpriseDb{}
- schemeEnterpriseDb.Set()
- _, err = schemeEnterpriseDb.SchemeEnterpriseDeleteBySession(session, id)
- if err != nil {
- _ = session.Rollback()
- return
- }
-
- return session.Commit()
- }
-
- func MallGoodsDetailByScheme(c *gin.Context, id int64, schemeId int) (map[string]interface{}, error) {
- schemeDb := db.SchemeDb{}
- schemeDb.Set()
- schemeInfo, err := schemeDb.GetScheme(schemeId)
- if err != nil {
- return nil, err
- }
- if schemeInfo == nil {
- return nil, errors.New("未查询到相应方案记录")
- }
-
- resp := make(map[string]interface{})
- var skuList []*model.Sku
- var goodsModel *model.Goods
-
- // 新增商品的时候默认数据
- if id == 0 {
- resp["base_goods"] = nil
- resp["sku"] = nil
- return resp, nil
- }
-
- goodsModelInterface, has, err := db.GetComm(db.Db, &model.Goods{GoodsId: int64(id)})
- if !has {
- return nil, errors.New("当前商品不存在")
- }
- if err != nil {
- _ = logx.Error(err)
- return nil, e.NewErr(e.ERR_DB_ORM, fmt.Sprintf("查询商品失败:%#v", err))
- }
- goodsModel = goodsModelInterface.(*model.Goods)
-
- err = db.Db.Where("goods_id=?", id).Find(&skuList)
- if err != nil || len(skuList) == 0 {
- _ = logx.Error(err)
- return nil, e.NewErr(e.ERR_DB_ORM, fmt.Sprintf("查询商品规格失败:%#v\n", err))
- }
-
- var goodsMap map[string]interface{}
- utils.Unserialize([]byte(utils.SerializeStr(goodsModel)), &goodsMap)
- goodsMap["goods_id"] = utils.AnyToString(goodsModel.GoodsId)
- // 分类名称
- if goodsModel != nil && goodsModel.CategoryId != 0 {
- categoryInterface, has, err := db.GetComm(db.Db, &model.GoodsCategory{Id: goodsModel.CategoryId})
- if err != nil {
- return nil, errors.New("查询商品类目失败")
- }
- categoryModel := categoryInterface.(*model.GoodsCategory)
- if !has {
- goodsMap["category_name"] = ""
- } else {
- goodsMap["category_name"] = categoryModel.Name
- }
- }
-
- // **处理各复合结构**
- var tmpMap interface{}
-
- scheme, host, subDomain, moreSubDomain := svc.ImageBucketNew(c)
-
- // 商品主图
- if goodsMap["image_list"] != nil && goodsMap["image_list"] != "null" {
- utils.Unserialize([]byte(goodsMap["image_list"].(string)), &tmpMap)
- goodsMap["image_list"] = tmpMap
- var imageListUrlTmp []string
- for _, v := range goodsMap["image_list"].([]interface{}) {
- imageListUrlTmp = append(imageListUrlTmp, svc.ImageFormatWithBucketNew(scheme, host, subDomain, moreSubDomain, v.(string)))
- }
- goodsMap["image_list_url"] = imageListUrlTmp
- } else {
- goodsMap["image_list"] = []struct{}{}
- goodsMap["image_list_url"] = []struct{}{}
- }
-
- // 详情图
- if goodsMap["detail"] != nil && goodsMap["detail"] != "null" {
- var tmpDetailImageList []interface{}
- utils.Unserialize([]byte(goodsMap["detail"].(string)), &tmpDetailImageList)
- goodsMap["detail"] = tmpDetailImageList
- var detailImageUrlTmp []string
- for _, v := range goodsMap["detail"].([]interface{}) {
- detailImageUrlTmp = append(detailImageUrlTmp, svc.ImageFormatWithBucketNew(scheme, host, subDomain, moreSubDomain, v.(string)))
- }
- goodsMap["detail_url"] = detailImageUrlTmp
- }
-
- if goodsMap["detail"] == nil || reflect.ValueOf(goodsMap["detail"]).IsNil() {
- goodsMap["detail"] = []interface{}{}
- goodsMap["detail_url"] = []interface{}{}
- }
-
- // 规格属性
- speJson, ok := goodsMap["spe"].(string)
- if ok {
- if goodsMap["spe"] != nil && speJson != "" && speJson != "null" {
- utils.Unserialize([]byte(speJson), &tmpMap)
- goodsMap["spe"] = tmpMap
- } else {
- utils.Unserialize([]byte("[{\"name\": \"默认\",\"values\": [\"默认\"]}]"), &tmpMap)
- goodsMap["spe"] = tmpMap
- }
- } else {
- utils.Unserialize([]byte("[{\"name\": \"默认\",\"values\": [\"默认\"]}]"), &tmpMap)
- goodsMap["spe"] = tmpMap
- }
- if goodsMap["spe_images"] != nil && goodsMap["spe_images"] != "null" && goodsMap["spe_images"] != "[]" && goodsMap["spe_images"] != "" {
- var speImageListUrlTmp []string
- utils.Unserialize([]byte(goodsMap["spe_images"].(string)), &tmpMap)
- goodsMap["spe_images"] = tmpMap
- for _, v := range goodsMap["spe_images"].([]interface{}) {
- speImageListUrlTmp = append(speImageListUrlTmp, svc.ImageFormatWithBucketNew(scheme, host, subDomain, moreSubDomain, v.(string)))
- }
- goodsMap["spe_images_url"] = speImageListUrlTmp
- } else {
- goodsMap["spe_images"] = []struct{}{}
- goodsMap["spe_images_url"] = []struct{}{}
- }
-
- // sku处理
- var skuIds []string
- for _, v := range skuList {
- skuIds = append(skuIds, utils.Int64ToStr(v.SkuId))
- }
-
- var schemeWithSkusMap = map[int64]string{}
- if len(skuIds) > 0 {
- var schemeWithSkus []*model.SchemeWithSku
- err = db.Db.Where("scheme_id = ?", schemeId).And(fmt.Sprintf("sku_id In (%s)", strings.Join(skuIds, ","))).Find(&schemeWithSkus)
- if err != nil {
- return nil, err
- }
- for _, v := range schemeWithSkus {
- schemeWithSkusMap[v.SkuId] = v.Price
- }
- }
-
- skuListMap := make([]map[string]interface{}, 0, len(skuList))
- for _, item := range skuList {
- tmp := make(map[string]interface{})
- tmp["goods_id"] = item.GoodsId
- tmp["sku_id"] = item.SkuId
- tmp["sku_code"] = item.SkuCode
- tmp["original_price"] = item.Price
- tmp["indexes"] = item.Indexes
- utils.Unserialize([]byte(item.Sku), &tmpMap)
- tmp["sku"] = tmpMap
- tmp["scheme_price"] = schemeWithSkusMap[item.SkuId]
- if item.Indexes == "" || item.Indexes == " " {
- tmp["indexes"] = "0"
- utils.Unserialize([]byte("[{\"name\": \"默认\",\"values\": [\"默认\"]}]"), &tmpMap)
- tmp["sku"] = tmpMap
- }
- skuListMap = append(skuListMap, tmp)
- }
-
- // 清理不用的字段
- if _, ok := goodsMap["create_time"]; ok {
- delete(goodsMap, "create_at")
- }
- if _, ok := goodsMap["update_time"]; ok {
- delete(goodsMap, "update_at")
- }
- if _, ok := goodsMap["delete_at"]; ok {
- delete(goodsMap, "delete_at")
- }
-
- goodsMap["sale_state_zh"] = ""
- if _, ok := goodsMap["sale_state"]; ok {
- switch goodsMap["sale_state"] {
- case 1.00:
- goodsMap["sale_state_zh"] = "销售中"
- break
- case 2.00:
- goodsMap["sale_state_zh"] = "下架"
- break
- }
- }
-
- goodsMap["create_at"] = goodsModel.CreateAt
- goodsMap["update_at"] = goodsModel.UpdateAt
-
- resp["base_goods"] = goodsMap
- resp["sku"] = skuListMap
-
- return resp, nil
-
- }
-
- func SaveSchemeGoods(req md.SaveSchemeGoodsReq) (err error) {
- //1、查询方案、商品记录是否存在
- schemeDb := db.SchemeDb{}
- schemeDb.Set()
- schemeInfo, err := schemeDb.GetScheme(req.SchemeId)
- if err != nil {
- return err
- }
- if schemeInfo == nil {
- return errors.New("未查询到相应方案记录")
- }
- goods := new(model.Goods)
- has, err := schemeDb.Db.Where("goods_id =?", req.GoodsId).Get(goods)
- if err != nil {
- return
- }
- if !has {
- return errors.New("未查询到相应商品记录")
- }
-
- //2、处理 scheme_with_goods 数据
- schemeWithGoodsDb := db.SchemeWithGoodsDb{}
- schemeWithGoodsDb.Set()
- schemeWithGoods, err := schemeWithGoodsDb.GetSchemeWithGoods(req.SchemeId, req.GoodsId)
- if err != nil {
- return err
- }
- if schemeWithGoods == nil {
- _, err = schemeWithGoodsDb.SchemeWithGoodsInsert(&model.SchemeWithGoods{
- SchemeId: req.SchemeId,
- GoodsId: req.GoodsId,
- })
- if err != nil {
- return err
- }
- }
-
- //3、处理 scheme_with_sku 数据
- schemeWithSkuDb := db.SchemeWithSkuDb{}
- schemeWithSkuDb.Set()
- //3.1 删除之前所有记录
- _, err = schemeWithSkuDb.SchemeDeleteByGoods(req.SchemeId, req.GoodsId)
- if err != nil {
- return err
- }
-
- //3.2 新增记录
- var mm []*model.SchemeWithSku
- for _, v := range req.SkuList {
- mm = append(mm, &model.SchemeWithSku{
- SchemeId: req.SchemeId,
- GoodsId: req.GoodsId,
- SkuId: v.SkuId,
- Price: v.Price,
- })
- }
- _, err = schemeWithSkuDb.BatchAddSchemeWithSku(mm)
- if err != nil {
- return err
- }
- return nil
- }
|