diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index fdb6c32d6..750a63555 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -516,6 +516,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.resetTimer(savedOrderInfo, bill, isPending) s.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, bill.StatusTime) } + s.sendCourierOrderSMS(bill) } else { isBillExist := s.updateBillsInfo(savedOrderInfo, bill) if !isBillExist { @@ -654,6 +655,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo return err } +func (s *DefScheduler) sendCourierOrderSMS(bill *model.Waybill) (err error) { + err = smsmsg.NotifyNewCourierOrder(bill) + return err +} + func (s *DefScheduler) isWaybillCourierSame(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { return savedOrderInfo.waybills[bill.WaybillVendorID] != nil && savedOrderInfo.waybills[bill.WaybillVendorID].CourierMobile == bill.CourierMobile } @@ -1355,6 +1361,7 @@ func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) { weixinmsg.NotifyNewOrder(order) smsmsg.NotifyNewOrder(order) OrderProfitWarning(order) + smsmsg.NotifyNewUserOrder(order) }) } } diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 7601e08dd..6fdc80348 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -1109,3 +1109,18 @@ func GetUserAgreement(ctx *jxcontext.Context, name, idNumber, bankNumber, mobile userAgrs, err = dao.GetUserAgreement(db, name, idNumber, bankNumber, mobile) return userAgrs, err } + +func CleanUserOrderSMSMark(ctx *jxcontext.Context) (err error) { + var ( + db = dao.GetDB() + ) + if time.Now().Day() == 1 { + sql := ` + UPDATE user_order_sms + SET sms_mark = ? + ` + sqlParams := []interface{}{model.NO} + _, err = dao.ExecuteSQL(db, sql, sqlParams) + } + return err +} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index d5d80df95..187bfbfb4 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -219,6 +219,9 @@ func Init() { ScheduleTimerFunc("CleanStoreIsBoughtMatter", func() { cms.CleanStoreIsBoughtMatter(jxcontext.AdminCtx) }, priceReferTimeList) + ScheduleTimerFunc("CleanUserOrderSMSMark", func() { + cms.CleanUserOrderSMSMark(jxcontext.AdminCtx) + }, priceReferTimeList) ScheduleTimerFunc("exSync", func() { var ( db = dao.GetDB() diff --git a/business/jxutils/smsmsg/smsmsg.go b/business/jxutils/smsmsg/smsmsg.go index 819fbe44a..1e0d2f089 100644 --- a/business/jxutils/smsmsg/smsmsg.go +++ b/business/jxutils/smsmsg/smsmsg.go @@ -43,7 +43,9 @@ func SendSMSMsg(mobileList []string, signName, templateCode string, templatePara globals.SugarLogger.Infof(errMsg) } } else { - err = updateStoreSMSNotifyMark(order) + if order != nil { + err = updateStoreSMSNotifyMark(order) + } } } } @@ -99,3 +101,93 @@ func updateStoreSMSNotifyMark(order *model.GoodsOrder) (err error) { } return err } + +//每月向用户发送 +func NotifyNewUserOrder(order *model.GoodsOrder) (err error) { + var ( + db = dao.GetDB() + storeTel string + storeID int + mobile string + ) + if order.StoreID == 0 { + storeID = order.JxStoreID + } else { + storeID = order.StoreID + } + if order.ConsigneeMobile2 == "" { + mobile = order.ConsigneeMobile + } else { + mobile = order.ConsigneeMobile2 + } + uoSMS, err := dao.GetUserOrderSMS(db, mobile, "") + stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "") + if len(stores) > 0 { + if stores[0].Tel1 == "" { + storeTel = stores[0].Tel2 + } else { + storeTel = stores[0].Tel1 + } + } + if uoSMS == nil { + uoSMSc := model.UserOrderSms{ + Mobile: mobile, + Name: order.ConsigneeName, + VendorUserID: order.VendorUserID, + TotalCount: 0, + SMSMark: model.NO, + } + err = dao.CreateEntity(db, uoSMSc) + if uoSMS.SMSMark != model.YES { + err = SendSMSMsg([]string{uoSMS.Mobile}, globals.SMSSignName, globals.SMSNewUserOrderTemplate, map[string]interface{}{ + "tel": storeTel, + }, nil) + if err == nil { + uoSMS.SMSMark = model.YES + uoSMS.TotalCount++ + _, err = dao.UpdateEntity(db, uoSMS, "SMSMark", "TotalCount") + } + } + } else { + if uoSMS.SMSMark != model.YES { + err = SendSMSMsg([]string{uoSMS.Mobile}, globals.SMSSignName, globals.SMSNewUserOrderTemplate, map[string]interface{}{ + "tel": storeTel, + }, nil) + if err == nil { + uoSMS.SMSMark = model.YES + uoSMS.TotalCount++ + _, err = dao.UpdateEntity(db, uoSMS, "SMSMark", "TotalCount") + } + } + } + return err +} + +//给配送员发短信 +func NotifyNewCourierOrder(bill *model.Waybill) (err error) { + var ( + db = dao.GetDB() + storeTel string + storeID int + ) + order := &model.GoodsOrder{} + order.VendorOrderID = bill.VendorOrderID + err = dao.GetEntity(db, order, "VendorOrderID") + if order.StoreID == 0 { + storeID = order.JxStoreID + } else { + storeID = order.StoreID + } + stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "") + if len(stores) > 0 { + if stores[0].Tel1 == "" { + storeTel = stores[0].Tel2 + } else { + storeTel = stores[0].Tel1 + } + } + err = SendSMSMsg([]string{bill.CourierMobile}, globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{ + "tel": storeTel, + }, nil) + return err +} diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 4e73d14ca..4206a2979 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -239,3 +239,22 @@ func GetUserAgreement(db *DaoDB, name, idNumber, bankNumber, mobile string) (use err = GetRows(db, &userAgrs, sql, sqlParams) return userAgrs, err } + +func GetUserOrderSMS(db *DaoDB, mobile, name string) (userOrderSms *model.UserOrderSms, err error) { + sql := ` + SELECT * + FROM user_order_sms + WHERE 1=1 + ` + sqlParams := []interface{}{} + if mobile != "" { + sql += " AND mobile = ?" + sqlParams = append(sqlParams, mobile) + } + if name != "" { + sql += " AND name like ?" + sqlParams = append(sqlParams, "%"+name+"%") + } + err = GetRow(db, &userOrderSms, sql, sqlParams) + return userOrderSms, err +} diff --git a/business/model/user.go b/business/model/user.go index d7718c2a8..91011fbbf 100644 --- a/business/model/user.go +++ b/business/model/user.go @@ -175,3 +175,22 @@ type UserAgreement struct { IDNumber string `orm:"column(id_number);size(20)" json:"idNumber"` BankNumber string `orm:"size(32)" json:"bankNumber"` } + +type UserOrderSms struct { + ID int64 `orm:"column(id)" json:"-"` + CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` + UpdatedAt time.Time `orm:"auto_now;type(datetime)" json:"-"` + LastOperator string `orm:"size(32)" json:"-"` // 最后操作员 + + Mobile string `orm:"size(32)" json:"mobile"` + Name string `orm:"size(32)" json:"name"` + VendorUserID string `orm:"column(vendor_user_id)" json:"vendorUserID"` + SMSMark int `orm:"column(sms_mark)" json:"smsMark"` + TotalCount int `json:"totalCount"` +} + +func (*UserOrderSms) TableUnique() [][]string { + return [][]string{ + []string{"Mobile"}, + } +} diff --git a/conf/app.conf b/conf/app.conf index 88faf6c0b..8229f4d5a 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -126,6 +126,7 @@ smsSignName = "京西菜市" smsMobileVerifyTemplate = "SMS_175583158" smsNewOrderTemplate = "SMS_175583150" smsOrderCanceledTemplate = "SMS_175573134" +smsNewUserOrderTemplate = "SMS_190283955" addEvent = true diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 284fe4195..a7b8caf44 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -74,6 +74,7 @@ func Init() { orm.RegisterModel(&model.UserCartItem{}) orm.RegisterModel(&model.UserAgreement{}) orm.RegisterModel(&model.OrderPay{}, &model.OrderPayRefund{}) + orm.RegisterModel(&model.UserOrderSms{}) orm.RegisterModel(&model.FakeJdThingMap{}) diff --git a/globals/globals.go b/globals/globals.go index 6447c9fad..022333e7b 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -48,6 +48,7 @@ var ( SMSMobileVerifyTemplate string SMSNewOrderTemplate string SMSOrderCanceledTemplate string + SMSNewUserOrderTemplate string EnableWXAuth2 bool DisableWXAuth1 bool @@ -119,6 +120,7 @@ func Init() { SMSMobileVerifyTemplate = beego.AppConfig.String("smsMobileVerifyTemplate") SMSNewOrderTemplate = beego.AppConfig.String("smsNewOrderTemplate") SMSOrderCanceledTemplate = beego.AppConfig.String("smsOrderCanceledTemplate") + SMSNewUserOrderTemplate = beego.AppConfig.String("smsNewUserOrderTemplate") EnableWXAuth2 = true // beego.BConfig.RunMode == "beta" DisableWXAuth1 = true