门店红线-写入和统计数据
This commit is contained in:
@@ -6,10 +6,10 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
"git.rosy.net.cn/baseapi"
|
"git.rosy.net.cn/baseapi"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
|
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -32,6 +32,10 @@ const (
|
|||||||
AlertTypeStandardFinishTimeOrderSelfDelivery = 3
|
AlertTypeStandardFinishTimeOrderSelfDelivery = 3
|
||||||
AlertTypeStandardPickUpTimeOrderDaDa = 4
|
AlertTypeStandardPickUpTimeOrderDaDa = 4
|
||||||
|
|
||||||
|
ColorRed = "red"
|
||||||
|
ColorYellow = "yellow"
|
||||||
|
ColorUnknown = "Unknown"
|
||||||
|
|
||||||
OneDayName = "单日"
|
OneDayName = "单日"
|
||||||
OneWeekDayName = "七日"
|
OneWeekDayName = "七日"
|
||||||
OneMonthDayName = "三十日"
|
OneMonthDayName = "三十日"
|
||||||
@@ -206,6 +210,35 @@ func SendAlertInfo(storeID int, storeName, alertInfo string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFieldNameByAlertType(alertType, dayNum int) (fieldName string) {
|
||||||
|
switch alertType {
|
||||||
|
case AlertTypePickTimeOrderDaDa:
|
||||||
|
if dayNum == CheckStoreAlertOneDayNum {
|
||||||
|
fieldName = model.FieldPickTimeDaDa
|
||||||
|
} else if dayNum == CheckStoreAlertOneWeekDayNum {
|
||||||
|
fieldName = model.FieldPickTimeDaDaOneWeek
|
||||||
|
}
|
||||||
|
case AlertTypeBadCommentOrder:
|
||||||
|
if dayNum == CheckStoreAlertOneDayNum {
|
||||||
|
fieldName = model.FieldBadComment
|
||||||
|
} else if dayNum == CheckStoreAlertOneWeekDayNum {
|
||||||
|
fieldName = model.FieldBadCommentOneWeek
|
||||||
|
}
|
||||||
|
case AlertTypeAbsentGoodsOrder:
|
||||||
|
if dayNum == CheckStoreAlertOneDayNum {
|
||||||
|
fieldName = model.FieldAbsentGoods
|
||||||
|
} else if dayNum == CheckStoreAlertOneWeekDayNum {
|
||||||
|
fieldName = model.FieldAbsentGoodsOneWeek
|
||||||
|
}
|
||||||
|
case AlertTypeStandardFinishTimeOrderSelfDelivery:
|
||||||
|
fieldName = model.FieldStandardFinishTimeSelfDelivery
|
||||||
|
case AlertTypeStandardPickUpTimeOrderDaDa:
|
||||||
|
fieldName = model.FieldStandardPickUpTimeDaDa
|
||||||
|
}
|
||||||
|
|
||||||
|
return fieldName
|
||||||
|
}
|
||||||
|
|
||||||
func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, count, totalCount int) {
|
func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, count, totalCount int) {
|
||||||
if totalCount > 0 {
|
if totalCount > 0 {
|
||||||
ratio := int(math.Round(float64(count) * 100 / float64(totalCount)))
|
ratio := int(math.Round(float64(count) * 100 / float64(totalCount)))
|
||||||
@@ -216,7 +249,8 @@ func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, coun
|
|||||||
if isAlert {
|
if isAlert {
|
||||||
alertInfo := GetAlertInfo(dayNum, isRedAlert, storeName, alertType, logicCondtion, outRatio)
|
alertInfo := GetAlertInfo(dayNum, isRedAlert, storeName, alertType, logicCondtion, outRatio)
|
||||||
SendAlertInfo(storeID, storeName, alertInfo)
|
SendAlertInfo(storeID, storeName, alertInfo)
|
||||||
storeAlertDataWrapper.SetData(storeID, model.FieldRiskOrderCount, ratio)
|
fieldName := GetFieldNameByAlertType(alertType, dayNum)
|
||||||
|
storeAlertDataWrapper.SetData(storeID, fieldName, ratio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,9 +393,22 @@ func ScheduleCheckStoreAlert() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time, offset, pageSize int) (storeAlertData model.StoreAlertData, err error) {
|
func GetValueColor(alertType, dayNum, ratio, count int) (color string) {
|
||||||
|
yellowAlert, redAlert, _, _ := CheckAlert(alertType, dayNum, ratio, count)
|
||||||
|
if yellowAlert {
|
||||||
|
color = ColorYellow
|
||||||
|
} else if redAlert {
|
||||||
|
color = ColorRed
|
||||||
|
} else {
|
||||||
|
color = ColorUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
return color
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, dateTime time.Time, offset, pageSize int) (storeAlertData model.StoreAlertData, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeAlertList, err := dao.GetStoreAlertList(db, storeIDList, cityCode, keyWord, beginTime, endTime)
|
storeAlertList, err := dao.GetStoreAlertList(db, storeIDList, cityCode, keyWord, dateTime)
|
||||||
if err == nil && len(storeAlertList) > 0 {
|
if err == nil && len(storeAlertList) > 0 {
|
||||||
offset = jxutils.FormalizePageOffset(offset)
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
@@ -370,8 +417,62 @@ func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, beginTim
|
|||||||
pagedStoreAlertList = append(pagedStoreAlertList, storeAlertList[i])
|
pagedStoreAlertList = append(pagedStoreAlertList, storeAlertList[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var storeAlertAdvancedList []*model.StoreAlertAdvanced
|
||||||
|
for _, value := range pagedStoreAlertList {
|
||||||
|
storeAlertAdvanced := &model.StoreAlertAdvanced{}
|
||||||
|
storeAlertAdvanced.ID = value.ID
|
||||||
|
storeAlertAdvanced.CreatedTime = value.CreatedTime
|
||||||
|
storeAlertAdvanced.AlertDate = value.AlertDate
|
||||||
|
storeAlertAdvanced.StoreID = value.StoreID
|
||||||
|
storeAlertAdvanced.StoreName = value.StoreName
|
||||||
|
storeAlertAdvanced.CityName = value.CityName
|
||||||
|
|
||||||
|
storeAlertAdvanced.PickTimeDaDa.Value = fmt.Sprintf("%d%%", value.PickTimeDaDa)
|
||||||
|
storeAlertAdvanced.PickTimeDaDa.Color = GetValueColor(AlertTypePickTimeOrderDaDa, CheckStoreAlertOneDayNum, value.PickTimeDaDa, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.BadComment.Value = fmt.Sprintf("%d%%", value.BadComment)
|
||||||
|
storeAlertAdvanced.BadComment.Color = GetValueColor(AlertTypeBadCommentOrder, CheckStoreAlertOneDayNum, value.BadComment, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.AbsentGoods.Value = fmt.Sprintf("%d%%", value.AbsentGoods)
|
||||||
|
storeAlertAdvanced.AbsentGoods.Color = GetValueColor(AlertTypeAbsentGoodsOrder, CheckStoreAlertOneDayNum, value.AbsentGoods, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.PickTimeDaDaOneWeek.Value = fmt.Sprintf("%d%%", value.PickTimeDaDaOneWeek)
|
||||||
|
storeAlertAdvanced.PickTimeDaDaOneWeek.Color = GetValueColor(AlertTypePickTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.PickTimeDaDaOneWeek, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.BadCommentOneWeek.Value = fmt.Sprintf("%d%%", value.BadCommentOneWeek)
|
||||||
|
storeAlertAdvanced.BadCommentOneWeek.Color = GetValueColor(AlertTypeBadCommentOrder, CheckStoreAlertOneWeekDayNum, value.BadCommentOneWeek, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.AbsentGoodsOneWeek.Value = fmt.Sprintf("%d%%", value.AbsentGoodsOneWeek)
|
||||||
|
storeAlertAdvanced.AbsentGoodsOneWeek.Color = GetValueColor(AlertTypeAbsentGoodsOrder, CheckStoreAlertOneWeekDayNum, value.AbsentGoodsOneWeek, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.StandardFinishTimeSelfDelivery.Value = fmt.Sprintf("%d%%", value.StandardFinishTimeSelfDelivery)
|
||||||
|
storeAlertAdvanced.StandardFinishTimeSelfDelivery.Color = GetValueColor(AlertTypeStandardFinishTimeOrderSelfDelivery, CheckStoreAlertOneWeekDayNum, value.StandardFinishTimeSelfDelivery, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.StandardPickUpTimeDaDa.Value = fmt.Sprintf("%d%%", value.StandardPickUpTimeDaDa)
|
||||||
|
storeAlertAdvanced.StandardPickUpTimeDaDa.Color = GetValueColor(AlertTypeStandardPickUpTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.StandardPickUpTimeDaDa, -1)
|
||||||
|
|
||||||
|
storeAlertAdvanced.StandardPickUpTimeDaDa.Value = fmt.Sprintf("%d%%", value.StandardPickUpTimeDaDa)
|
||||||
|
storeAlertAdvanced.StandardPickUpTimeDaDa.Color = GetValueColor(AlertTypeStandardPickUpTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.StandardPickUpTimeDaDa, -1)
|
||||||
|
|
||||||
|
if value.NoOrderInMonth == 1 {
|
||||||
|
storeAlertAdvanced.NoOrderInMonth.Value = "是"
|
||||||
|
storeAlertAdvanced.NoOrderInMonth.Color = ColorRed
|
||||||
|
} else {
|
||||||
|
storeAlertAdvanced.NoOrderInMonth.Value = "否"
|
||||||
|
storeAlertAdvanced.NoOrderInMonth.Color = ColorUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
storeAlertAdvanced.RiskOrderCount.Value = utils.Int2Str(value.RiskOrderCount)
|
||||||
|
if value.RiskOrderCount > 0 {
|
||||||
|
storeAlertAdvanced.RiskOrderCount.Color = ColorRed
|
||||||
|
} else {
|
||||||
|
storeAlertAdvanced.RiskOrderCount.Color = ColorUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
storeAlertAdvancedList = append(storeAlertAdvancedList, storeAlertAdvanced)
|
||||||
|
}
|
||||||
storeAlertData.TotalCount = len(storeAlertList)
|
storeAlertData.TotalCount = len(storeAlertList)
|
||||||
storeAlertData.StoreAlertList = pagedStoreAlertList
|
storeAlertData.StoreAlertList = storeAlertAdvancedList
|
||||||
}
|
}
|
||||||
|
|
||||||
return storeAlertData, err
|
return storeAlertData, err
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ type StoreAlert struct {
|
|||||||
|
|
||||||
type StoreAlertEx struct {
|
type StoreAlertEx struct {
|
||||||
StoreAlert
|
StoreAlert
|
||||||
StoreName string `json:"storeName"`
|
StoreName string `orm:"column(store_name)" json:"storeName"`
|
||||||
|
CityName string `orm:"column(city_name)" json:"cityName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type StoreAlertProperty struct {
|
type StoreAlertProperty struct {
|
||||||
@@ -49,6 +50,8 @@ type StoreAlertAdvanced struct {
|
|||||||
CreatedTime time.Time `json:"createdTime"`
|
CreatedTime time.Time `json:"createdTime"`
|
||||||
AlertDate time.Time `json:"alertDate"`
|
AlertDate time.Time `json:"alertDate"`
|
||||||
StoreID int `json:"storeID"`
|
StoreID int `json:"storeID"`
|
||||||
|
StoreName string `json:"storeName"`
|
||||||
|
CityName string `json:"cityName"`
|
||||||
|
|
||||||
PickTimeDaDa StoreAlertProperty
|
PickTimeDaDa StoreAlertProperty
|
||||||
BadComment StoreAlertProperty
|
BadComment StoreAlertProperty
|
||||||
@@ -64,7 +67,7 @@ type StoreAlertAdvanced struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type StoreAlertData struct {
|
type StoreAlertData struct {
|
||||||
StoreAlertList []*StoreAlertEx `json:"storeAlertList"`
|
StoreAlertList []*StoreAlertAdvanced `json:"storeAlertList"`
|
||||||
TotalCount int `json:"totalCount"`
|
TotalCount int `json:"totalCount"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,17 +12,16 @@ func InsertStoreAlert(storeAlert *model.StoreAlert) error {
|
|||||||
return CreateEntity(nil, storeAlert)
|
return CreateEntity(nil, storeAlert)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoreAlertList(db *DaoDB, storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time) (storeAlertList []*model.StoreAlertEx, err error) {
|
func GetStoreAlertList(db *DaoDB, storeIDList []int, cityCode int, keyWord string, dateTime time.Time) (storeAlertList []*model.StoreAlertEx, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t1.*
|
SELECT t1.*, t2.name store_name, t3.name city_name
|
||||||
FROM store_alert t1
|
FROM store_alert t1
|
||||||
JOIN store t2 ON t1.store_id = t2.id
|
JOIN store t2 ON t1.store_id = t2.id
|
||||||
JOIN place t3 ON t2.city_code = t3.code
|
JOIN place t3 ON t2.city_code = t3.code
|
||||||
WHERE DATE(t1.alert_date) >= DATE(?) AND DATE(t1.alert_date) <= DATE(?)
|
WHERE DATE(t1.alert_date) = DATE(?)
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
beginTime,
|
dateTime,
|
||||||
endTime,
|
|
||||||
}
|
}
|
||||||
if len(storeIDList) > 0 {
|
if len(storeIDList) > 0 {
|
||||||
sql += `
|
sql += `
|
||||||
|
|||||||
@@ -492,8 +492,7 @@ func (c *StoreController) GetStoreTotalScoreList() {
|
|||||||
// @Param storeIDs formData string false "京西门店ID列表"
|
// @Param storeIDs formData string false "京西门店ID列表"
|
||||||
// @Param cityCode formData int false "城市编码"
|
// @Param cityCode formData int false "城市编码"
|
||||||
// @Param keyword formData string false "关键字"
|
// @Param keyword formData string false "关键字"
|
||||||
// @Param beginTime formData string true "开始日期"
|
// @Param dateTime formData string true "统计日期"
|
||||||
// @Param endTime formData string true "结束日期"
|
|
||||||
// @Param offset formData int false "列表起始序号(以0开始,缺省为0)"
|
// @Param offset formData int false "列表起始序号(以0开始,缺省为0)"
|
||||||
// @Param pageSize formData int false "列表页大小(缺省为50,-1表示全部)"
|
// @Param pageSize formData int false "列表页大小(缺省为50,-1表示全部)"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
@@ -501,11 +500,11 @@ func (c *StoreController) GetStoreTotalScoreList() {
|
|||||||
// @router /GetStoreAlertList [post]
|
// @router /GetStoreAlertList [post]
|
||||||
func (c *StoreController) GetStoreAlertList() {
|
func (c *StoreController) GetStoreAlertList() {
|
||||||
c.callGetStoreAlertList(func(params *tStoreGetStoreAlertListParams) (retVal interface{}, errCode string, err error) {
|
c.callGetStoreAlertList(func(params *tStoreGetStoreAlertListParams) (retVal interface{}, errCode string, err error) {
|
||||||
timeList, err := jxutils.BatchStr2Time(params.BeginTime, params.EndTime)
|
timeList, err := jxutils.BatchStr2Time(params.DateTime)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
var storeIDList []int
|
var storeIDList []int
|
||||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
|
||||||
retVal, err = misc.GetStoreAlertList(storeIDList, params.CityCode, params.Keyword, timeList[0], timeList[1], params.Offset, params.PageSize)
|
retVal, err = misc.GetStoreAlertList(storeIDList, params.CityCode, params.Keyword, timeList[0], params.Offset, params.PageSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
|
|||||||
Reference in New Issue
Block a user