diff --git a/app/admin/svc/order/svc_order_list.go b/app/admin/svc/order/svc_order_list.go index cb7f6c6..33c0f2b 100644 --- a/app/admin/svc/order/svc_order_list.go +++ b/app/admin/svc/order/svc_order_list.go @@ -314,6 +314,57 @@ func OrderDetail(c *gin.Context) { } func OrderOutput(c *gin.Context) { + var args map[string]string + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + eg := db.Db + list := db.GetOrderListOutput(eg, args) + + name := "订单_" + args["page"] + //写入数据 + data := map[string]string{ + "A1": "购买人手机号", + "B1": "学校名称", + "C1": "订单编号", + "D1": "总金额", + "E1": "订单状态", + "F1": "送达时间", + "G1": "下单时间", + } + if list != nil { + stateArr := []string{"待制作", "制作中", "制作完成", "烘焙完成", "分拣完成", "已取消"} + enterpriseIds := make([]int, 0) + for _, v := range *list { + enterpriseIds = append(enterpriseIds, v.EnterpriseId) + } + enterpriseMap := db.GetEnterpriseMore(eg, enterpriseIds) + for k, v := range *list { + v1 := v + enterpriseName := "" + _, ok := enterpriseMap[v.EnterpriseId] + if ok { + enterpriseName = enterpriseMap[v.EnterpriseId].Name + } + i := utils.IntToStr(k + 2) + data["A"+i] = v1.BuyPhone + data["B"+i] = enterpriseName + data["C"+i] = utils.Int64ToStr(v1.Oid) + data["D"+i] = v1.Amount + data["E"+i] = stateArr[v1.State] + data["F"+i] = gjson.Get(v1.BuyInfo, "date").String() + " " + gjson.Get(v1.BuyInfo, "time").String() + data["G"+i] = v1.CreateAt.Format("2006-01-02 15:04:05") + } + } + file := utils.Output(c, name, data) + filename := name + ".xlsx" + r := map[string]string{ + "file": file, + "filename": filename, + } + e.OutSuc(c, r, nil) + return } func OrderEdit(c *gin.Context) { var args map[string]string @@ -331,10 +382,10 @@ func OrderEdit(c *gin.Context) { json.Unmarshal([]byte(order.BuyInfo), &tmp) tmp.Time = args["time"] tmp.Date = args["date"] - tmp.Phone = args["phone"] - tmp.Name = args["name"] + tmp.Phone = args["buy_phone"] + tmp.Name = args["buy_name"] tmp.Address = args["address"] - order.BuyPhone = args["phone"] + order.BuyPhone = args["buy_phone"] order.BuyInfo = utils.SerializeStr(tmp) eg.Where("id=?", order.Id).Cols("buy_phone,buy_info").Update(order) e.OutSuc(c, "success", nil) diff --git a/app/admin/svc/svc_make_record.go b/app/admin/svc/svc_make_record.go index 8fe0a58..d553899 100644 --- a/app/admin/svc/svc_make_record.go +++ b/app/admin/svc/svc_make_record.go @@ -1,9 +1,11 @@ package svc import ( + "applet/app/admin/md" "applet/app/db" "applet/app/e" "applet/app/utils" + "encoding/json" "github.com/gin-gonic/gin" ) @@ -38,6 +40,7 @@ func MarkRecord(c *gin.Context) { if ok1 { adminName = adminMap[v.AdminId].Memo } + var tmp = map[string]string{ "oid": utils.Int64ToStr(v.Oid), "id": utils.IntToStr(v.Id), @@ -45,20 +48,41 @@ func MarkRecord(c *gin.Context) { "state": utils.IntToStr(v.State), "time": v.Time.Format("2006-01-02 15:04:05"), "enterprise_name": enterpriseName, - "sku_str": v.Sku, + "sku_str": "", "goods_title": v.GoodsTitle, "memo": v.Memo, "admin_name": adminName, "num": utils.IntToStr(v.Num), "success_num": utils.IntToStr(v.SuccessNum), } + skuData := make([]md.Sku, 0) + json.Unmarshal([]byte(v.Sku), &skuData) + skuStr := "" + for _, v1 := range skuData { + if skuStr != "" { + skuStr += ";" + } + skuStr += v1.Value + } + tmp["sku_str"] = skuStr data = append(data, tmp) } } - + enterpriseList := db.GetEnterpriseList(eg) + enterpriseData := make([]map[string]string, 0) + if enterpriseList != nil { + for _, v := range *enterpriseList { + var tmp = map[string]string{ + "id": utils.IntToStr(v.Id), + "name": v.Name, + } + enterpriseData = append(enterpriseData, tmp) + } + } res := map[string]interface{}{ - "total": total, - "list": data, + "total": total, + "enterprise": enterpriseData, + "list": data, } e.OutSuc(c, res, nil) return diff --git a/app/db/db_admin.go b/app/db/db_admin.go index 134ad03..4e3cb3b 100644 --- a/app/db/db_admin.go +++ b/app/db/db_admin.go @@ -134,7 +134,7 @@ func GetAdminMore(eg *xorm.Engine, ids []int) map[int]model.Admin { data := make(map[int]model.Admin) if len(ids) > 0 { list := make([]model.Admin, 0) - eg.In("id", ids).Find(&list) + eg.In("adm_id", ids).Find(&list) for _, v := range list { data[v.AdmId] = v } diff --git a/app/db/db_order_goods_doing.go b/app/db/db_order_goods_doing.go index 94d312f..3729534 100644 --- a/app/db/db_order_goods_doing.go +++ b/app/db/db_order_goods_doing.go @@ -26,6 +26,15 @@ func GetOrderGoodsDoingList(eg *xorm.Engine, param map[string]string) (*[]model. } sess.In("admin_id", ids) } + if param["enterprise_name"] != "" { + var data []model.Enterprise + eg.Where("name like ?", "%"+param["enterprise_name"]+"%") + ids := []int{-1} + for _, v := range data { + ids = append(ids, v.Id) + } + sess.In("enterprise_id", ids) + } if param["oid"] != "" { sess.And("oid like ?", "%"+param["oid"]+"%") } diff --git a/app/db/db_order_list.go b/app/db/db_order_list.go index 6b87346..89dc9ab 100644 --- a/app/db/db_order_list.go +++ b/app/db/db_order_list.go @@ -4,6 +4,7 @@ import ( "applet/app/db/model" "applet/app/utils" "github.com/syyongx/php2go" + "strings" "xorm.io/xorm" ) @@ -69,6 +70,41 @@ func GetOrderList(eg *xorm.Engine, param map[string]string) (*[]model.Order, int } return &order, count } +func GetOrderListOutput(eg *xorm.Engine, param map[string]string) *[]model.Order { + var order []model.Order + sess := eg.Where("1=1") + if param["phone"] != "" { + sess.And("buy_phone like ?", "%"+param["phone"]+"%") + } + if param["oid"] != "" { + sess.And("oid like ?", "%"+param["oid"]+"%") + } + if param["state"] != "" { + sess.And("state =?", param["state"]) + } + if param["ids"] != "" { + sess.In("id", strings.Split(param["ids"], ",")) + } + if param["enterprise_name"] != "" { + var enterprise []model.Enterprise + eg.Where("name like ?", "%"+param["enterprise_name"]+"%").Find(&enterprise) + oids := []int{-1} + for _, v := range enterprise { + oids = append(oids, v.Id) + } + sess.In("enterprise_id", oids) + } + size := 10000 + start := (utils.StrToInt(param["page"]) - 1) * size + if param["ids"] == "" { + sess.Limit(size, start) + } + err := sess.OrderBy("id asc").Find(&order) + if err != nil { + return nil + } + return &order +} func GetOrderListByIpad(eg *xorm.Engine, param map[string]string) (*[]model.Order, int64) { var order []model.Order sess := eg.Where("state!=5") diff --git a/app/ipad/svc/svc_order_make.go b/app/ipad/svc/svc_order_make.go index ea1900d..1305d1b 100644 --- a/app/ipad/svc/svc_order_make.go +++ b/app/ipad/svc/svc_order_make.go @@ -183,7 +183,7 @@ func commMake(c *gin.Context, args map[string]string) { return } orderGoods.State = state - update, err := sess.Where("id=?", orderGoods.Id).Cols("state").Update(&orderGoods) + update, err := sess.Where("id=?", orderGoods.Id).Cols("state").Update(orderGoods) if update == 0 || err != nil { sess.Rollback() e.OutErr(c, 400, e.NewErr(400, "提交失败,请重试")) diff --git a/app/utils/time.go b/app/utils/time.go index 6860a57..dcb5910 100644 --- a/app/utils/time.go +++ b/app/utils/time.go @@ -70,7 +70,10 @@ func TimeParseStd(src string) time.Time { t, _ := TimeParse("2006-01-02 15:04:05", src) return t } - +func TimeParseDateStd(src string) time.Time { + t, _ := TimeParse("2006-01-02", src) + return t +} func TimeStdParseUnix(src string) int64 { t, err := TimeParse("2006-01-02 15:04:05", src) if err != nil { @@ -209,18 +212,18 @@ func GetDateTimeRangeStr(s string) (string, string) { return stime.Format("2006-01-02 15:04:05"), etime.Format("2006-01-02 15:04:05") } -//获取传入的时间所在月份的第一天,即某月第一天的0点。如传入time.Now(), 返回当前月份的第一天0点时间。 +// 获取传入的时间所在月份的第一天,即某月第一天的0点。如传入time.Now(), 返回当前月份的第一天0点时间。 func GetFirstDateOfMonth(d time.Time) time.Time { d = d.AddDate(0, 0, -d.Day()+1) return GetZeroTime(d) } -//获取传入的时间所在月份的最后一天,即某月最后一天的0点。如传入time.Now(), 返回当前月份的最后一天0点时间。 +// 获取传入的时间所在月份的最后一天,即某月最后一天的0点。如传入time.Now(), 返回当前月份的最后一天0点时间。 func GetLastDateOfMonth(d time.Time) time.Time { return GetFirstDateOfMonth(d).AddDate(0, 1, -1) } -//获取某一天的0点时间 +// 获取某一天的0点时间 func GetZeroTime(d time.Time) time.Time { return time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, d.Location()) } diff --git a/app/utils/xls.go b/app/utils/xls.go new file mode 100644 index 0000000..4b0318a --- /dev/null +++ b/app/utils/xls.go @@ -0,0 +1,36 @@ +package utils + +import ( + "bytes" + "fmt" + "github.com/360EntSecGroup-Skylar/excelize" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +func Output(c *gin.Context, name string, data map[string]string) string { + //创建excel文件 + xlsx := excelize.NewFile() + //创建新表单 + index := xlsx.NewSheet(name) + for k, v := range data { + //设置单元格的值 + xlsx.SetCellValue(name, k, v) + } + //设置默认打开的表单 + xlsx.SetActiveSheet(index) + ////保存文件到指定路径 + //err := xlsx.SaveAs("./" + name + ".xlsx") + //if err != nil { + // log.Fatal(err) + //} + //_ = file.Save(fileName) + c.Header("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, name+".xlsx")) + c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + var buffer bytes.Buffer + _ = xlsx.Write(&buffer) + r := bytes.NewReader(buffer.Bytes()) + fSrc, _ := ioutil.ReadAll(r) + str := "data:application/vnd.ms-excel;base64," + Base64RawStdEncode(string(fSrc)) + return str +} diff --git a/go.mod b/go.mod index b3f6443..5c7d176 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module applet go 1.15 require ( + github.com/360EntSecGroup-Skylar/excelize v1.4.1 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/antchfx/htmlquery v1.3.0 // indirect github.com/antchfx/xmlquery v1.3.18 // indirect