Просмотр исходного кода

add:添加地址管理、运单发货人

zoie 10 месяцев назад
Родитель
Сommit
78dbe840bf

+ 5 - 8
app/admin/controller/address.go

@@ -5,7 +5,6 @@ import (
 	"cold-delivery/app/admin/service"
 	"cold-delivery/app/admin/service/dto"
 	"cold-delivery/common/actions"
-	"errors"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin/binding"
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
@@ -40,11 +39,11 @@ func (e AddressController) GetPage(c *gin.Context) {
 		return
 	}
 
-	if req.AddressType != model.AddressTypeConsignee && req.AddressType != model.AddressTypeSender {
-		err = errors.New("地址类型错误")
-		e.Error(500, err, err.Error())
-		return
-	}
+	//if req.AddressType != model.AddressTypeConsignee && req.AddressType != model.AddressTypeSender {
+	//	err = errors.New("地址类型错误")
+	//	e.Error(500, err, err.Error())
+	//	return
+	//}
 
 	//数据权限检查
 	p := actions.GetPermissionFromContext(c)
@@ -180,12 +179,10 @@ func (e AddressController) Update(c *gin.Context) {
 func (e AddressController) Delete(c *gin.Context) {
 	s := service.Address{}
 	req := dto.AddressDeleteReq{}
-	userSvc := service.SysUser{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON, nil).
 		MakeService(&s.Service).
-		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)

+ 0 - 2
app/admin/controller/car.go

@@ -173,12 +173,10 @@ func (e CarController) Update(c *gin.Context) {
 func (e CarController) Delete(c *gin.Context) {
 	s := service.Car{}
 	req := dto.CarDeleteReq{}
-	userSvc := service.SysUser{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON, nil).
 		MakeService(&s.Service).
-		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)

+ 0 - 2
app/admin/controller/company.go

@@ -201,12 +201,10 @@ func (e CompanyController) Update(c *gin.Context) {
 func (e CompanyController) Delete(c *gin.Context) {
 	s := service.Company{}
 	req := dto.CompanyDeleteReq{}
-	userSvc := service.SysUser{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON, nil).
 		MakeService(&s.Service).
-		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)

+ 0 - 2
app/admin/controller/cooler_box.go

@@ -174,12 +174,10 @@ func (e CoolerBoxController) Update(c *gin.Context) {
 func (e CoolerBoxController) Delete(c *gin.Context) {
 	s := service.CoolerBox{}
 	req := dto.CoolerBoxDeleteReq{}
-	userSvc := service.SysUser{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON, nil).
 		MakeService(&s.Service).
-		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)

+ 0 - 74
app/admin/controller/device.go

@@ -1,74 +0,0 @@
-package controller
-
-import (
-	"cold-delivery/app/admin/service"
-	"cold-delivery/app/admin/service/dto"
-	"cold-delivery/common/actions"
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
-	"gogs.baozhida.cn/zoie/OAuth-core/api"
-)
-
-type DeviceController struct {
-	api.Api
-}
-
-// GetSensorList 获取传感器列表
-// @Summary 获取传感器列表
-// @Description 获取传感器列表
-// @Tags 设备
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.Device}} "{"code": 200, "data": [...]}"
-// @Router /api/device/sensor-list [get]
-// @Security Bearer
-func (e DeviceController) GetSensorList(c *gin.Context) {
-	s := service.Device{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	//数据权限检查
-	p := actions.GetPermissionFromContext(c)
-
-	// 获取传感器信息
-	deviceSensorList, count, _ := s.GetSensorList(p)
-	e.PageOK(deviceSensorList, int(count), 0, 0, "查询成功")
-}
-
-// GetData 获取车辆温湿度信息
-// @Summary 获取车辆温湿度信息
-// @Description 获取车辆温湿度信息
-// @Tags 设备
-// @Param t_sn query string false "sn"
-// @Param t_id query string false "传感器id"
-// @Param pageSize query int false "页条数"
-// @Param page query int false "页码"
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.Device}} "{"code": 200, "data": [...]}"
-// @Router /api/device/sensor-list [get]
-// @Security Bearer
-func (e DeviceController) GetData(c *gin.Context) {
-	s := service.Device{}
-	req := dto.DeviceGetDataReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Query).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	//数据权限检查
-	p := actions.GetPermissionFromContext(c)
-
-	// 获取传感器信息
-	dataList, count, _ := s.GetData(req, p)
-	e.PageOK(dataList, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
-}

+ 4 - 0
app/admin/controller/upload.go

@@ -32,6 +32,10 @@ func (e UploadController) FilesUpload(c *gin.Context) {
 
 	// 处理文件上传逻辑
 	file, err := c.FormFile("file")
+	if err != nil {
+		c.JSON(400, gin.H{"error": "获取文件失败!"})
+		return
+	}
 	uploadFileName := file.Filename          // 获取文件名
 	fileType := filepath.Ext(uploadFileName) // 获取文件类型(扩展名)
 	if err != nil {

+ 0 - 2
app/admin/controller/warehouse.go

@@ -173,12 +173,10 @@ func (e WarehouseController) Update(c *gin.Context) {
 func (e WarehouseController) Delete(c *gin.Context) {
 	s := service.Warehouse{}
 	req := dto.WarehouseDeleteReq{}
-	userSvc := service.SysUser{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON, nil).
 		MakeService(&s.Service).
-		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)

+ 37 - 61
app/admin/controller/waybill.go

@@ -53,11 +53,13 @@ type WaybillController struct {
 // @Security Bearer
 func (e WaybillController) GetPage(c *gin.Context) {
 	s := service.Waybill{}
+	userSvc := service.SysUser{}
 	req := dto.WaybillGetPageReq{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.Query).
 		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)
@@ -68,10 +70,20 @@ func (e WaybillController) GetPage(c *gin.Context) {
 	//数据权限检查
 	p := actions.GetPermissionFromContext(c)
 
+	var userObj model.SysUser
+	err = userSvc.Get(&dto.SysUserGetReq{Id: p.UserId}, nil, &userObj)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
 	list := make([]model.Waybill, 0)
 	var count int64
-
-	err = s.GetPage(&req, &list, &count, p)
+	if userObj.Type == model.SysUserTypeSys {
+		err = s.GetPage(&req, &list, &count, p)
+	} else {
+		err = s.GetUserPage(&req, &list, &count, p)
+	}
 	if err != nil {
 		e.Error(500, err, err.Error())
 		return
@@ -127,8 +139,6 @@ func (e WaybillController) Export(c *gin.Context) {
 	f.SetCellValue("Sheet1", "H1", "收件人地址")
 	f.SetCellValue("Sheet1", "I1", "防拆标签码")
 	f.SetCellValue("Sheet1", "J1", "运输备注")
-	//f.SetCellValue("Sheet1", "K1", "货物类型")
-	//f.SetCellValue("Sheet1", "L1", "运输备注")
 
 	// 设置列宽
 	f.SetColWidth("Sheet1", "A", "A", 6)
@@ -139,8 +149,8 @@ func (e WaybillController) Export(c *gin.Context) {
 	f.SetColWidth("Sheet1", "F", "F", 14)
 	f.SetColWidth("Sheet1", "G", "G", 14)
 	f.SetColWidth("Sheet1", "H", "H", 30)
-	f.SetColWidth("Sheet1", "I", "K", 15)
-	f.SetColWidth("Sheet1", "L", "L", 15)
+	f.SetColWidth("Sheet1", "I", "J", 15)
+	f.SetColWidth("Sheet1", "K", "K", 30)
 
 	line := 1
 
@@ -155,10 +165,9 @@ func (e WaybillController) Export(c *gin.Context) {
 		f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.ConsigneeAddressName)
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.ConsigneeAddressPhone)
 		f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.ConsigneeAddressDetails)
-		//f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.TemperatureInterval)
-		//f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.DeliveryCondition)
-		//f.SetCellValue("Sheet1", fmt.Sprintf("K%d", line), v.CargoType)
-		f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.Remark)
+		f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.DeliveryName)
+		f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.DeliveryPhone)
+		f.SetCellValue("Sheet1", fmt.Sprintf("K%d", line), v.Remark)
 
 	}
 	timeStr := time.Now().Format("20060102150405")
@@ -420,40 +429,6 @@ func (e WaybillController) Insert(c *gin.Context) {
 	e.OK(req.GetId(), "创建成功")
 }
 
-// AppletInsert 添加运单app
-// @Summary 添加运单app
-// @Description 添加运单app
-// @Tags 运单
-// @Accept  application/json
-// @Product application/json
-// @Param data body dto.WaybillInsertReq true "data"
-// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
-// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
-// @Router /api/waybill [post]
-// @Security Bearer
-func (e WaybillController) AppletInsert(c *gin.Context) {
-	s := service.Waybill{}
-	req := dto.WaybillInsertReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	p := actions.GetPermissionFromContext(c)
-
-	err = s.AppletInsert(&req, p)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "添加成功")
-}
-
 // UpdateStatus 修改运单状态
 // @Summary 修改运单状态
 // @Description 修改运单状态
@@ -742,10 +717,9 @@ func (e WaybillController) CustomerExport(c *gin.Context) {
 	f.SetCellValue("Sheet1", "F1", "收件人名称")
 	f.SetCellValue("Sheet1", "G1", "收件人电话")
 	f.SetCellValue("Sheet1", "H1", "收件人地址")
-	f.SetCellValue("Sheet1", "I1", "温度要求")
-	f.SetCellValue("Sheet1", "J1", "配送要求")
-	f.SetCellValue("Sheet1", "K1", "货物类型")
-	f.SetCellValue("Sheet1", "L1", "运输备注")
+	f.SetCellValue("Sheet1", "I1", "配送人姓名")
+	f.SetCellValue("Sheet1", "J1", "配送人电话")
+	f.SetCellValue("Sheet1", "K1", "运输备注")
 
 	// 设置列宽
 	f.SetColWidth("Sheet1", "A", "A", 6)
@@ -757,6 +731,8 @@ func (e WaybillController) CustomerExport(c *gin.Context) {
 	f.SetColWidth("Sheet1", "G", "G", 14)
 	f.SetColWidth("Sheet1", "H", "H", 30)
 	f.SetColWidth("Sheet1", "I", "I", 15)
+	f.SetColWidth("Sheet1", "J", "J", 15)
+	f.SetColWidth("Sheet1", "K", "K", 15)
 
 	line := 1
 
@@ -771,7 +747,9 @@ func (e WaybillController) CustomerExport(c *gin.Context) {
 		f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.ConsigneeAddressName)
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.ConsigneeAddressPhone)
 		f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.ConsigneeAddressDetails)
-		f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.Remark)
+		f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.DeliveryName)
+		f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.DeliveryPhone)
+		f.SetCellValue("Sheet1", fmt.Sprintf("K%d", line), v.Remark)
 
 	}
 	timeStr := time.Now().Format("20060102150405")
@@ -924,22 +902,20 @@ func (e WaybillController) Import(c *gin.Context) {
 		for i, colCell := range row {
 			fmt.Println(i, ":", colCell)
 		}
-		quantity, _ := strconv.Atoi(row[6])
+		quantity, _ := strconv.Atoi(row[8])
 		obj := dto.WaybillInsertReq{
-			Status:               1,
-			SenderAddressName:    row[0],
-			SenderAddressPhone:   row[1],
-			SenderAddressDetails: row[2],
-			//CustomerName:            row[3],
+			Status:                  1,
+			SenderAddressName:       row[0],
+			SenderAddressPhone:      row[1],
+			SenderAddressDetails:    row[2],
 			ConsigneeAddressName:    row[3],
 			ConsigneeAddressPhone:   row[4],
 			ConsigneeAddressDetails: row[5],
-			//TemperatureInterval:     row[7],
-			//DeliveryCondition:       row[8],
-			//CargoType:               row[9],
-			Quantity:         quantity,
-			TamperProofLabel: row[7], // 防拆标签
-			Remark:           row[8],
+			DeliveryName:            row[6], // 防拆标签
+			DeliveryPhone:           row[7], // 防拆标签
+			Quantity:                quantity,
+			TamperProofLabel:        row[9], // 防拆标签
+			Remark:                  row[10],
 		}
 		obj.SetDeptId(p.DeptId)
 		obj.SetCreateBy(user.GetUserId(c))

+ 6 - 11
app/admin/model/address.go

@@ -9,17 +9,12 @@ var (
 
 type Address struct {
 	model2.Model
-	Name         string `json:"name" gorm:"size:32;"`           // 收货人名称
-	Phone        string `json:"phone" gorm:"size:32;"`          // 联系电话
-	Address      string `json:"address" gorm:"size:128"`        // 详细地址
-	IsDefault    bool   `json:"isDefault" gorm:"-"`             // 默认
-	ProvinceId   string `json:"provinceId"  gorm:"size:255;"`   // 省Id
-	ProvinceName string `json:"provinceName"  gorm:"size:255;"` // 省中文名
-	CityId       string `json:"cityId"  gorm:"size:255;"`       // 市Id
-	CityName     string `json:"cityName"  gorm:"size:255;"`     // 市中文名
-	RegionId     string `json:"regionId"  gorm:"size:255;"`     // 区Id
-	RegionName   string `json:"regionName"  gorm:"size:255;"`   // 区中文名
-	AddressType  string `json:"addressType" gorm:"size:255;" `  //地址类型:sender-发货人 consignee-收货人
+	Name    string `json:"name" gorm:"size:32;"`    // 收货人名称
+	Phone   string `json:"phone" gorm:"size:32;"`   // 联系电话
+	Address string `json:"address" gorm:"size:128"` // 详细地址
+
+	IsDefault   bool   `json:"isDefault" gorm:"-"`            // 默认
+	AddressType string `json:"addressType" gorm:"size:255;" ` // 地址类型:sender-发货人 consignee-收货人
 
 	model2.ControlBy
 	model2.ModelTime

+ 7 - 7
app/admin/model/sys_user.go

@@ -10,18 +10,18 @@ import (
 )
 
 var (
-	UserTypeSys          = "sys"
-	UserTypeCustomer     = "customer"
-	SysUserTypeSys       = 1
-	SysUserTypeWarehouse = 2
-	SysUserTypeDriver    = 3
+	UserTypeSys         = "sys"
+	UserTypeCustomer    = "customer"
+	SysUserTypeSys      = 1
+	SysUserTypeStoreSys = 2
+	SysUserTypeDriver   = 3
 )
 
 type SysUser struct {
 	model2.Model
 	coreModel.User
-	Type     int     `json:"type" gorm:"size:128;comment:类型"`         // 管理员1 仓管2 司机3
-	UserType string  `json:"userType" gorm:"size:128;comment:用户类型"`   // 系统用户-sys 客户-customer
+	Type     int     `json:"type" gorm:"size:128;comment:类型"` // 管理员1 门店管理员2 配送员3
+	UserType string  `json:"userType" gorm:"size:128;comment:用户类型"`
 	Openid   string  `json:"openid" gorm:"size:128;comment:微信openid"` // 微信openid
 	Dept     SysDept `json:"dept" gorm:"->"`                          // 部门
 	Role     SysRole `json:"-" gorm:"-"`                              // 角色

+ 3 - 0
app/admin/model/waybill.go

@@ -45,6 +45,8 @@ type Waybill struct {
 	ConsigneeAddressDetails string         `json:"consigneeAddressDetails"  gorm:"size:128"` // 收发货地址详情
 	ConsigneeAddressName    string         `json:"consigneeAddressName"  gorm:"size:128"`    // 收发货地址名称
 	ConsigneeAddressPhone   string         `json:"consigneeAddressPhone"  gorm:"size:128"`   // 收发货地址电话
+	DeliveryName            string         `json:"deliveryName"  gorm:"size:128"`            // 配送人名称
+	DeliveryPhone           string         `json:"deliveryPhone"  gorm:"size:128"`           // 配送人电话
 	Remark                  string         `json:"remark"  gorm:"size:4"`                    // 运输备注
 	OrderTime               model2.Time    `json:"orderTime"  gorm:"size:128"`               // 下单时间
 	DeliveryTime            model2.Time    `json:"deliveryTime"  gorm:"size:128"`            // 配送时间
@@ -53,6 +55,7 @@ type Waybill struct {
 	CoolerBoxId             int            `json:"coolerBoxId"  gorm:"size:128"`             // 保温箱id
 	ReceiptImg              string         `json:"receiptImg"  gorm:"size:text"`             // 签收图片
 	TamperProofLabel        string         `json:"tamperProofLabel"  gorm:"size:128"`        // 防拆标签
+	TamperProofLabelImg     string         `json:"tamperProofLabelImg"  gorm:"size:text"`    // 防拆标签
 	RejectionReason         string         `json:"rejectionReason"  gorm:"size:128"`         // 拒收原因
 	SendLog                 WaybillSendLog `json:"sendLog"`                                  // 运单短信发送日志
 	CoolerBox               CoolerBoxOmit  `json:"coolerBox" gorm:"->"`                      // 保温箱

+ 0 - 23
app/admin/router/device.go

@@ -1,23 +0,0 @@
-package router
-
-import (
-	"cold-delivery/app/admin/controller"
-	"cold-delivery/common/actions"
-	"github.com/gin-gonic/gin"
-	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
-)
-
-func init() {
-	routerCheckRole = append(routerCheckRole, registerDeviceRouter)
-
-}
-
-// 需认证的路由代码
-func registerDeviceRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
-	cont := controller.DeviceController{}
-	r := v1.Group("/device").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
-	{
-		r.GET("/sensor-list", cont.GetSensorList)
-		r.GET("/data", cont.GetData)
-	}
-}

+ 0 - 1
app/admin/router/waybill.go

@@ -22,7 +22,6 @@ func registerWaybillRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
 		r.GET("", cont.GetPage)
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
-		r.POST("/applet", cont.AppletInsert)
 		r.POST("/delivery", cont.Delivery)
 		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)

+ 26 - 12
app/admin/service/address.go

@@ -23,8 +23,8 @@ func AddressNameScopes(name string) func(db *gorm.DB) *gorm.DB {
 			return db
 		}
 		name = "%" + name + "%"
-		return db.Where("phone like ? or address like ? or province_name like ? or city_name like ? or region_name like ?",
-			name, name, name, name, name)
+		return db.Where("phone like ? or address like ? or name like ? ",
+			name, name, name)
 	}
 }
 
@@ -49,17 +49,31 @@ func (e *Address) GetPage(c *dto.AddressGetPageReq, list *[]model.Address, count
 		e.Log.Errorf("db error: %s", err)
 		return global.GetFailedErr
 	}
+	if ad.AddressId > 0 {
+		err = e.Orm.Model(&data).
+			Scopes(
+				AddressNameScopes(c.Name),
+				actions.Permission(data.TableName(), p),
+				//AddressDataScopes(c.DataType, p.UserId),
+				cDto.MakeCondition(c.GetNeedSearch()),
+				cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			).
+			Order(fmt.Sprintf("id = %d desc", ad.AddressId)).
+			Find(list).Limit(-1).Offset(-1).
+			Count(count).Error
+	} else {
+		err = e.Orm.Model(&data).
+			Scopes(
+				AddressNameScopes(c.Name),
+				actions.Permission(data.TableName(), p),
+				//AddressDataScopes(c.DataType, p.UserId),
+				cDto.MakeCondition(c.GetNeedSearch()),
+				cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			).
+			Find(list).Limit(-1).Offset(-1).
+			Count(count).Error
+	}
 
-	err = e.Orm.Model(&data).
-		Scopes(
-			AddressNameScopes(c.Name),
-			AddressDataScopes(c.DataType, p.UserId),
-			cDto.MakeCondition(c.GetNeedSearch()),
-			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
-		).
-		Order(fmt.Sprintf("id = %d desc", ad.AddressId)).
-		Find(list).Limit(-1).Offset(-1).
-		Count(count).Error
 	if err != nil {
 		e.Log.Errorf("db error: %s", err)
 		return global.GetFailedErr

+ 6 - 24
app/admin/service/dto/address.go

@@ -22,18 +22,12 @@ func (m *AddressGetPageReq) GetNeedSearch() interface{} {
 }
 
 type AddressInsertReq struct {
-	Id           int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
-	Name         string `json:"name" vd:"len($)>0;msg:'姓名不能为空'"`      // 收货人名称
-	Phone        string `json:"phone" vd:"len($)>0;msg:'手机号不能为空'"`    // 联系电话
-	Address      string `json:"address" vd:"len($)>0;msg:'详细地址不能为空'"` // 详细地址
-	IsDefault    bool   `json:"isDefault"`                            // 默认地址
-	ProvinceId   string `json:"provinceId"`                           // 省Id
-	ProvinceName string `json:"provinceName"`                         // 省中文名
-	CityId       string `json:"cityId"`                               // 市Id
-	CityName     string `json:"cityName"`                             // 市中文名
-	RegionId     string `json:"regionId"`                             // 区Id
-	RegionName   string `json:"regionName"`                           // 区中文名
-	AddressType  string `json:"addressType"`                          // 地址类型:sender-发货人 consignee-收货人
+	Id          int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	Name        string `json:"name" vd:"len($)>0;msg:'姓名不能为空'"`      // 收货人名称
+	Phone       string `json:"phone" vd:"len($)>0;msg:'手机号不能为空'"`    // 联系电话
+	Address     string `json:"address" vd:"len($)>0;msg:'详细地址不能为空'"` // 详细地址
+	IsDefault   bool   `json:"isDefault"`                            // 默认地址
+	AddressType string `json:"addressType"`                          // 地址类型:sender-发货人 consignee-收货人
 
 	common.ControlBy `swaggerignore:"true"`
 	common.DeptBy    `swaggerignore:"true"`
@@ -47,12 +41,6 @@ func (s *AddressInsertReq) Generate(m *model.Address) {
 	m.Phone = s.Phone
 	m.Address = s.Address
 	m.IsDefault = s.IsDefault
-	m.ProvinceId = s.ProvinceId
-	m.ProvinceName = s.ProvinceName
-	m.CityId = s.CityId
-	m.CityName = s.CityName
-	m.RegionId = s.RegionId
-	m.RegionName = s.RegionName
 	m.AddressType = s.AddressType
 	if s.ControlBy.UpdateBy != 0 {
 		m.UpdateBy = s.UpdateBy
@@ -94,12 +82,6 @@ func (s *AddressUpdateReq) Generate(m *model.Address) {
 	m.Phone = s.Phone
 	m.Address = s.Address
 	m.IsDefault = s.IsDefault
-	m.ProvinceId = s.ProvinceId
-	m.ProvinceName = s.ProvinceName
-	m.CityId = s.CityId
-	m.CityName = s.CityName
-	m.RegionId = s.RegionId
-	m.RegionName = s.RegionName
 	m.AddressType = s.AddressType
 	if s.ControlBy.UpdateBy != 0 {
 		m.UpdateBy = s.UpdateBy

+ 13 - 11
app/admin/service/dto/sys_user.go

@@ -71,15 +71,15 @@ func (s *UpdateSysUserStatusReq) Generate(userModel *model.SysUser) {
 }
 
 type SysUserInsertReq struct {
-	Id       int    `json:"id" swaggerignore:"true" comment:"用户ID"`                    // 用户ID
-	Username string `json:"username" example:"username" vd:"@:len($)>0;msg:'用户名不能为空'"` // 用户名
-	Password string `json:"password" example:"123456" vd:"@:len($)>5;msg:'密码格式不正确'"`   // 密码
-	Name     string `json:"name" vd:"@:len($)>0;msg:'姓名不能为空'"`                         // 姓名
-	Phone    string `json:"phone"`                                                     // 电话号码
-	RoleId   int    `json:"roleId" example:"1" swaggerignore:"true"`                   // 角色id
-	DeptId   int    `json:"deptId" example:"1"`                                        // 机构id
-	Status   string `json:"status" example:"2" swaggerignore:"true"`                   // 状态 	// 货车司机绑定《道路运输从业人员从业资格证》信息
-	//Type             int    `json:"type" example:"2"`                                          // 管理员1 仓管2 司机3
+	Id               int    `json:"id" swaggerignore:"true" comment:"用户ID"`                    // 用户ID
+	Username         string `json:"username" example:"username" vd:"@:len($)>0;msg:'用户名不能为空'"` // 用户名
+	Password         string `json:"password" example:"123456" vd:"@:len($)>5;msg:'密码格式不正确'"`   // 密码
+	Name             string `json:"name" vd:"@:len($)>0;msg:'姓名不能为空'"`                         // 姓名
+	Phone            string `json:"phone"`                                                     // 电话号码
+	RoleId           int    `json:"roleId" example:"1" swaggerignore:"true"`                   // 角色id
+	DeptId           int    `json:"deptId" example:"1"`                                        // 机构id
+	Status           string `json:"status" example:"2" swaggerignore:"true"`                   // 状态 	// 货车司机绑定《道路运输从业人员从业资格证》信息
+	Type             int    `json:"type" example:"2"`                                          // 管理员1 门店管理员2 配送员3
 	model2.ControlBy `swaggerignore:"true"`
 }
 
@@ -94,7 +94,7 @@ func (s *SysUserInsertReq) Generate(userModel *model.SysUser) {
 	userModel.DeptId = s.DeptId
 	userModel.RoleId = s.RoleId
 	userModel.Status = "2"
-	userModel.Type = 1
+	userModel.Type = s.Type
 	userModel.UserType = model.UserTypeSys
 
 	if s.ControlBy.UpdateBy != 0 {
@@ -113,7 +113,7 @@ type SysUserUpdateReq struct {
 	Id    int    `json:"id"  comment:"用户ID"`                // 用户ID
 	Name  string `json:"name" vd:"@:len($)>0;msg:'姓名不能为空'"` // 姓名
 	Phone string `json:"phone"`                             // 电话号码
-	//Type  int    `json:"type" example:"2"`                  // 管理员1 仓管2 司机3
+	Type  int    `json:"type" example:"2"`                  // 管理员1 仓管2 司机3
 
 	model2.ControlBy `swaggerignore:"true"`
 }
@@ -124,6 +124,8 @@ func (s *SysUserUpdateReq) Generate(userModel *model.SysUser) {
 	}
 	userModel.NickName = s.Name
 	userModel.Phone = s.Phone
+	userModel.Type = s.Type
+
 	if s.ControlBy.UpdateBy != 0 {
 		userModel.UpdateBy = s.UpdateBy
 	}

+ 18 - 5
app/admin/service/dto/waybill.go

@@ -45,16 +45,21 @@ type WaybillInsertReq struct {
 	Id                      int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
 	No                      string `json:"no" swaggerignore:"true"`              //单号
 	Status                  int    `json:"status" swaggerignore:"true"`          //订单状态:1-待处理;102-待装车 103-运输中 104-已签收
+	SaveSenderAddress       bool   `json:"saveSenderAddress"`                    //保存发货地址
 	SenderAddressDetails    string `json:"senderAddressDetails"`                 //发货地址详情
 	SenderAddressName       string `json:"senderAddressName"`                    //发货地址名称
 	SenderAddressPhone      string `json:"senderAddressPhone"`                   //发货地址电话
+	SaveConsigneeAddress    bool   `json:"SaveConsigneeAddress"`                 //保存收货地址
 	ConsigneeAddressDetails string `json:"consigneeAddressDetails"`              //收发货地址详情
 	ConsigneeAddressName    string `json:"consigneeAddressName"`                 //收发货地址名称
 	ConsigneeAddressPhone   string `json:"consigneeAddressPhone"`                //收发货地址电话
-	Quantity                int    `json:"quantity"`                             //药品数量
-	Remark                  string `json:"remark"`                               //运输备注
-	TamperProofLabel        string `json:"tamperProofLabel"`                     //防拆码标签
-	CoolerBoxId             int    `json:"coolerBoxId"`                          //保温箱id
+	DeliveryName            string `json:"deliveryName"`                         // 配送姓名
+	DeliveryPhone           string `json:"deliveryPhone"`                        // 配送电话
+	Quantity                int    `json:"quantity"`                             // 药品数量
+	Remark                  string `json:"remark"`                               // 运输备注
+	TamperProofLabel        string `json:"tamperProofLabel"`                     // 防拆码标签
+	TamperProofLabelImg     string `json:"tamperProofLabelImg"`                  // 防拆码标签图片
+	CoolerBoxId             int    `json:"coolerBoxId"`                          // 保温箱id
 	model2.ControlBy        `swaggerignore:"true"`
 	model2.DeptBy
 }
@@ -70,9 +75,12 @@ func (s *WaybillInsertReq) Generate(m *model.Waybill) {
 	m.ConsigneeAddressDetails = s.ConsigneeAddressDetails
 	m.ConsigneeAddressName = s.ConsigneeAddressName
 	m.ConsigneeAddressPhone = s.ConsigneeAddressPhone
+	m.DeliveryName = s.DeliveryName
+	m.DeliveryPhone = s.DeliveryPhone
 	m.Quantity = s.Quantity
 	m.Remark = s.Remark
 	m.TamperProofLabel = s.TamperProofLabel
+	m.TamperProofLabelImg = s.TamperProofLabelImg
 	m.CoolerBoxId = s.CoolerBoxId
 	m.OrderTime = model2.Time(time.Now())
 
@@ -99,7 +107,10 @@ type WaybillUpdateReq struct {
 	ConsigneeAddressDetails string `json:"consigneeAddressDetails"`              //收发货地址详情
 	ConsigneeAddressName    string `json:"consigneeAddressName"`                 //收发货地址名称
 	ConsigneeAddressPhone   string `json:"consigneeAddressPhone"`                //收发货地址电话
+	DeliveryName            string `json:"deliveryName"`                         // 配送姓名
+	DeliveryPhone           string `json:"deliveryPhone"`                        // 配送电话
 	TamperProofLabel        string `json:"tamperProofLabel"`                     //防拆标签
+	TamperProofLabelImg     string `json:"tamperProofLabelImg"`                  //防拆码标签图片
 	DeliveryCondition       string `json:"deliveryCondition"`                    //配送要求
 	Quantity                int    `json:"quantity"`                             //药品数量
 	Remark                  string `json:"remark"`                               //运输备注
@@ -118,13 +129,15 @@ func (s *WaybillUpdateReq) Generate(m *model.Waybill) {
 	m.ConsigneeAddressDetails = s.ConsigneeAddressDetails
 	m.ConsigneeAddressName = s.ConsigneeAddressName
 	m.ConsigneeAddressPhone = s.ConsigneeAddressPhone
+	m.DeliveryName = s.DeliveryName
+	m.DeliveryPhone = s.DeliveryPhone
 	m.Quantity = s.Quantity
 	m.Remark = s.Remark
 	m.TamperProofLabel = s.TamperProofLabel
+	m.TamperProofLabelImg = s.TamperProofLabelImg
 	if s.CoolerBoxId > 0 {
 		m.CoolerBoxId = s.CoolerBoxId
 	}
-
 	if s.ControlBy.UpdateBy != 0 {
 		m.UpdateBy = s.UpdateBy
 	}

+ 69 - 83
app/admin/service/waybill.go

@@ -17,6 +17,7 @@ import (
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
 	"gogs.baozhida.cn/zoie/OAuth-core/service"
 	"gorm.io/gorm"
+	"net/url"
 	"sort"
 	"strconv"
 	"strings"
@@ -61,6 +62,39 @@ func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count
 	}
 	return nil
 }
+func (e *Waybill) GetUserPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
+	var err error
+	var data model.Waybill
+	if c.PageSize == 9999 {
+		err = e.Orm.Model(&data).
+			Scopes(
+				cDto.MakeCondition(c.GetNeedSearch()),
+			).
+			Where("create_by = ?", p.UserId).
+			Find(list).Limit(-1).Offset(-1).
+			Count(count).Error
+		if err != nil {
+			e.Log.Errorf("db error: %s", err)
+			return global.GetFailedErr
+		}
+		return nil
+	}
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+		).
+		Where("create_by = ?", p.UserId).
+		Preload("CoolerBox").
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
 func (e *Waybill) GetAppletPage(c *dto.WaybillGetAppletPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
 	var err error
 	//var data model.Waybill
@@ -205,94 +239,46 @@ func (e *Waybill) Insert(c *dto.WaybillInsertReq) error {
 	}
 	c.Id = data.Id
 
-	return nil
-
-}
-
-// AppletInsert 员工添加运单
-func (e *Waybill) AppletInsert(c *dto.WaybillInsertReq, p *actions.DataPermission) error {
-	var err error
-	var data model.Waybill
-
-	tx := e.Orm.Begin()
-	defer func() {
-		if err != nil {
-			tx.Rollback()
-		} else {
-			tx.Commit()
-		}
-	}()
-
-	var userModel = model.SysUser{}
-	// 查询运单是否存在
-	err = tx.Scopes(actions.Permission(userModel.TableName(), p)).
-		First(&userModel, p.UserId).Error
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return global.GetNotFoundErr
+	// 保存收货地址
+	if c.SaveSenderAddress {
+		// 查询地址是否存在
+		address := model.Address{}
+		err = e.Orm.Where("address = ? and phone = ? and name = ? and dept_id = ? and address_type = 'sender'",
+			c.SenderAddressDetails, c.SenderAddressPhone, c.SenderAddressName, c.DeptId).First(&address).Error
+		if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
+			address.Address = c.SenderAddressDetails
+			address.Phone = c.SenderAddressPhone
+			address.Name = c.SenderAddressName
+			address.DeptId = c.DeptId
+			address.AddressType = "sender"
+			err = tx.Create(&address).Error
+			if err != nil {
+				e.Log.Errorf("创建地址失败: %s", err)
+				return global.CreateFailedErr
+			}
 		}
-		return global.CreateFailedErr
-	}
-	if (userModel.Type != model.SysUserTypeDriver && userModel.Type != model.SysUserTypeWarehouse) && userModel.UserType != "customer" {
-		err = errors.New("无权添加!")
-		return err
-	}
-	var status = model.WaybillStatusWaitDelivery
-	var coolerBox = model.CoolerBox{}
-	// 查询保温箱信息
-	err = tx.Scopes(actions.Permission(coolerBox.TableName(), p)).
-		First(&coolerBox, c.CoolerBoxId).Error
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return errors.New("获取车辆信息失败")
 	}
 
-	var no string
-	for {
-		no = time.Now().Format("200601021504") + utils.GetRandString(6, "0123456789", 0)
-		var j int64
-		err = e.Orm.Model(&data).Where("waybill_no = ?", no).Count(&j).Error
-		if err != nil {
-			continue
-		}
-		if j == 0 {
-			break
+	// 保存发货地址
+	if c.SaveConsigneeAddress {
+		// 查询地址是否存在
+		address := model.Address{}
+		err = e.Orm.Where("address = ? and phone = ? and name = ? and dept_id = ? and address_type = 'consignee'",
+			c.SenderAddressDetails, c.SenderAddressPhone, c.SenderAddressName, c.DeptId).First(&address).Error
+		if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
+			address.Address = c.SenderAddressDetails
+			address.Phone = c.SenderAddressPhone
+			address.Name = c.SenderAddressName
+			address.DeptId = c.DeptId
+			address.AddressType = "consignee"
+			err = tx.Create(&address).Error
+			if err != nil {
+				e.Log.Errorf("创建地址失败: %s", err)
+				return global.CreateFailedErr
+			}
 		}
 	}
 
-	// 添加运单
-	data.DeptId = p.DeptId
-	data.CreateBy = p.UserId
-	data.WaybillNo = no
-	c.Generate(&data)
-	data.Status = status
-	err = tx.Create(&data).Error
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return global.CreateFailedErr
-	}
-	c.Id = data.Id
-
-	// 添加物流
-	Logistics := model.WaybillLogistics{
-		WaybillNo:   data.WaybillNo,
-		Status:      data.Status,
-		CoolerBoxId: coolerBox.Id,
-		UserId:      p.UserId,
-		ControlBy: model2.ControlBy{
-			CreateBy: p.UserId,
-		},
-		DeptBy: model2.DeptBy{
-			DeptId: p.DeptId,
-		},
-	}
-	err = tx.Create(&Logistics).Error
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
-	}
-
 	return nil
 
 }
@@ -496,7 +482,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
 			//	}
 			//}
 			ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
-			addr := conf.ExtConfig.Applet.WaybillUrl + lib.AesEncryptCBC(waybillModel.WaybillNo, lib.AesKey)
+			addr := conf.ExtConfig.Applet.WaybillUrl + url.QueryEscape(lib.AesEncryptCBC(waybillModel.WaybillNo, lib.AesKey))
 			res, err1 := ss.SmsXSend(waybillModel.ConsigneeAddressPhone, addr)
 			if err1 != nil || res.Status != sms.SUCCESS {
 				e.Log.Errorf("发送短信验证码出现异常", zap.Any("res", res), zap.Error(err1))

+ 1 - 1
app/admin/service/waybill_task.go

@@ -195,7 +195,7 @@ func (e *WaybillTask) GetLocus(c *dto.WaybillGetLocusReq) ([]nats_server.DeviceD
 	err = e.Orm.Model(&data).
 		Scopes(
 			cDto.MakeCondition(c.GetNeedSearch()),
-		).Where("car_id > 0").
+		).
 		Find(&taskList).Error
 	if err != nil {
 		e.Log.Errorf("db error: %s", err)

+ 2 - 2
db/migration.go

@@ -19,8 +19,8 @@ func AutoMigrateDB() {
 			&model.SysLoginLog{},
 			&model.SysOperaLog{},
 			//&model.Warehouse{},
-			//&model.Address{},
-			//&model.AddressDefault{},
+			&model.Address{},
+			&model.AddressDefault{},
 			//&model.Car{},
 			&model.CoolerBox{},
 			&model.Waybill{},