diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index f0268345a..170a6f163 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -137,6 +137,9 @@ type VendorStoreExcel struct { Tel2 string `json:"电话2"` CityName string `json:"城市名"` Address string `json:"地址"` + MarketManName string `json:"市场负责人"` + OperatorName string `json:"运营负责人"` + OperatorName2 string `json:"运营负责人2"` } var ( @@ -178,6 +181,24 @@ var ( "电话2", "城市名", "地址", + "市场负责人", + "运营负责人", + "运营负责人2", + } + roleMap = map[string]string{ + "marketManPhone": "市场负责人电话", + "marketManRole": "市场负责人组(角色,单人)", + "jxBrandFeeFactor": "京西品牌费因子", + "marketAddFeeFactor": "市场附加费因子", + "payeeName": "收款人姓名", + "payeeAccountNo": "收款账号", + "payeeBankBranchName": "开户支行", + "payeeBankCode": "开户行代码", + "payPercentage": "支付比例", + } + roleMoblieMap = map[string]string{ + "17380734342": "17380734342", //漆云的手机 ,用于判断updatestore的权限 + "18328080405": "18328080405", //肖娜娜的手机 } ) @@ -741,6 +762,10 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa if valid["status"] != nil { syncStatus |= model.SyncFlagStoreStatus status = int(utils.Interface2Int64WithDefault(valid["status"], 0)) + if status == model.StoreStatusDisabled { + valid["deliveryRangeType"] = model.DeliveryRangeTypeRadius + valid["deliveryRange"] = 1 + } } else { status = store.Status } @@ -789,6 +814,16 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa } } + for k, _ := range valid { + if roleMap[k] != "" { + if authInfo, err := ctx.GetV2AuthInfo(); err == nil { + if roleMoblieMap[authInfo.Mobile] == "" { + return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%] 字段!", authInfo.Name, roleMap[k])) + } + } + } + } + // districtCode := 0 // if valid["districtCode"] != nil { // districtCode = int(utils.MustInterface2Int64(valid["districtCode"])) @@ -833,6 +868,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa dao.Commit(db) } notifyStoreOperatorChanged(store, valid["operatorPhone"]) + notifyStoreMarketChanged(store, valid["marketManPhone"]) if err == nil { if valid["openTime1"] != 0 || valid["closeTime1"] != 0 || valid["openTime2"] != 0 || valid["closeTime2"] != 0 { err = CurVendorSync.ChangeStoreSkuSaleStatus(ctx, storeID, true, true) @@ -860,6 +896,21 @@ func notifyStoreOperatorChanged(store *model.Store, newOperator2 interface{}) { } } +func notifyStoreMarketChanged(store *model.Store, newMarketManPhone2 interface{}) { + if store.MarketManPhone != "" && newMarketManPhone2 != nil { + db := dao.GetDB() + if user, err := dao.GetUserByID(db, "mobile", store.MarketManPhone); err == nil { + curUserName := "" + if newOperator := utils.Interface2String(newMarketManPhone2); newOperator != "" { + if curUser, err := dao.GetUserByID(db, "mobile", newOperator); err == nil { + curUserName = curUser.GetName() + } + } + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.GetID(), "门店市场变更", fmt.Sprintf("门店:%d-%s,原市场:%s,变更为:%s", store.ID, store.Name, user.GetName(), curUserName)) + } + } +} + func SetStoreStatus(ctx *jxcontext.Context, storeID, status int) (err error) { payload := map[string]interface{}{ "status": status, @@ -2325,6 +2376,8 @@ func GetVendorStoreInfo(ctx *jxcontext.Context, vendorIDList []int, isAsync, isC return retVal, err } } + db := dao.GetDB() + storeDetail2, err := dao.GetStoreDetailByVendorStoreID(db, storeDetail.VendorStoreID, vendorID) if storeDetail.Status != model.StoreStatusOpened { var storeExcel = VendorStoreExcel{ StoreID: storeDetail.ID, @@ -2334,6 +2387,9 @@ func GetVendorStoreInfo(ctx *jxcontext.Context, vendorIDList []int, isAsync, isC Address: storeDetail.Address, Status: StoreStatus2Chinese(storeDetail.Status), CityName: storeDetail.CityName, + MarketManName: storeDetail2.MarketManName, + OperatorName: storeDetail2.OperatorName, + OperatorName2: storeDetail2.OperatorName2, } retVal = []VendorStoreExcel{storeExcel} } diff --git a/business/model/dao/report.go b/business/model/dao/report.go index e0b4b2cab..9595d8ab9 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -4,6 +4,7 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -33,6 +34,12 @@ type StatisticsReportForOrdersList struct { OperatorName2 string `json:"operatorName2"` } +type PriceReferSnapshotExt struct { + model.PriceReferSnapshot + CityName string `json:"cityName"` + SkuName string `json:"skuName"` +} + //查询统计订单信息 func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) { sql := ` @@ -234,26 +241,27 @@ func GetStatisticsReportForStoreSkusPrice(db *DaoDB, cityCodes, skuIDs []int) (p return nil, err } -func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Time, offset, pageSize int) (priceReferSnapshot []*model.PriceReferSnapshot, totalCount int, err error) { +func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Time, offset, pageSize int) (priceReferSnapshot []*PriceReferSnapshotExt, totalCount int, err error) { sql := ` - SELECT SQL_CALC_FOUND_ROWS * - FROM price_refer_snapshot + SELECT SQL_CALC_FOUND_ROWS a.*,b.name city_name + FROM price_refer_snapshot a + JOIN place b ON a.city_code = b.code WHERE 1=1 - AND deleted_at = ? + AND a.deleted_at = ? ` sqlParams := []interface{}{ utils.DefaultTimeValue, } if len(skuIDs) > 0 { - sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" + sql += " AND a.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } if len(cityCodes) > 0 { - sql += " AND city_code IN (" + GenQuestionMarks(len(cityCodes)) + ")" + sql += " AND a.city_code IN (" + GenQuestionMarks(len(cityCodes)) + ")" sqlParams = append(sqlParams, cityCodes) } if !utils.IsTimeZero(snapDate) { - sql += " AND snapshot_at = ?" + sql += " AND a.snapshot_at = ?" sqlParams = append(sqlParams, snapDate) } sql += " LIMIT ? OFFSET ?" @@ -263,5 +271,14 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim if err = GetRows(db, &priceReferSnapshot, sql, sqlParams...); err == nil { totalCount = GetLastTotalRowCount(db) } + for _, v := range priceReferSnapshot { + skuList, err2 := GetSkus(db, []int{v.SkuID}, nil, nil, nil) + err = err2 + if len(skuList) > 0 { + skuAndName := skuList[0] + jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0) + v.SkuName = jxSkuDetailName + } + } return priceReferSnapshot, totalCount, err } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index c677ef255..0cfdc4520 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -34,7 +34,10 @@ type StoreDetail struct { DistrictName string `json:"districtName"` CityName string `json:"cityName"` - IsAutoOrder int8 `json:"isAutoOrder"` // 平台是否自动接单,-1:否,0:未知,1:是 + IsAutoOrder int8 `json:"isAutoOrder"` // 平台是否自动接单,-1:否,0:未知,1:是 + MarketManName string `json:"marketManName"` //市场负责人 + OperatorName string `json:"operatorName"` //运营负责人 + OperatorName2 string `json:"operatorName2"` } // 带快递门店信息的 @@ -80,13 +83,19 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto t3.value price_percentage_pack_str, t4.value freight_deduction_pack_str, district.name district_name, - city.name city_name + city.name city_name, + IF(mm.name <> '', mm.name, mm.user_id2) market_man_name, + IF(om.name <> '', om.name, om.user_id2) operator_name, + IF(om2.name <> '', om2.name, om2.user_id2) operator_name2 FROM store t1 LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ? LEFT JOIN place city ON city.code = t1.city_code LEFT JOIN place district ON district.code = t1.district_code LEFT JOIN new_config t3 ON t3.key = t2.price_percentage_pack AND t3.type = ? AND t3.deleted_at = ? LEFT JOIN new_config t4 ON t4.key = t2.freight_deduction_pack AND t4.type = ? AND t4.deleted_at = ? + LEFT JOIN user mm ON mm.mobile <> '' AND mm.mobile = t1.market_man_phone + LEFT JOIN user om ON om.mobile <> '' AND om.mobile = t1.operator_phone + LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = t1.operator_phone2 WHERE t1.deleted_at = ? ` sqlParams := []interface{}{ diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index 206ad18dc..31022b65e 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -138,6 +138,7 @@ func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo } } } + retVal.VendorStoreID = vendorStoreID retVal.ID = int(utils.Str2Int64WithDefault(utils.Interface2String(result["shop_id"]), 0)) retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon retVal.DeliveryRange = EbaiDeliveryRegion2Jx(result["delivery_region"]) diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 52b336c3f..7a5909e17 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -93,7 +93,7 @@ func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo } } } - + retVal.VendorStoreID = vendorStoreID retVal.ID = int(utils.Str2Int64WithDefault(result.OutSystemID, 0)) deliveryRange, err2 := a.GetDeliveryRangeByStationNo2(vendorStoreID) if err = err2; err == nil { diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index d739b513c..05de4e943 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -73,6 +73,7 @@ func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo retVal.CityCode = result.CityID poiCode := result.AppPoiCode + retVal.VendorStoreID = vendorStoreID retVal.ID = int(utils.Str2Int64WithDefault(poiCode, 0)) retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon var deliveryRangeInfo []map[string]interface{}