aa
This commit is contained in:
@@ -1665,129 +1665,255 @@ func UpdateJob(ctx *jxcontext.Context, payload map[string]interface{}) (err erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Store struct {
|
||||||
|
model.ModelIDCULD
|
||||||
|
|
||||||
|
OriginalName string `orm:"-" json:"originalName"`
|
||||||
|
Name string `orm:"size(255)" json:"name"`
|
||||||
|
CityCode int `orm:"default(0);null" json:"cityCode"` // todo ?
|
||||||
|
DistrictCode int `orm:"default(0);null" json:"districtCode"` // todo ?
|
||||||
|
Address string `orm:"size(255)" json:"address"`
|
||||||
|
Tel1 string `orm:"size(32);index" json:"tel1"`
|
||||||
|
Tel2 string `orm:"size(32);index" json:"tel2"`
|
||||||
|
OpenTime1 int16 `json:"openTime1" validate:"max=2359,min=1,ltfield=CloseTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有
|
||||||
|
CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上
|
||||||
|
OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上
|
||||||
|
CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上
|
||||||
|
Lng int `json:"-"` // 乘了10的6次方
|
||||||
|
Lat int `json:"-"` // 乘了10的6次方
|
||||||
|
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
|
||||||
|
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米
|
||||||
|
Status int `json:"status"`
|
||||||
|
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
|
||||||
|
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
|
||||||
|
SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条)
|
||||||
|
SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息
|
||||||
|
AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型
|
||||||
|
LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID
|
||||||
|
StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的)
|
||||||
|
Comment string `orm:"size(255)" json:"comment"` //门店备注
|
||||||
|
|
||||||
|
PrinterDisabled int8 `orm:"default(0)" json:"printerDisabled"` // 是否禁用网络打印机
|
||||||
|
PrinterFontSize int8 `orm:"default(0)" json:"printerFontSize"` // 打印字体-1:小,0:正常,1:大
|
||||||
|
PrinterVendorID int `orm:"column(printer_vendor_id);" json:"printerVendorID"`
|
||||||
|
PrinterSN string `orm:"size(32);column(printer_sn);index" json:"printerSN"`
|
||||||
|
PrinterKey string `orm:"size(64)" json:"printerKey"`
|
||||||
|
PrinterBindInfo string `orm:"size(1024)" json:"-"`
|
||||||
|
|
||||||
|
IDCardFront string `orm:"size(255);column(id_card_front)" json:"idCardFront"`
|
||||||
|
IDCardBack string `orm:"size(255);column(id_card_back)" json:"idCardBack"`
|
||||||
|
IDCardHand string `orm:"size(255);column(id_card_hand)" json:"idCardHand"`
|
||||||
|
Licence string `orm:"size(255)" json:"licence"` // 营业执照图片
|
||||||
|
LicenceCode string `orm:"size(32)" json:"licenceCode"`
|
||||||
|
|
||||||
|
LicenceType int8 `json:"licenceType"` // 营业执照类型,0:个人,1:公司
|
||||||
|
LicenceCorpName string `orm:"size(64)" json:"licenceCorpName"` // 营业执照公司名称
|
||||||
|
LicenceOwnerName string `orm:"size(8)" json:"licenceOwnerName"` // 法人姓名
|
||||||
|
LicenceAddress string `orm:"size(255)" json:"licenceAddress"` // 地址
|
||||||
|
LicenceValid string `orm:"size(32)" json:"licenceValid"` // 有效期开始
|
||||||
|
LicenceExpire string `orm:"size(32)" json:"licenceExpire"` // 有效期结束
|
||||||
|
|
||||||
|
IDName string `orm:"size(8);column(id_name)" json:"idName"` // 身份证姓名
|
||||||
|
IDCode string `orm:"size(32);column(id_code)" json:"idCode"` // 身份证号
|
||||||
|
IDValid string `orm:"column(id_valid);size(32)" json:"idValid"` // 有效期开始
|
||||||
|
IDExpire string `orm:"column(id_expire);size(32)" json:"idExpire"` // 有效期结束
|
||||||
|
|
||||||
|
Licence2Image string `orm:"size(255)" json:"licence2Image"` // 食品经营许可证
|
||||||
|
Licence2Code string `orm:"size(32)" json:"licence2Code"` // 食品经营许可证编号
|
||||||
|
Licence2Valid string `orm:"size(32)" json:"licence2Valid"` // 有效期开始
|
||||||
|
Licence2Expire string `orm:"size(32)" json:"licence2Expire"` // 有效期结束
|
||||||
|
|
||||||
|
// MarketManName string `orm:"size(8)" json:"marketManName"` // 市场负责人姓名
|
||||||
|
MarketManPhone string `orm:"size(16)" json:"marketManPhone"` // 市场负责人电话
|
||||||
|
MarketManRole string `orm:"size(32)" json:"marketManRole"` // 市场负责人组(角色,单人)
|
||||||
|
|
||||||
|
JxBrandFeeFactor int `json:"jxBrandFeeFactor"` // 京西品牌费因子
|
||||||
|
MarketAddFeeFactor int `json:"marketAddFeeFactor"` // 市场附加费因子
|
||||||
|
|
||||||
|
PayeeName string `orm:"size(8)" json:"payeeName"` // 收款人姓名
|
||||||
|
PayeeAccountNo string `orm:"size(255)" json:"payeeAccountNo"` // 收款账号
|
||||||
|
PayeeBankBranchName string `orm:"size(255)" json:"payeeBankBranchName"` // 开户支行
|
||||||
|
PayeeBankCode string `orm:"size(8)" json:"payeeBankCode"` // 开户行代码
|
||||||
|
PayPercentage int `json:"payPercentage"`
|
||||||
|
OldPayPercentage int `json:"oldPayPercentage"`
|
||||||
|
|
||||||
|
StoreFrontPic string `orm:"size(255)" json:"storeFrontPic"` //门面照
|
||||||
|
StoreInPic string `orm:"size(255)" json:"storeInPic"` //门店内照片
|
||||||
|
|
||||||
|
// OperatorName string `orm:"size(8)" json:"operatorName"` // 运营人姓名
|
||||||
|
OperatorPhone string `orm:"size(16)" json:"operatorPhone"` // 京东运营人电话
|
||||||
|
OperatorRole string `orm:"size(32)" json:"operatorRole"` // 京东运营人组(角色)
|
||||||
|
|
||||||
|
OperatorPhone2 string `orm:"size(16)" json:"operatorPhone2"` // 美团运营人电话
|
||||||
|
OperatorRole2 string `orm:"size(32)" json:"operatorRole2"` // 美团运营人组(角色)
|
||||||
|
|
||||||
|
OperatorPhone3 string `orm:"size(16)" json:"operatorPhone3"` // 饿百运营人电话
|
||||||
|
OperatorRole3 string `orm:"size(32)" json:"operatorRole3"` // 饿百运营人组(角色)
|
||||||
|
|
||||||
|
PromoteInfo string `orm:"size(255)" json:"promoteInfo"` //门店公告(所有平台统一的公告)
|
||||||
|
IsBoughtMatter int `json:"isBoughtMatter"` //这周是否申请过物料
|
||||||
|
SoundPercentage int `json:"soundPercentage"` //打印机声音大小比例
|
||||||
|
Banner string `orm:"size(9999)" json:"banner"` //门店商城bannar图
|
||||||
|
BrandID int `orm:"column(brand_id)" json:"brandID"` //品牌ID
|
||||||
|
VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"`
|
||||||
|
}
|
||||||
|
|
||||||
func TempJob() (err error) {
|
func TempJob() (err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
ctx = jxcontext.AdminCtx
|
// ctx = jxcontext.AdminCtx
|
||||||
|
storesJD []*Store
|
||||||
|
// storesMT []*Store
|
||||||
)
|
)
|
||||||
db.Db.Using("c4")
|
db.Db.Using("c4")
|
||||||
sql := `
|
sql := `
|
||||||
SELECT *
|
SELECT a.*, b.vendor_store_id
|
||||||
FROM
|
FROM store a
|
||||||
|
JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 0 AND b.deleted_at = ? AND b.vendor_store_id <> ''
|
||||||
|
WHERE a.deleted_at = ?
|
||||||
|
AND a.id <> 667281
|
||||||
|
AND a.status IN (1,0)
|
||||||
`
|
`
|
||||||
for _, v := range stores {
|
sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue}
|
||||||
job := &model.Job{
|
if err = dao.GetRows(db, &storesJD, sql, sqlParams); err != nil {
|
||||||
UserID: "906380C7390E11EB8831525400C36BDA",
|
return err
|
||||||
JobCategoryID: 3,
|
}
|
||||||
}
|
fmt.Println(utils.Format4Output(storesJD, false))
|
||||||
}
|
// sql2 := `
|
||||||
|
// SELECT a.*, b.vendor_store_id
|
||||||
finishedAt = utils.Str2Time(jobExt.FinishedAtStr)
|
// FROM store a
|
||||||
job.FinishedAt = &finishedAt
|
// JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 1 AND b.deleted_at = ? AND b.vendor_store_id <> ''
|
||||||
// 需根据任务类型做一些参数判断,比如门店商品链接,地址
|
// WHERE a.deleted_at = ?
|
||||||
if job.AvgPrice == 0 {
|
// AND a.id <> 667281
|
||||||
return errCode, fmt.Errorf("请输入单个任务奖励(保证)金额!")
|
// AND a.status IN (1,0)
|
||||||
}
|
// `
|
||||||
switch job.JobCategoryID {
|
// sqlParams2 := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue}
|
||||||
case model.JobCategoryIDwmtg:
|
// if err = dao.GetRows(db, &storesMT, sql2, sqlParams2); err != nil {
|
||||||
if job.Address == "" {
|
// return err
|
||||||
return errCode, fmt.Errorf("外卖推广任务请输入门店地址!")
|
// }
|
||||||
}
|
// db.Db.Using("default")
|
||||||
case model.JobCategoryIDOther:
|
// task := tasksch.NewParallelTask("TempJob", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||||
case model.JobCategoryIDDropShipping:
|
// func(task2 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
if job.DropShippingAt == 0 {
|
// step := batchItemList[0].(int)
|
||||||
return errCode, fmt.Errorf("一件代发任务请输入承诺x天内发货!")
|
// switch step {
|
||||||
}
|
// case 0:
|
||||||
if job.DropShippingSkuPrice == 0 {
|
// task := tasksch.NewParallelTask("TempJob1", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||||
return errCode, fmt.Errorf("一件代发任务请输入商品价格!")
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
}
|
// store := batchItemList[0].(*Store)
|
||||||
job.CashbackType = model.JobCashbackPrice
|
// job := &model.Job{
|
||||||
job.LimitCountType = model.JobLimitCountTypeNoLimit
|
// UserID: "906380C7390E11EB8831525400C36BDA",
|
||||||
job.JobLimitAt = 0
|
// JobCategoryID: 3,
|
||||||
job.AuditLimitAt = 0
|
// Title: "京东(" + store.Name + ")",
|
||||||
default:
|
// Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消",
|
||||||
return errCode, fmt.Errorf("暂不支持的任务类型! %v", job.JobCategoryID)
|
// Count: 1000,
|
||||||
}
|
// AvgPrice: 300,
|
||||||
// 需根据返现类型做一些参数判断
|
// TotalPrice: 300000,
|
||||||
switch job.CashbackType {
|
// Status: 0,
|
||||||
case model.JobCashbackPercentage:
|
// Address: store.Address,
|
||||||
if job.Percentage <= 0 || job.Percentage > 100 {
|
// StoreURL: store.VendorStoreID,
|
||||||
return errCode, fmt.Errorf("返现比例请输入1-100之间的比例!")
|
// SurplusCount: 1000,
|
||||||
}
|
// JobLimitAt: 72,
|
||||||
case model.JobCashbackPrice:
|
// AuditLimitAt: 168,
|
||||||
default:
|
// LimitCountType: 3,
|
||||||
return errCode, fmt.Errorf("暂不支持的返现类型! %v", job.CashbackType)
|
// VendorID: 0,
|
||||||
}
|
// CashbackType: 1,
|
||||||
if job.UserID == "" {
|
// JobLat: jxutils.IntCoordinate2Standard(store.Lat),
|
||||||
return errCode, fmt.Errorf("参数有误!")
|
// JobLng: jxutils.IntCoordinate2Standard(store.Lng),
|
||||||
}
|
// JobCityCode: store.CityCode,
|
||||||
if ctx.GetUserID() != job.UserID {
|
// }
|
||||||
return errCode, fmt.Errorf("用户信息已过期,请重新登录!")
|
// finishAt := utils.Str2Time("2021-12-30 00:00:00")
|
||||||
}
|
// job.FinishedAt = &finishAt
|
||||||
if job.FinishedAt.Sub(time.Now()) <= 0 {
|
// lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddressByPage(job.Address, store.CityCode)
|
||||||
return errCode, fmt.Errorf("任务截止日期必须大于今天!")
|
// job.Lng = jxutils.StandardCoordinate2Int(lng)
|
||||||
}
|
// job.Lat = jxutils.StandardCoordinate2Int(lat)
|
||||||
if job2, _ := dao.GetJobWithTitle(db, job.Title); job2 != nil {
|
// if err = dao.CreateEntity(db, job); err == nil {
|
||||||
return errCode, fmt.Errorf("任务标题重复,请重新输入!")
|
// jobsteps, _ := dao.GetJobSteps(db, 171)
|
||||||
}
|
// for _, v := range jobsteps {
|
||||||
if job.JobCityCode != model.JobCountrywideCode {
|
// jobStep := &model.JobStep{
|
||||||
_, _, job.JobCityCode, err = getAddressInfoFromCoord(db, job.JobLng, job.JobLat)
|
// JobID: job.ID,
|
||||||
}
|
// StepCount: v.StepCount,
|
||||||
//验证微信绑定
|
// Content: v.Content,
|
||||||
if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil {
|
// Img: v.Img,
|
||||||
return "", err
|
// Type: v.Type,
|
||||||
}
|
// }
|
||||||
//发布任务要扣除任务总额的保证金,不够扣就要进行充值
|
// dao.WrapAddIDCULEntity(jobStep, ctx.GetUserName())
|
||||||
userBill, err := dao.GetUserBill(db, job.UserID, "")
|
// err = dao.CreateEntity(db, jobStep)
|
||||||
if userBill == nil {
|
// }
|
||||||
return errCode, fmt.Errorf("未查询到该用户的账单!")
|
// jobImgs, _ := dao.GetJobImgs(db, 171)
|
||||||
}
|
// for _, v := range jobImgs {
|
||||||
job.TotalPrice = job.Count * job.AvgPrice
|
// jobImg := &model.JobImg{
|
||||||
if userBill.AccountBalance < job.TotalPrice {
|
// JobID: job.ID,
|
||||||
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足!")
|
// Img: v.Img,
|
||||||
}
|
// }
|
||||||
if job.Count <= 0 {
|
// dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName())
|
||||||
return errCode, fmt.Errorf("任务数量不能为0!")
|
// err = dao.CreateEntity(db, jobImg)
|
||||||
}
|
// }
|
||||||
job.SurplusCount = job.Count
|
// }
|
||||||
if job.UserID == "" {
|
// return retVal, err
|
||||||
return errCode, fmt.Errorf("任务发起人不能为空!")
|
// }, storesJD)
|
||||||
}
|
// tasksch.HandleTask(task, task2, true).Run()
|
||||||
|
// task.GetResult(0)
|
||||||
if job.Address != "" && (job.Lng == 0 || job.Lat == 0) {
|
// case 1:
|
||||||
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddressByPage(job.Address, job.JobCityCode)
|
// task := tasksch.NewParallelTask("TempJob2", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||||
if lng == 0 || lat == 0 {
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
return errCode, fmt.Errorf("请填写完整且正确的门店地址!")
|
// store := batchItemList[0].(*Store)
|
||||||
}
|
// job := &model.Job{
|
||||||
job.Lng = jxutils.StandardCoordinate2Int(lng)
|
// UserID: "906380C7390E11EB8831525400C36BDA",
|
||||||
job.Lat = jxutils.StandardCoordinate2Int(lat)
|
// JobCategoryID: 3,
|
||||||
}
|
// Title: "美团(" + store.Name + ")",
|
||||||
dao.WrapAddIDCULDEntity(job, ctx.GetUserName())
|
// Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消",
|
||||||
dao.Begin(db)
|
// Count: 1000,
|
||||||
defer func() {
|
// AvgPrice: 300,
|
||||||
if r := recover(); r != nil {
|
// TotalPrice: 300000,
|
||||||
dao.Rollback(db)
|
// Status: 0,
|
||||||
panic(r)
|
// Address: store.Address,
|
||||||
}
|
// StoreURL: store.VendorStoreID,
|
||||||
}()
|
// SurplusCount: 1000,
|
||||||
if err = dao.CreateEntity(db, job); err != nil {
|
// JobLimitAt: 72,
|
||||||
dao.Rollback(db)
|
// AuditLimitAt: 168,
|
||||||
return
|
// LimitCountType: 3,
|
||||||
}
|
// VendorID: 1,
|
||||||
for _, v := range jobExt.JobSteps {
|
// CashbackType: 1,
|
||||||
dao.WrapAddIDCULDEntity(v, ctx.GetUserName())
|
// JobLat: jxutils.IntCoordinate2Standard(store.Lat),
|
||||||
v.JobID = job.ID
|
// JobLng: jxutils.IntCoordinate2Standard(store.Lng),
|
||||||
err = dao.CreateEntity(db, v)
|
// JobCityCode: store.CityCode,
|
||||||
}
|
// }
|
||||||
for _, v := range jobExt.JobImgs {
|
// finishAt := utils.Str2Time("2021-12-31 00:00:00")
|
||||||
dao.WrapAddIDCULEntity(v, ctx.GetUserName())
|
// job.FinishedAt = &finishAt
|
||||||
v.JobID = job.ID
|
// lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddressByPage(job.Address, store.CityCode)
|
||||||
err = dao.CreateEntity(db, v)
|
// job.Lng = jxutils.StandardCoordinate2Int(lng)
|
||||||
}
|
// job.Lat = jxutils.StandardCoordinate2Int(lat)
|
||||||
if err != nil {
|
// if err = dao.CreateEntity(db, job); err == nil {
|
||||||
dao.Rollback(db)
|
// jobsteps, _ := dao.GetJobSteps(db, 171)
|
||||||
return
|
// for _, v := range jobsteps {
|
||||||
}
|
// jobStep := &model.JobStep{
|
||||||
dao.Commit(db)
|
// JobID: job.ID,
|
||||||
|
// StepCount: v.StepCount,
|
||||||
|
// Content: v.Content,
|
||||||
|
// Img: v.Img,
|
||||||
|
// Type: v.Type,
|
||||||
|
// }
|
||||||
|
// dao.WrapAddIDCULEntity(jobStep, ctx.GetUserName())
|
||||||
|
// err = dao.CreateEntity(db, jobStep)
|
||||||
|
// }
|
||||||
|
// jobImgs, _ := dao.GetJobImgs(db, 171)
|
||||||
|
// for _, v := range jobImgs {
|
||||||
|
// jobImg := &model.JobImg{
|
||||||
|
// JobID: job.ID,
|
||||||
|
// Img: v.Img,
|
||||||
|
// }
|
||||||
|
// dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName())
|
||||||
|
// err = dao.CreateEntity(db, jobImg)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return retVal, err
|
||||||
|
// }, storesMT)
|
||||||
|
// tasksch.HandleTask(task, task2, true).Run()
|
||||||
|
// task.GetResult(0)
|
||||||
|
// }
|
||||||
|
// return retVal, err
|
||||||
|
// }, []int{0, 1})
|
||||||
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
// task.GetID()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -592,6 +592,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "TempJob",
|
||||||
|
Router: `/TempJob`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "UpdateJob",
|
Method: "UpdateJob",
|
||||||
|
|||||||
Reference in New Issue
Block a user