From f88900e8697d477445c0e1ee34f0957e9b83da62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 3 Feb 2020 17:16:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A4=8D=E5=88=B6=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=A0=E9=99=A4=E6=9C=AA=E5=85=B3=E6=B3=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9a245b064..01acf989e 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1603,6 +1603,28 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co break } num += num2 + //上方insert会无视目标门店中未关注的商品(以前关注,后来取消关注),所以这里批量删一下 + sql2 := ` + DELETE FROM store_sku_bind a + WHERE a.store_id = ? AND a.sku_id IN ( + SELECT b.sku_id FROM ( + SELECT store_id,sku_id,count(*) + FROM store_sku_bind + WHERE store_id = ? + GROUP BY 1,2 + HAVING count(*) > 1)b + ) + AND a.deleted_at <> ? + ` + sqlParams2 := []interface{}{ + toStoreID, toStoreID, utils.DefaultTimeValue, + } + _, err = dao.ExecuteSQL(db, sql2, sqlParams2) + if err != nil { + errList.AddErr(err) + dao.Rollback(db) + break + } globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num3:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) dao.Commit(db) } From 1fa3eef48f4067a265ff90110f7beb4c8e670bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 3 Feb 2020 17:53:04 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=B8=AD=E7=9A=84token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/event/event.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index e155ef1e9..dc9afa071 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -2,6 +2,7 @@ package event import ( "fmt" + "regexp" "strings" "time" @@ -21,6 +22,7 @@ var ( "CreateQrOrBarCode": "CreateQrOrBarCode", "StatisticsReportForOrders": "StatisticsReportForOrders", } + regexpToken = regexp.MustCompile(`,"token":".*"`) ) type CheckCookie struct { @@ -46,6 +48,7 @@ func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCod if accessUUID != "" { accessUUID = accessUUID[0:strings.Index(accessUUID, ",")] } + jsonData = strings.ReplaceAll(jsonData, regexpToken.FindString(jsonData), "") jsonData = utils.LimitUTF8StringLen(jsonData, 3200) event := &model.OperateEvent{ CreatedAt: time.Now(), From beef010f4c3dc493e5c8e2080af8d18a77904f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 3 Feb 2020 18:12:00 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A4=8D=E5=88=B6=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E5=95=86=E5=93=81=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=AF=94=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 01acf989e..9e1c5f3ab 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1633,6 +1633,7 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co mapAfter["ToStoreIDs"] = toStoreIDs mapAfter["CopyMode"] = copyMode mapAfter["IsScale"] = isScale + mapAfter["PricePercentage"] = pricePercentage mapBefore := make(map[string]interface{}) mapBefore["FromStoreID"] = fromStoreID err = AddEventDetail(db, ctx, model.OperateCopyStoreSkus, 0, model.ThingTypeSku, fromStoreID, BuildDiffData(mapBefore), BuildDiffData(mapAfter)) From cefdf15082b760e725672a88c24643d23561132c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 4 Feb 2020 09:15:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=B6=85=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 42 +++++++++++++++++++++++++++ business/jxstore/event/event.go | 1 + controllers/act.go | 22 ++++++++++++++ routers/commentsRouter_controllers.go | 9 ++++++ 4 files changed, 74 insertions(+) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 84e4053ef..ae6f11519 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -1,8 +1,11 @@ package act import ( + "errors" "fmt" + "io" "math" + "mime/multipart" "time" "git.rosy.net.cn/baseapi/utils" @@ -1300,3 +1303,42 @@ func SyncSpecialAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model } return err } + +func CreateActByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader, vendorID int, vendorOrgCode string, mixType int, isFocus, isSync, isAsync, isContinueWhenError bool) (hint string, err error) { + if len(files) == 0 { + return "", errors.New("没有文件上传!") + } + fileHeader := files[0] + file, err := fileHeader.Open() + hint, err = CreateActByExcelBin(ctx, file, vendorID, vendorOrgCode, mixType, isFocus, isSync, isAsync, isContinueWhenError) + file.Close() + return hint, err +} + +func CreateActByExcelBin(ctx *jxcontext.Context, reader io.Reader, vendorID int, vendorOrgCode string, mixType int, isFocus, isSync, isAsync, isContinueWhenError bool) (hint string, err error) { + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + //读取excel文件 + // xlsx, err := excelize.OpenReader(reader) + // if err != nil { + // return "", err + // } + // rows, _ := xlsx.GetRows(xlsx.GetSheetName(1)) + // for rowNum, row := range rows { + + // } + case 1: + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("根据Excel创建活动-序列任务", ctx, isContinueWhenError, taskSeqFunc, 5) + tasksch.HandleTask(taskSeq, nil, true).Run() + if !isAsync { + _, err = taskSeq.GetResult(0) + hint = "1" + } else { + hint = taskSeq.GetID() + } + return hint, err +} diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index dc9afa071..642ec1e1a 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -50,6 +50,7 @@ func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCod } jsonData = strings.ReplaceAll(jsonData, regexpToken.FindString(jsonData), "") jsonData = utils.LimitUTF8StringLen(jsonData, 3200) + errMsg = utils.LimitUTF8StringLen(errMsg, 3200) event := &model.OperateEvent{ CreatedAt: time.Now(), LastOperator: ctx.GetUserName(), diff --git a/controllers/act.go b/controllers/act.go index d3626bfc2..38f7b5d7e 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -330,3 +330,25 @@ func (c *ActController) ForceUpdateVendorPrice() { return retVal, "", err }) } + +// @Title 通过Excel创建活动 +// @Description 通过Excel创建活动 +// @Param token header string true "认证token" +// @Param vendorID formData int true "厂商ID,当前只支持,京东:0,京西(用于记录活动信息):99" +// @Param vendorOrgCode formData string false "厂商内组织代码" +// @Param mixType formData int true "数据处理方式:1(一行一条数据)2(门店与商品相乘)" +// @Param isFocus formData bool true "是否批量关注可售所有商品,默认是" +// @Param isSync formData bool true "是否同步所有未同步的商品,默认是" +// @Param isAsync formData bool false "是否异步" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /CreateActByExcel [post] +func (c *ActController) CreateActByExcel() { + c.callCreateActByExcel(func(params *tActCreateActByExcelParams) (retVal interface{}, errCode string, err error) { + r := c.Ctx.Request + files := r.MultipartForm.File["userfiles"] + retVal, err = act.CreateActByExcel(params.Ctx, files, params.VendorID, params.VendorOrgCode, params.MixType, params.IsFocus, params.IsSync, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 348f548af..97705f48b 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -25,6 +25,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], + beego.ControllerComments{ + Method: "CreateActByExcel", + Router: `/CreateActByExcel`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], beego.ControllerComments{ Method: "DeleteSkusFromAct",