Browse Source

添加配送远管理,订单对应修改

huangyan 1 week ago
parent
commit
f2e94eb533
5 changed files with 383 additions and 9 deletions
  1. 152 0
      controllers/Couriers.go
  2. 29 9
      controllers/Order.go
  3. 175 0
      models/Function/Couriers.go
  4. 6 0
      models/Function/Order.go
  5. 21 0
      routers/Couriers.go

+ 152 - 0
controllers/Couriers.go

@@ -0,0 +1,152 @@
+package controllers
+
+import (
+	"Cold_GoodsOrder/Nats/NatsServer"
+	"Cold_GoodsOrder/conf"
+	"Cold_GoodsOrder/lib"
+	"Cold_GoodsOrder/models/Account"
+	"Cold_GoodsOrder/models/Function"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+// CouriersController Handle
+type CouriersController struct {
+	beego.Controller
+	User_r Account.User // 登陆的用户
+	T_pid  int          // 公司id
+}
+
+func (c *CouriersController) Prepare() {
+	c.User_r = *Account.User_r
+	c.T_pid = *Account.T_pid
+}
+
+func (c *CouriersController) Couriers_List() {
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Function.CouriersR
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+	Name := c.GetString("T_name")
+
+	r_jsons.Data, r_jsons.Num = Function.Read_Couriers_List(c.User_r.T_pid, page, page_z, Name)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+func (c *CouriersController) CouriersAdd() {
+	Phone := c.GetString("Phone")
+	Name := c.GetString("T_name")
+	var_ := Function.Couriers{
+		UserId: c.User_r.T_pid,
+		Phone:  Phone,
+		Name:   Name,
+	}
+	id, err := Function.Add_Couriers(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
+	}
+	NatsServer.AddUserLogs(Account.User_r.T_uuid, "配送员管理", "添加", var_)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
+	c.ServeJSON()
+	return
+}
+func (c *CouriersController) CouriersGet() {
+
+	id, _ := c.GetInt("T_id")
+	r := Function.Read_Couriers_ById(id)
+	// 记录不存在
+	if r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+	if c.User_r.T_pid != r.UserId {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.CouriersToCouriersR(r)}
+	c.ServeJSON()
+	return
+}
+
+func (c *CouriersController) CouriersEdit() {
+	id, _ := c.GetInt("T_id")
+	r := Function.Read_Couriers_ById(id)
+
+	if r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+		c.ServeJSON()
+		return
+	}
+	if c.User_r.T_pid != r.UserId {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	Phone := c.GetString("Phone")
+	Name := c.GetString("T_name")
+
+	if len(Phone) > 0 {
+		r.Phone = Phone
+	}
+	if len(Name) > 0 {
+		r.Name = Name
+	}
+	is := Function.Update_Couriers(r, "phone", "name")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+	NatsServer.AddUserLogs(Account.User_r.T_uuid, "配送员管理", "修改", r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+func (c *CouriersController) CouriersDel() {
+	id, _ := c.GetInt("T_id")
+	r := Function.Read_Couriers_ById(id)
+
+	if r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+		c.ServeJSON()
+		return
+	}
+	if c.User_r.T_pid != r.UserId {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if is := Function.Delete_Couriers(r); !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+		c.ServeJSON()
+		return
+	}
+	NatsServer.AddUserLogs(Account.User_r.T_uuid, "配送员管理", "删除", r)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 29 - 9
controllers/Order.go

@@ -90,6 +90,8 @@ func (c *OrderController) Order_Add() {
 	IsExpatriate, _ := c.GetInt("IsExpatriate")
 	Phone := c.GetString("Phone")
 	ChildPid := c.GetString("ChildPid")
+	CouriesName := c.GetString("CouriesName")
+	CouriesId := c.GetString("CouriesId")
 	if len(EstimateStartTime) <= 0 || len(EstimateEndTime) <= 0 {
 		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
 		c.ServeJSON()
@@ -102,6 +104,11 @@ func (c *OrderController) Order_Add() {
 		c.ServeJSON()
 		return
 	}
+	if len(CouriesId) != 0 {
+		atoi, _ := strconv.Atoi(CouriesId)
+		r := Function.Read_Couriers_ById(atoi)
+		CouriesName = r.Name
+	}
 	var_ := Function.Order{
 		T_pid:             c.User_r.T_pid,
 		T_orderid:         T_orderid,
@@ -118,12 +125,8 @@ func (c *OrderController) Order_Add() {
 		IsExpatriate:      IsExpatriate,
 		Phone:             Phone,
 		ChildPid:          ChildPid,
-	}
-	id, err := Function.Add_Order(var_)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
-		c.ServeJSON()
-		return
+		CouriesName:       CouriesName,
+		CouriesId:         CouriesId,
 	}
 	if var_.IsExpatriate == 2 {
 		if len(var_.Phone) < 0 {
@@ -131,9 +134,12 @@ func (c *OrderController) Order_Add() {
 			c.ServeJSON()
 			return
 		}
+
+		var_.ExpatriateReceiving = T_receiving
+	}
+	defer func() {
 		s, _ := beego.AppConfig.String("orderUrl")
 		addr := s + url.QueryEscape(lib.AesEncryptCBC(var_.T_orderid, lib.AesKey))
-		log.Println(addr)
 		sprintf := fmt.Sprintf("【冷链订单配送】您的订单正在配送中点击下方链接查看%v", addr)
 		err = lib.SendModel(Phone, sprintf)
 		if err != nil {
@@ -141,8 +147,14 @@ func (c *OrderController) Order_Add() {
 			c.ServeJSON()
 			return
 		}
-		var_.ExpatriateReceiving = T_receiving
+	}()
+	id, err := Function.Add_Order(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
 	}
+
 	NatsServer.AddUserLogs(Account.User_r.T_uuid, "订单系统", "添加", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
 	c.ServeJSON()
@@ -195,6 +207,8 @@ func (c *OrderController) Order_Edit() {
 	Phone := c.GetString("Phone")
 	ChildPid := c.GetString("ChildPid")
 	T_State, _ := c.GetInt("T_State")
+	CouriesName := c.GetString("CouriesName")
+	CouriesId := c.GetString("CouriesId")
 	if len(EstimateStartTime) <= 0 || len(EstimateEndTime) <= 0 {
 		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
 		c.ServeJSON()
@@ -243,10 +257,16 @@ func (c *OrderController) Order_Edit() {
 	if len(ChildPid) > 0 {
 		r.ChildPid = ChildPid
 	}
+	if len(CouriesName) > 0 {
+		r.CouriesName = CouriesName
+	}
+	if len(CouriesId) > 0 {
+		r.CouriesId = CouriesId
+	}
 	if T_State != 0 {
 		r.T_State = T_State
 	}
-	is := Function.Update_Order(r, "waybill_no", "t_sn", "t_receiving", "shipping_unit", "estimate_start_time", "estimate_end_time", "peer_list", "device_type", "is_expatriate", "phone", "child_pid", "t__state", "t_text")
+	is := Function.Update_Order(r, "waybill_no", "t_sn", "t_receiving", "shipping_unit", "estimate_start_time", "estimate_end_time", "peer_list", "device_type", "is_expatriate", "phone", "child_pid", "t__state", "t_text", "couries_name", "couries_id")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()

+ 175 - 0
models/Function/Couriers.go

@@ -0,0 +1,175 @@
+package Function
+
+import (
+	"Cold_GoodsOrder/conf"
+	"encoding/json"
+	"fmt"
+	"github.com/astaxie/beego/cache"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"strconv"
+	"time"
+)
+
+// Couriers Order 模板
+type Couriers struct {
+	Id         int       `json:"Id" orm:"column(ID);size(11);auto;pk"`
+	Name       string    `json:"T_name" orm:"size(256);null"`                          // 配送员
+	Phone      string    `orm:"size(256);null"`                                        // 电话
+	UserId     int       `orm:"index;size(256);null"`                                  // 用户ID
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` // 创建时间
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     // 更新时间
+}
+type CouriersR struct {
+	Id         int    `json:"Id"`     // ID
+	Name       string `json:"T_name"` // 配送员
+	Phone      string // 电话
+	CreateTime string // 创建时间
+	UpdateTime string // 更新时间
+}
+
+func CouriersToCouriersR(t Couriers) (r CouriersR) {
+	r.Id = t.Id
+	r.Name = t.Name
+	r.Phone = t.Phone
+	r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
+	r.UpdateTime = t.UpdateTime.Format("2006-01-02 15:04:05")
+	return
+}
+
+func (t *Couriers) TableName() string {
+	return "couriers" // 数据库名称
+}
+
+var redisCache_Couriers cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Couriers))
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Couriers", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Couriers, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Couriers == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+
+}
+
+// ---------------- Redis -------------------
+func Redis_Couriers_Set(r Couriers) (err error) {
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_Couriers.Put(strconv.Itoa(r.Id), str, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", strconv.Itoa(r.Id), ",value:", str, err)
+	}
+	return
+}
+
+func Redis_Couriers_Get(key string) (r Couriers, is bool) {
+	if redisCache_Couriers.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_Couriers.Get(key)
+
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return Couriers{}, false
+}
+
+func Redis_Couriers_DelK(key string) (err error) {
+	err = redisCache_Couriers.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+
+// 获取 ById
+func Read_Couriers_ById(id int) (r Couriers) {
+	if r, is := Redis_Couriers_Get(strconv.Itoa(id)); is {
+		return r
+	}
+
+	o := orm.NewOrm()
+	r = Couriers{Id: id}
+	err := o.Read(&r)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return r
+}
+
+// 添加
+func Add_Couriers(m Couriers) (id int64, err error) {
+	o := orm.NewOrm()
+
+	id, err = o.Insert(&m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	Redis_Couriers_Set(m)
+	return id, err
+}
+
+// 修改
+func Update_Couriers(r Couriers, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&r, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_Couriers_Set(r)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_Couriers(m Couriers) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&m); err == nil {
+		fmt.Println("Number of records deleted in database:", num)
+		Redis_Couriers_DelK(strconv.Itoa(m.Id))
+		return true
+	}
+	return false
+}
+
+// 获取列表
+func Read_Couriers_List(userId int, page int, page_z int, name string) (t []CouriersR, cnt int64) {
+	o := orm.NewOrm()
+
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(Couriers))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	var r []Couriers
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	cond := orm.NewCondition()
+	cond1 := cond.And("UserId", userId)
+	if len(name) > 0 {
+		cond1 = cond1.And("name__icontains", name)
+	}
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		t = append(t, CouriersToCouriersR(v))
+	}
+	return t, cnt
+}

+ 6 - 0
models/Function/Order.go

@@ -35,6 +35,8 @@ type Order struct {
 	IsExpatriate        int       `orm:"size(2);default(1)"`                                    //1 非外派  2外派
 	ExpatriateReceiving string    `orm:"size(256);null"`                                        //外派收货单位
 	Phone               string    `orm:"size(256);"`                                            //电话
+	CouriesName         string    `orm:"size(256);"`                                            //配送员姓名
+	CouriesId           string    `orm:"size(256);"`                                            //配送员id
 	CreateTime          time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime          time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
@@ -60,6 +62,8 @@ type OrderR struct {
 	Phone             string //电话
 	EstimateStartTime string
 	EstimateEndTime   string
+	CouriesName       string
+	CouriesId         string
 }
 
 func OrderToOrderR(t Order) (r OrderR) {
@@ -94,6 +98,8 @@ func OrderToOrderR(t Order) (r OrderR) {
 	r.ShippingUnit = t.ShippingUnit
 	r.DeviceType = t.DeviceType
 	r.T_State = t.T_State
+	r.CouriesName = t.CouriesName
+	r.CouriesId = t.CouriesId
 	return
 }
 

+ 21 - 0
routers/Couriers.go

@@ -0,0 +1,21 @@
+package routers
+
+import (
+	"Cold_GoodsOrder/conf"
+	"Cold_GoodsOrder/controllers"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	// 配送员管理
+	ns := beego.NewNamespace(conf.Version,
+		beego.NSNamespace("/Couriers",
+			beego.NSRouter("List", &controllers.CouriersController{}, "*:Couriers_List"), // 配送员列表
+			beego.NSRouter("Get", &controllers.CouriersController{}, "*:CouriersGet"),    // 获取配送员
+			beego.NSRouter("Add", &controllers.CouriersController{}, "*:CouriersAdd"),    // 添加配送员
+			beego.NSRouter("Edit", &controllers.CouriersController{}, "*:CouriersEdit"),  // 编辑配送员
+			beego.NSRouter("Del", &controllers.CouriersController{}, "*:CouriersDel"),    // 删除配送员
+		),
+	)
+	beego.AddNamespace(ns)
+}