Przeglądaj źródła

2024-03-06 first version

zoie 1 rok temu
rodzic
commit
60b87030e9
100 zmienionych plików z 6966 dodań i 1486 usunięć
  1. 4 2
      .gitignore
  2. 26 0
      Dockerfile
  3. 1 1
      README.md
  4. 191 0
      app/admin/controller/address.go
  5. 48 0
      app/admin/controller/applet_customer.go
  6. 237 0
      app/admin/controller/car_info.go
  7. 326 0
      app/admin/controller/customer.go
  8. 207 0
      app/admin/controller/device.go
  9. 195 0
      app/admin/controller/dispatch_cost.go
  10. 135 0
      app/admin/controller/fill_check.go
  11. 169 0
      app/admin/controller/fill_data.go
  12. 196 0
      app/admin/controller/fill_gun.go
  13. 131 0
      app/admin/controller/gas_cylinder.go
  14. 195 0
      app/admin/controller/gas_cylinder_spec.go
  15. 195 0
      app/admin/controller/goods.go
  16. 175 0
      app/admin/controller/inspect_record.go
  17. 155 0
      app/admin/controller/operation_log.go
  18. 337 0
      app/admin/controller/order.go
  19. 102 0
      app/admin/controller/real_fill_data.go
  20. 92 5
      app/admin/controller/store.go
  21. 0 315
      app/admin/controller/sys_config.go
  22. 0 221
      app/admin/controller/sys_dict_data_controller.go
  23. 0 211
      app/admin/controller/sys_dict_type_controller.go
  24. 3 3
      app/admin/controller/sys_menu.go
  25. 13 95
      app/admin/controller/sys_role.go
  26. 0 265
      app/admin/controller/sys_service.go
  27. 50 9
      app/admin/controller/sys_user.go
  28. 3 4
      app/admin/controller/truck_enterprise.go
  29. 68 0
      app/admin/controller/upload.go
  30. 195 0
      app/admin/controller/warehouse.go
  31. 28 0
      app/admin/model/address.go
  32. 13 0
      app/admin/model/applet_customer.go
  33. 53 0
      app/admin/model/car_info.go
  34. 44 0
      app/admin/model/customer.go
  35. 17 0
      app/admin/model/customer_gas_cylinder.go
  36. 29 0
      app/admin/model/device.go
  37. 18 0
      app/admin/model/dispatch_cost.go
  38. 66 0
      app/admin/model/fill_check.go
  39. 94 0
      app/admin/model/fill_data.go
  40. 29 0
      app/admin/model/fill_gun.go
  41. 72 0
      app/admin/model/gas_cylinder.go
  42. 17 0
      app/admin/model/gas_cylinder_spec.go
  43. 23 0
      app/admin/model/goods.go
  44. 74 0
      app/admin/model/inspect_record.go
  45. 66 0
      app/admin/model/operation_log.go
  46. 53 0
      app/admin/model/order.go
  47. 41 0
      app/admin/model/real_fill_data.go
  48. 0 29
      app/admin/model/sys_config.go
  49. 108 59
      app/admin/model/sys_dept.go
  50. 0 34
      app/admin/model/sys_dict_data.go
  51. 0 28
      app/admin/model/sys_dict_type.go
  52. 14 12
      app/admin/model/sys_menu.go
  53. 2 2
      app/admin/model/sys_opera_log.go
  54. 16 1
      app/admin/model/sys_role.go
  55. 6 3
      app/admin/model/sys_role_menu.go
  56. 0 30
      app/admin/model/sys_service.go
  57. 110 22
      app/admin/model/sys_user.go
  58. 15 0
      app/admin/model/truck_user_car_info.go
  59. 17 0
      app/admin/model/warehouse.go
  60. 23 0
      app/admin/router/address.go
  61. 88 0
      app/admin/router/applet_customer.go
  62. 26 0
      app/admin/router/car_info.go
  63. 36 0
      app/admin/router/customer.go
  64. 25 0
      app/admin/router/device.go
  65. 26 0
      app/admin/router/dispatch_cost.go
  66. 25 0
      app/admin/router/fill_check.go
  67. 33 0
      app/admin/router/fill_data.go
  68. 25 0
      app/admin/router/fill_gun.go
  69. 24 0
      app/admin/router/gas_cylinder.go
  70. 26 0
      app/admin/router/gas_cylinder_spec.go
  71. 25 0
      app/admin/router/goods.go
  72. 5 1
      app/admin/router/init_router.go
  73. 25 0
      app/admin/router/inspect_record.go
  74. 37 0
      app/admin/router/operation_log.go
  75. 29 0
      app/admin/router/order.go
  76. 31 0
      app/admin/router/real_fill_data.go
  77. 0 43
      app/admin/router/sys_config.go
  78. 4 3
      app/admin/router/sys_dept.go
  79. 0 38
      app/admin/router/sys_dict.go
  80. 4 4
      app/admin/router/sys_menu.go
  81. 2 9
      app/admin/router/sys_role.go
  82. 0 35
      app/admin/router/sys_service.go
  83. 3 2
      app/admin/router/sys_user.go
  84. 19 0
      app/admin/router/upload.go
  85. 26 0
      app/admin/router/warehouse.go
  86. 158 0
      app/admin/service/address.go
  87. 108 0
      app/admin/service/applet_customer.go
  88. 117 0
      app/admin/service/applet_test.go
  89. 218 0
      app/admin/service/car_info.go
  90. 372 0
      app/admin/service/customer.go
  91. 156 0
      app/admin/service/device.go
  92. 155 0
      app/admin/service/dispatch_cost.go
  93. 94 0
      app/admin/service/dto/address.go
  94. 19 0
      app/admin/service/dto/applet_customer.go
  95. 98 0
      app/admin/service/dto/car_info.go
  96. 148 0
      app/admin/service/dto/customer.go
  97. 103 0
      app/admin/service/dto/device.go
  98. 91 0
      app/admin/service/dto/dispatch_cost.go
  99. 54 0
      app/admin/service/dto/fill_ckeck.go
  100. 34 0
      app/admin/service/dto/fill_data.go

+ 4 - 2
.gitignore

@@ -36,7 +36,9 @@ nohup.out
 /bin
 Makefile
 /ofile
-./setting.yml
-./settings.yml
+setting.yml
 /temp
+/app/jobs
+/docs
+uploads
 

+ 26 - 0
Dockerfile

@@ -0,0 +1,26 @@
+# FROM ... AS builder : 表示依赖的镜像只是使用在编译阶段
+#FROM golang:1.19 AS builder
+
+#ARG VERSION=""
+#ARG VCS_BRANCH=""
+#ARG PROJECT_NAME=OAuth
+#ARG DOCKER_PROJECT_DIR=/build
+#ARG EXTRA_BUILD_ARGS=""
+
+# 编译阶段的工作目录,也可以作为全局工作目录
+#WORKDIR $DOCKER_PROJECT_DIR
+#COPY . $DOCKER_PROJECT_DIR
+
+#ENV GOPROXY="https://goproxy.cn,direct"
+
+#RUN git config --global url."gogs.baozhida.cn/zoie/OAuth-core".insteadOf "https://gogs.baozhida.cn/zoie/OAuth-core" && \
+#    mkdir -p /output && \
+#    make build-linux -e OUTPUT_FILE_LINUX=/output/OAuth \
+#    -e VERSION=$VERSION -e VCS_BRANCH=$VCS_BRANCH -e EXTRA_BUILD_ARGS=$EXTRA_BUILD_ARGS
+
+FROM alpine
+COPY ./bin/linux/GasCylinderApi /usr/local/bin
+COPY ./conf/ /etc/conf/
+#COPY /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+EXPOSE 8000
+CMD ["gas-cylinder-api","server","-c", "/etc/conf/settings.yml"]

+ 1 - 1
README.md

@@ -1,4 +1,4 @@
-# 疫苗进销存管理系统
+# 气瓶追溯管理系统
 
 ### 环境要求
 

+ 191 - 0
app/admin/controller/address.go

@@ -0,0 +1,191 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type AddressController struct {
+	api.Api
+}
+
+// GetPage 获取收货地址列表
+// @Summary 获取收货地址列表
+// @Description 获取收货地址列表
+// @Tags 收货地址
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Address}} "{"code": 200, "data": [...]}"
+// @Router /api/address [get]
+// @Security Bearer
+func (e AddressController) GetPage(c *gin.Context) {
+	s := service.Address{}
+	req := dto.AddressGetPageReq{}
+	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
+	}
+
+	//数据权限检查
+	req.CustomerId = service.GetAppletCustomerId(c)
+	list := make([]model.Address, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取收货地址
+// @Summary 通过id获取收货地址
+// @Description 通过id获取收货地址
+// @Tags 收货地址
+// @Param id path string true "收货地址id"
+// @Success 200 {object} response.Response{data=model.Address} "{"code": 200, "data": [...]}"
+// @Router /api/address/{id} [get]
+// @Security Bearer
+func (e AddressController) Get(c *gin.Context) {
+	s := service.Address{}
+	req := dto.AddressGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Address
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加收货地址
+// @Summary 添加收货地址
+// @Description 添加收货地址
+// @Tags 收货地址
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.AddressInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/address [post]
+// @Security Bearer
+func (e AddressController) Insert(c *gin.Context) {
+	s := service.Address{}
+	req := dto.AddressInsertReq{}
+	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
+	}
+	// 设置创建人
+	req.SetCustomerId(service.GetAppletCustomerId(c))
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改收货地址
+// @Summary 修改收货地址
+// @Description 修改收货地址
+// @Tags 收货地址
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.AddressUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/address [put]
+// @Security Bearer
+func (e AddressController) Update(c *gin.Context) {
+	s := service.Address{}
+	req := dto.AddressUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除收货地址
+// @Summary 删除收货地址
+// @Description 删除收货地址
+// @Tags 收货地址
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.AddressDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/address [delete]
+// @Security Bearer
+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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 48 - 0
app/admin/controller/applet_customer.go

@@ -0,0 +1,48 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type AppletCustomerController struct {
+	api.Api
+}
+
+// GetPage 获取客户信息列表
+// @Summary 获取客户信息列表
+// @Description 获取客户信息列表
+// @Tags 客户信息
+// @Param name query string false "客户信息名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Customer}} "{"code": 200, "data": [...]}"
+// @Router /api/customer [get]
+// @Security Bearer
+func (e AppletCustomerController) Login(c *gin.Context) {
+	s := service.AppletCustomer{}
+	req := dto.AppletCustomerLoginReq{}
+	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
+	}
+
+	token, expiresAt, err := s.Login(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	data := map[string]string{
+		"token":     token,
+		"expiresAt": expiresAt,
+	}
+	e.OK(data, "查询成功")
+}

+ 237 - 0
app/admin/controller/car_info.go

@@ -0,0 +1,237 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type CarInfoController struct {
+	api.Api
+}
+
+// GetPage 获取车辆信息列表
+// @Summary 获取车辆信息列表
+// @Description 获取车辆信息列表
+// @Tags 车辆信息
+// @Param deptName query string false "车辆信息名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.CarInfo}} "{"code": 200, "data": [...]}"
+// @Router /api/car-info [get]
+// @Security Bearer
+func (e CarInfoController) GetPage(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoGetPageReq{}
+	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)
+
+	list := make([]model.CarInfo, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取车辆信息
+// @Summary 通过id获取车辆信息
+// @Description 通过id获取车辆信息
+// @Tags 车辆信息
+// @Param id path string true "车辆信息id"
+// @Success 200 {object} response.Response{data=model.CarInfo} "{"code": 200, "data": [...]}"
+// @Router /api/car-info/{id} [get]
+// @Security Bearer
+func (e CarInfoController) Get(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.CarInfo
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加车辆信息
+// @Summary 添加车辆信息
+// @Description 添加车辆信息
+// @Tags 车辆信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CarInfoInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/car-info [post]
+// @Security Bearer
+func (e CarInfoController) Insert(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoInsertReq{}
+	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)
+	// 获取运输企业code
+	truck, err := model.GetProvCode(p.DeptId)
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	req.SetCmpCode(truck.CmpCode)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改车辆信息
+// @Summary 修改车辆信息
+// @Description 修改车辆信息
+// @Tags 车辆信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CarInfoUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/car-info [put]
+// @Security Bearer
+func (e CarInfoController) Update(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除车辆信息
+// @Summary 删除车辆信息
+// @Description 删除车辆信息
+// @Tags 车辆信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CarInfoDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/car-info [delete]
+// @Security Bearer
+func (e CarInfoController) Delete(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}
+
+// BindTruckUser 绑定货车司机
+// @Summary 绑定货车司机
+// @Description 绑定货车司机
+// @Tags 车辆信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CarInfoInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/car-info/bind-truck-user [post]
+// @Security Bearer
+func (e CarInfoController) BindTruckUser(c *gin.Context) {
+	s := service.CarInfo{}
+	req := dto.CarInfoBindTruckUserReq{}
+	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
+	}
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	err = s.BindTruckUser(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.CarNo, "绑定成功")
+}

+ 326 - 0
app/admin/controller/customer.go

@@ -0,0 +1,326 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"gas-cylinder-api/common/global"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type CustomerController struct {
+	api.Api
+}
+
+// GetPage 获取客户信息列表
+// @Summary 获取客户信息列表
+// @Description 获取客户信息列表
+// @Tags 客户信息
+// @Param name query string false "客户信息名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Customer}} "{"code": 200, "data": [...]}"
+// @Router /api/customer [get]
+// @Security Bearer
+func (e CustomerController) GetPage(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerGetPageReq{}
+	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)
+
+	list := make([]model.Customer, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取客户信息
+// @Summary 通过id获取客户信息
+// @Description 通过id获取客户信息
+// @Tags 客户信息
+// @Param id path string true "客户信息id"
+// @Success 200 {object} response.Response{data=model.Customer} "{"code": 200, "data": [...]}"
+// @Router /api/customer/{id} [get]
+// @Security Bearer
+func (e CustomerController) Get(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Customer
+
+	//数据权限检查
+	err = s.Get(&req, &object)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// GetByPhone 通过手机号获取客户信息
+// @Summary 通过手机号获取客户信息
+// @Description 通过手机号获取客户信息
+// @Tags 客户信息
+// @Param phone query string true "手机号"
+// @Success 200 {object} response.Response{data=model.Customer} "{"code": 200, "data": [...]}"
+// @Router /api/customer/phone [get]
+// @Security Bearer
+func (e CustomerController) GetByPhone(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerGetByPhoneReq{}
+	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
+	}
+	var object model.Customer
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.GetByPhone(&req, &object, p)
+	if err != nil {
+		if err == global.GetNotFoundErr {
+			e.Error(404, err, err.Error())
+			return
+		} else {
+			e.Error(500, err, err.Error())
+			return
+		}
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加客户信息
+// @Summary 添加客户信息
+// @Description 添加客户信息
+// @Tags 客户信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CustomerInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/customer [post]
+// @Security Bearer
+func (e CustomerController) Insert(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerInsertReq{}
+	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)
+	// 获取销售门店code
+	store, err := model.GetProvCode(p.DeptId)
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	req.SetStoreCode(store.CmpCode)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改客户信息
+// @Summary 修改客户信息
+// @Description 修改客户信息
+// @Tags 客户信息
+// @Accept  application/json
+// @Product application/json
+// @Param id path string true "客户信息id"
+// @Param data body dto.CustomerUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/customer [put]
+// @Security Bearer
+func (e CustomerController) Update(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除客户信息
+// @Summary 删除客户信息
+// @Description 删除客户信息
+// @Tags 客户信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CustomerDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/customer [delete]
+// @Security Bearer
+func (e CustomerController) Delete(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}
+
+// InsertOrUpdate 添加客户或更新信息
+// @Summary 添加客户或更新信息
+// @Description 添加客户或更新信息
+// @Tags 客户信息
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.CustomerInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/customer [post]
+// @Security Bearer
+func (e CustomerController) InsertOrUpdate(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerInsertReq{}
+	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)
+	// 获取销售门店code
+	store, err := model.GetProvCode(p.DeptId)
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	req.SetStoreCode(store.CmpCode)
+	// 通过手机号查询客户信息
+	err = s.InsertOrUpdate(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "提交成功")
+}
+
+// GetBorrowGasCylinder 获取在用气瓶
+// @Summary 获取在用气瓶
+// @Description 获取在用气瓶
+// @Tags 客户信息
+// @Param phone query string true "手机号"
+// @Success 200 {object} response.Response{data=model.Customer} "{"code": 200, "data": [...]}"
+// @Router /api/customer/phone [get]
+// @Security Bearer
+func (e CustomerController) GetBorrowGasCylinder(c *gin.Context) {
+	s := service.Customer{}
+	req := dto.CustomerGetBorrowGasCylinderReq{}
+	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
+	}
+	list := make([]model.CustomerGasCylinder, 0)
+
+	//数据权限检查
+	err = s.GetBorrowGasCylinder(&req, &list)
+	if err != nil {
+		if err == global.GetNotFoundErr {
+			e.Error(404, err, err.Error())
+			return
+		} else {
+			e.Error(500, err, err.Error())
+			return
+		}
+	}
+
+	e.PageOK(list, 0, 0, 0, "查询成功")
+}

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

@@ -0,0 +1,207 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type DeviceController struct {
+	api.Api
+}
+
+// GetPage 获取设备列表
+// @Summary 获取设备列表
+// @Description 获取设备列表
+// @Tags 设备
+// @Param deptName query string false "设备名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Device}} "{"code": 200, "data": [...]}"
+// @Router /api/device [get]
+// @Security Bearer
+func (e DeviceController) GetPage(c *gin.Context) {
+	s := service.Device{}
+	req := dto.DeviceGetPageReq{}
+	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)
+
+	list := make([]model.Device, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取设备
+// @Summary 通过id获取设备
+// @Description 通过id获取设备
+// @Tags 设备
+// @Param id path string true "设备id"
+// @Success 200 {object} response.Response{data=model.Device} "{"code": 200, "data": [...]}"
+// @Router /api/device/{id} [get]
+// @Security Bearer
+func (e DeviceController) Get(c *gin.Context) {
+	s := service.Device{}
+	req := dto.DeviceGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Device
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加设备
+// @Summary 添加设备
+// @Description 添加设备
+// @Tags 设备
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DeviceInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/device [post]
+// @Security Bearer
+func (e DeviceController) Insert(c *gin.Context) {
+	s := service.Device{}
+	userSvc := service.SysUser{}
+	req := dto.DeviceInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+	var userObj model.SysUser
+	err = userSvc.GetByProvUserId(req.ProvUserId, &userObj)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	// 设置创建人
+	req.ProvUserId = userObj.ProvUserId
+	req.ProvCmpCode = userObj.ProvUser.CmpCode
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改设备
+// @Summary 修改设备
+// @Description 修改设备
+// @Tags 设备
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DeviceUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/device [put]
+// @Security Bearer
+func (e DeviceController) Update(c *gin.Context) {
+	s := service.Device{}
+	userSvc := service.SysUser{}
+	req := dto.DeviceUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除设备
+// @Summary 删除设备
+// @Description 删除设备
+// @Tags 设备
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DeviceDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/device [delete]
+// @Security Bearer
+func (e DeviceController) Delete(c *gin.Context) {
+	s := service.Device{}
+	req := dto.DeviceDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 195 - 0
app/admin/controller/dispatch_cost.go

@@ -0,0 +1,195 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type DispatchCostController struct {
+	api.Api
+}
+
+// GetPage 获取派费列表
+// @Summary 获取派费列表
+// @Description 获取派费列表
+// @Tags 派费
+// @Param deptName query string false "派费名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.DispatchCost}} "{"code": 200, "data": [...]}"
+// @Router /api/dispatch-cost [get]
+// @Security Bearer
+func (e DispatchCostController) GetPage(c *gin.Context) {
+	s := service.DispatchCost{}
+	req := dto.DispatchCostGetPageReq{}
+	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)
+
+	list := make([]model.DispatchCost, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取派费
+// @Summary 通过id获取派费
+// @Description 通过id获取派费
+// @Tags 派费
+// @Param id path string true "派费id"
+// @Success 200 {object} response.Response{data=model.DispatchCost} "{"code": 200, "data": [...]}"
+// @Router /api/dispatch-cost/{id} [get]
+// @Security Bearer
+func (e DispatchCostController) Get(c *gin.Context) {
+	s := service.DispatchCost{}
+	req := dto.DispatchCostGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.DispatchCost
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加派费
+// @Summary 添加派费
+// @Description 添加派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DispatchCostInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/dispatch-cost [post]
+// @Security Bearer
+func (e DispatchCostController) Insert(c *gin.Context) {
+	s := service.DispatchCost{}
+	req := dto.DispatchCostInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改派费
+// @Summary 修改派费
+// @Description 修改派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DispatchCostUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/dispatch-cost [put]
+// @Security Bearer
+func (e DispatchCostController) Update(c *gin.Context) {
+	s := service.DispatchCost{}
+	req := dto.DispatchCostUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除派费
+// @Summary 删除派费
+// @Description 删除派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.DispatchCostDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/dispatch-cost [delete]
+// @Security Bearer
+func (e DispatchCostController) Delete(c *gin.Context) {
+	s := service.DispatchCost{}
+	req := dto.DispatchCostDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 135 - 0
app/admin/controller/fill_check.go

@@ -0,0 +1,135 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type FillCheckController struct {
+	api.Api
+}
+
+// GetPage 获取充气前后检查列表
+// @Summary 获取充气前后检查列表
+// @Description 获取充气前后检查列表
+// @Tags 充气前后检查
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.FillCheck}} "{"code": 200, "data": [...]}"
+// @Router /api/fill-check [get]
+// @Security Bearer
+func (e FillCheckController) GetPage(c *gin.Context) {
+	s := service.FillCheck{}
+	req := dto.FillCheckGetPageReq{}
+	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)
+
+	list := make([]model.FillCheck, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取充气前后检查
+// @Summary 通过id获取充气前后检查
+// @Description 通过id获取充气前后检查
+// @Tags 充气前后检查
+// @Param id path string true "充气前后检查id"
+// @Success 200 {object} response.Response{data=model.FillCheck} "{"code": 200, "data": [...]}"
+// @Router /api/fill-check/{id} [get]
+// @Security Bearer
+func (e FillCheckController) Get(c *gin.Context) {
+	s := service.FillCheck{}
+	req := dto.FillCheckGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.FillCheck
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加充气前后检查
+// @Summary 添加充气前后检查
+// @Description 添加充气前后检查
+// @Tags 充气前后检查
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.FillCheckInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/fill-check [post]
+// @Security Bearer
+func (e FillCheckController) Insert(c *gin.Context) {
+	s := service.FillCheck{}
+	userSvc := service.SysUser{}
+	req := dto.FillCheckInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(user.GetDeptId(c))
+
+	var userObj model.SysUser
+	err = userSvc.Get(&dto.SysUserGetReq{Id: user.GetUserId(c)}, nil, &userObj)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	req.StoreId = userObj.ProvUser.CmpCode
+	req.CreatorId = userObj.ProvUserId
+	req.UserId = userObj.Id
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}

+ 169 - 0
app/admin/controller/fill_data.go

@@ -0,0 +1,169 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type FillDataController struct {
+	api.Api
+}
+
+// GetPage 获取上报实时充装数据
+// @Summary 获取上报实时充装数据
+// @Description 获取上报实时充装数据
+// @Tags 上报实时充装数据
+// @Param deptName query string false "上报实时充装数据名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.FillData}} "{"code": 200, "data": [...]}"
+// @Router /api/goods [get]
+// @Security Bearer
+func (e FillDataController) GetPage(c *gin.Context) {
+	s := service.FillData{}
+	req := dto.FillDataGetPageReq{}
+	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)
+
+	list := make([]model.FillData, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Insert 添加上报实时充装数据
+// @Summary 添加上报实时充装数据
+// @Description 添加上报实时充装数据
+// @Tags 上报实时充装数据
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.FillDataInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e FillDataController) Insert(c *gin.Context) {
+	s := service.FillData{}
+	fillGunSvc := service.FillGun{}
+
+	req := dto.FillDataInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&fillGunSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	// 设置创建人
+	//p := actions.GetPermissionFromContext(c)
+	//req.SetCreateBy(user.GetUserId(c))
+	//req.SetDeptId(p.DeptId)
+	// 获取充装枪信息
+	var fillGun model.FillGun
+
+	err = fillGunSvc.GetByCode(req.ScanGunCode, &fillGun)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	err = s.Insert(&req, fillGun)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// StationList 搜索-气站列表
+// @Summary 搜索-气站列表
+// @Description 搜索-气站列表
+// @Tags 上报实时充装数据
+// @Param deptName query string false "操作记录名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.OperationLog}} "{"code": 200, "data": [...]}"
+// @Router /api/operation-log [get]
+// @Security Bearer
+func (e FillDataController) StationList(c *gin.Context) {
+	s := service.FillData{}
+	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)
+
+	list := make([]model.FillDataDistinctStation, 0)
+	var count int64
+
+	err = s.GetStationList(&list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), 0, 0, "查询成功")
+}
+
+// UserList 搜索-送气员列表
+// @Summary 搜索-送气员列表
+// @Description 搜索-送气员列表
+// @Tags 上报实时充装数据
+// @Param deptName query string false "操作记录名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.OperationLog}} "{"code": 200, "data": [...]}"
+// @Router /api/operation-log [get]
+// @Security Bearer
+func (e FillDataController) UserList(c *gin.Context) {
+	s := service.FillData{}
+	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)
+
+	list := make([]model.FillDataDistinctUser, 0)
+	var count int64
+
+	err = s.GetUserList(&list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), 0, 0, "查询成功")
+}

+ 196 - 0
app/admin/controller/fill_gun.go

@@ -0,0 +1,196 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type FillGunController struct {
+	api.Api
+}
+
+// GetPage 获取充装枪列表
+// @Summary 获取充装枪列表
+// @Description 获取充装枪列表
+// @Tags 充装枪
+// @Param deptName query string false "充装枪名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.FillGun}} "{"code": 200, "data": [...]}"
+// @Router /api/goods [get]
+// @Security Bearer
+func (e FillGunController) GetPage(c *gin.Context) {
+	s := service.FillGun{}
+	req := dto.FillGunGetPageReq{}
+	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)
+
+	list := make([]model.FillGun, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取充装枪
+// @Summary 通过id获取充装枪
+// @Description 通过id获取充装枪
+// @Tags 充装枪
+// @Param id path string true "充装枪id"
+// @Success 200 {object} response.Response{data=model.FillGun} "{"code": 200, "data": [...]}"
+// @Router /api/goods/{id} [get]
+// @Security Bearer
+func (e FillGunController) Get(c *gin.Context) {
+	s := service.FillGun{}
+	req := dto.FillGunGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.FillGun
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加充装枪
+// @Summary 添加充装枪
+// @Description 添加充装枪
+// @Tags 充装枪
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.FillGunInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e FillGunController) Insert(c *gin.Context) {
+	s := service.FillGun{}
+	req := dto.FillGunInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改充装枪
+// @Summary 修改充装枪
+// @Description 修改充装枪
+// @Tags 充装枪
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.FillGunUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [put]
+// @Security Bearer
+func (e FillGunController) Update(c *gin.Context) {
+	s := service.FillGun{}
+	req := dto.FillGunUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除充装枪
+// @Summary 删除充装枪
+// @Description 删除充装枪
+// @Tags 充装枪
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.FillGunDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/goods [delete]
+// @Security Bearer
+func (e FillGunController) Delete(c *gin.Context) {
+	s := service.FillGun{}
+	req := dto.FillGunDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}
+

+ 131 - 0
app/admin/controller/gas_cylinder.go

@@ -0,0 +1,131 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type GasCylinderController struct {
+	api.Api
+}
+
+// GetPage 获取派费列表
+// @Summary 获取派费列表
+// @Description 获取派费列表
+// @Tags 派费
+// @Param deptName query string false "派费名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.GasCylinderSpec}} "{"code": 200, "data": [...]}"
+// @Router /api/dispatch-cost [get]
+// @Security Bearer
+func (e GasCylinderController) GetPage(c *gin.Context) {
+	s := service.GasCylinder{}
+	req := dto.GasCylinderGetPageReq{}
+	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)
+
+	list := make([]model.GasCylinder, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取商品
+// @Summary 通过id获取商品
+// @Description 通过id获取商品
+// @Tags 商品
+// @Param id path string true "商品id"
+// @Success 200 {object} response.Response{data=model.GasCylinder} "{"code": 200, "data": [...]}"
+// @Router /api/goods/{id} [get]
+// @Security Bearer
+func (e GasCylinderController) Get(c *gin.Context) {
+	s := service.GasCylinder{}
+	req := dto.GasCylinderGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.ProvGasCylinder
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Get 通过id获取商品
+// @Summary 通过id获取商品
+// @Description 通过id获取商品
+// @Tags 商品
+// @Param id path string true "商品id"
+// @Success 200 {object} response.Response{data=model.GasCylinder} "{"code": 200, "data": [...]}"
+// @Router /api/goods/{id} [get]
+// @Security Bearer
+func (e GasCylinderController) GetByUid(c *gin.Context) {
+	s := service.GasCylinder{}
+	operationLogSvc := service.OperationLog{}
+	req := dto.GasCylinderGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		MakeService(&operationLogSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var gasCylinder model.ProvGasCylinder
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &gasCylinder, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	operationLogList := make([]model.OperationLog, 0)
+	err = operationLogSvc.ListByUid(gasCylinder.InnerCode, &operationLogList)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(map[string]interface{}{
+		"gasCylinder":  gasCylinder,
+		"operationLog": operationLogList,
+	}, "查询成功")
+}

+ 195 - 0
app/admin/controller/gas_cylinder_spec.go

@@ -0,0 +1,195 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type GasCylinderSpecController struct {
+	api.Api
+}
+
+// GetPage 获取派费列表
+// @Summary 获取派费列表
+// @Description 获取派费列表
+// @Tags 派费
+// @Param deptName query string false "派费名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.GasCylinderSpec}} "{"code": 200, "data": [...]}"
+// @Router /api/dispatch-cost [get]
+// @Security Bearer
+func (e GasCylinderSpecController) GetPage(c *gin.Context) {
+	s := service.GasCylinderSpec{}
+	req := dto.GasCylinderSpecGetPageReq{}
+	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)
+
+	list := make([]model.GasCylinderSpec, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取派费
+// @Summary 通过id获取派费
+// @Description 通过id获取派费
+// @Tags 派费
+// @Param id path string true "派费id"
+// @Success 200 {object} response.Response{data=model.GasCylinderSpec} "{"code": 200, "data": [...]}"
+// @Router /api/dispatch-cost/{id} [get]
+// @Security Bearer
+func (e GasCylinderSpecController) Get(c *gin.Context) {
+	s := service.GasCylinderSpec{}
+	req := dto.GasCylinderSpecGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.GasCylinderSpec
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加派费
+// @Summary 添加派费
+// @Description 添加派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GasCylinderSpecInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/dispatch-cost [post]
+// @Security Bearer
+func (e GasCylinderSpecController) Insert(c *gin.Context) {
+	s := service.GasCylinderSpec{}
+	req := dto.GasCylinderSpecInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改派费
+// @Summary 修改派费
+// @Description 修改派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GasCylinderSpecUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/dispatch-cost [put]
+// @Security Bearer
+func (e GasCylinderSpecController) Update(c *gin.Context) {
+	s := service.GasCylinderSpec{}
+	req := dto.GasCylinderSpecUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除派费
+// @Summary 删除派费
+// @Description 删除派费
+// @Tags 派费
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GasCylinderSpecDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/dispatch-cost [delete]
+// @Security Bearer
+func (e GasCylinderSpecController) Delete(c *gin.Context) {
+	s := service.GasCylinderSpec{}
+	req := dto.GasCylinderSpecDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 195 - 0
app/admin/controller/goods.go

@@ -0,0 +1,195 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type GoodsController struct {
+	api.Api
+}
+
+// GetPage 获取商品列表
+// @Summary 获取商品列表
+// @Description 获取商品列表
+// @Tags 商品
+// @Param deptName query string false "商品名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Goods}} "{"code": 200, "data": [...]}"
+// @Router /api/goods [get]
+// @Security Bearer
+func (e GoodsController) GetPage(c *gin.Context) {
+	s := service.Goods{}
+	req := dto.GoodsGetPageReq{}
+	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)
+
+	list := make([]model.Goods, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取商品
+// @Summary 通过id获取商品
+// @Description 通过id获取商品
+// @Tags 商品
+// @Param id path string true "商品id"
+// @Success 200 {object} response.Response{data=model.Goods} "{"code": 200, "data": [...]}"
+// @Router /api/goods/{id} [get]
+// @Security Bearer
+func (e GoodsController) Get(c *gin.Context) {
+	s := service.Goods{}
+	req := dto.GoodsGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Goods
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加商品
+// @Summary 添加商品
+// @Description 添加商品
+// @Tags 商品
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GoodsInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e GoodsController) Insert(c *gin.Context) {
+	s := service.Goods{}
+	req := dto.GoodsInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改商品
+// @Summary 修改商品
+// @Description 修改商品
+// @Tags 商品
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GoodsUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [put]
+// @Security Bearer
+func (e GoodsController) Update(c *gin.Context) {
+	s := service.Goods{}
+	req := dto.GoodsUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除商品
+// @Summary 删除商品
+// @Description 删除商品
+// @Tags 商品
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.GoodsDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/goods [delete]
+// @Security Bearer
+func (e GoodsController) Delete(c *gin.Context) {
+	s := service.Goods{}
+	req := dto.GoodsDeleteReq{}
+	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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 175 - 0
app/admin/controller/inspect_record.go

@@ -0,0 +1,175 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type InspectRecordController struct {
+	api.Api
+}
+
+// GetPage 获取入户安全检查列表
+// @Summary 获取入户安全检查列表
+// @Description 获取入户安全检查列表
+// @Tags 入户安全检查
+// @Param deptName query string false "入户安全检查名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.InspectRecord}} "{"code": 200, "data": [...]}"
+// @Router /api/goods [get]
+// @Security Bearer
+func (e InspectRecordController) GetPage(c *gin.Context) {
+	s := service.InspectRecord{}
+	req := dto.InspectRecordGetPageReq{}
+	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)
+
+	list := make([]model.InspectRecord, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取入户安全检查
+// @Summary 通过id获取入户安全检查
+// @Description 通过id获取入户安全检查
+// @Tags 入户安全检查
+// @Param id path string true "入户安全检查id"
+// @Success 200 {object} response.Response{data=model.InspectRecord} "{"code": 200, "data": [...]}"
+// @Router /api/goods/{id} [get]
+// @Security Bearer
+func (e InspectRecordController) Get(c *gin.Context) {
+	s := service.InspectRecord{}
+	req := dto.InspectRecordGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.InspectRecord
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加入户安全检查
+// @Summary 添加入户安全检查
+// @Description 添加入户安全检查
+// @Tags 入户安全检查
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.InspectRecordInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e InspectRecordController) Insert(c *gin.Context) {
+	s := service.InspectRecord{}
+	userSvc := service.SysUser{}
+	req := dto.InspectRecordInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(user.GetDeptId(c))
+
+	var userObj model.SysUser
+	err = userSvc.Get(&dto.SysUserGetReq{Id: user.GetUserId(c)}, nil, &userObj)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	req.InspectorId = userObj.ProvUserId
+	req.CreatorId = userObj.ProvUserId
+	req.UserId = userObj.Id
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改入户安全检查
+// @Summary 修改入户安全检查
+// @Description 修改入户安全检查
+// @Tags 入户安全检查
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.InspectRecordInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e InspectRecordController) Update(c *gin.Context) {
+	s := service.InspectRecord{}
+	userSvc := service.SysUser{}
+	req := dto.InspectRecordInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&userSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(user.GetDeptId(c))
+
+	err = s.Update(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "修改成功")
+}

+ 155 - 0
app/admin/controller/operation_log.go

@@ -0,0 +1,155 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type OperationLogController struct {
+	api.Api
+}
+
+// GetPage 获取操作记录列表
+// @Summary 获取操作记录列表
+// @Description 获取操作记录列表
+// @Tags 操作记录
+// @Param deptName query string false "操作记录名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.OperationLog}} "{"code": 200, "data": [...]}"
+// @Router /api/operation-log [get]
+// @Security Bearer
+func (e OperationLogController) GetPage(c *gin.Context) {
+	s := service.OperationLog{}
+	req := dto.OperationLogGetPageReq{}
+	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)
+
+	list := make([]model.OperationLog, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取操作记录
+// @Summary 通过id获取操作记录
+// @Description 通过id获取操作记录
+// @Tags 操作记录
+// @Param id path string true "操作记录id"
+// @Success 200 {object} response.Response{data=model.OperationLog} "{"code": 200, "data": [...]}"
+// @Router /api/operation-log/{id} [get]
+// @Security Bearer
+func (e OperationLogController) Get(c *gin.Context) {
+	s := service.OperationLog{}
+	req := dto.OperationLogGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.OperationLog
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加操作记录
+// @Summary 添加操作记录
+// @Description 添加操作记录
+// @Tags 操作记录
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OperationLogInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/operation-log [post]
+// @Security Bearer
+func (e OperationLogController) Insert(c *gin.Context) {
+	s := service.OperationLog{}
+	req := dto.OperationLogInsertReq{}
+	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.Insert(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// InsertForGasStation 添加气站操作记录
+// @Summary 添加气站操作记录
+// @Description 添加气站操作记录
+// @Tags 操作记录
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OperationLogInsertForGasStationReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/operation-log/gas-station [post]
+// @Security Bearer
+func (e OperationLogController) InsertForGasStation(c *gin.Context) {
+	s := service.OperationLog{}
+	req := dto.OperationLogInsertForGasStationReq{}
+	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
+	}
+
+	err = s.InsertForGasStation(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}

+ 337 - 0
app/admin/controller/order.go

@@ -0,0 +1,337 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+)
+
+type OrderController struct {
+	api.Api
+}
+
+// GetPage 获取下单列表
+// @Summary 获取下单列表
+// @Description 获取下单列表
+// @Tags 订单
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Order}} "{"code": 200, "data": [...]}"
+// @Router /api/Order [get]
+// @Security Bearer
+func (e OrderController) GetPage(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderGetPageReq{}
+	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)
+
+	list := make([]model.Order, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取下单
+// @Summary 通过id获取下单
+// @Description 通过id获取下单
+// @Tags 订单
+// @Param id path string true "下单id"
+// @Success 200 {object} response.Response{data=model.Order} "{"code": 200, "data": [...]}"
+// @Router /api/Order/{id} [get]
+// @Security Bearer
+func (e OrderController) Get(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Order
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 下单
+// @Summary 下单
+// @Description 下单
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order [post]
+// @Security Bearer
+func (e OrderController) Insert(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改订单
+// @Summary 修改订单
+// @Description 修改订单
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderUpdateReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order [post]
+// @Security Bearer
+func (e OrderController) Update(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderUpdateReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "修改成功")
+}
+
+// Cancel 取消订单
+// @Summary 取消订单
+// @Description 取消订单
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderCancelReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order/cancel [post]
+// @Security Bearer
+func (e OrderController) Cancel(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderCancelReq{}
+	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)
+	// 设置创建人
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Cancel(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "取消成功")
+}
+
+// Delivery 派单
+// @Summary 派单
+// @Description 派单
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderDeliveryReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order [put]
+// @Security Bearer
+func (e OrderController) Delivery(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderDeliveryReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Delivery(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "派单成功")
+}
+
+// GetDeliveryPage 获取送气员订单列表
+// @Summary 获取送气员订单列表
+// @Description 获取送气员订单列表
+// @Tags 订单
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Order}} "{"code": 200, "data": [...]}"
+// @Router /api/order/delivery [get]
+// @Security Bearer
+func (e OrderController) GetDeliveryPage(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderGetDeliveryPageReq{}
+	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)
+
+	list := make([]model.Order, 0)
+	var count int64
+
+	err = s.GetDeliveryPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// UpdateState 修改订单状态
+// @Summary 修改订单状态
+// @Description 修改订单状态
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderUpdateStateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order/state [put]
+// @Security Bearer
+func (e OrderController) UpdateState(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderUpdateStateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.UpdateState(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "修改成功")
+}
+
+// Delete 删除
+// @Summary 删除
+// @Description 删除
+// @Tags 订单
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.OrderDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/order [put]
+// @Security Bearer
+func (e OrderController) Delete(c *gin.Context) {
+	s := service.Order{}
+	req := dto.OrderDeleteReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 102 - 0
app/admin/controller/real_fill_data.go

@@ -0,0 +1,102 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type RealFillDataController struct {
+	api.Api
+}
+
+// GetPage 获取上报实时充装数据
+// @Summary 获取上报实时充装数据
+// @Description 获取上报实时充装数据
+// @Tags 上报实时充装数据
+// @Param deptName query string false "上报实时充装数据名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.RealFillData}} "{"code": 200, "data": [...]}"
+// @Router /api/goods [get]
+// @Security Bearer
+func (e RealFillDataController) GetPage(c *gin.Context) {
+	s := service.RealFillData{}
+	req := dto.RealFillDataGetPageReq{}
+	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)
+
+	list := make([]model.RealFillData, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Insert 添加上报实时充装数据
+// @Summary 添加上报实时充装数据
+// @Description 添加上报实时充装数据
+// @Tags 上报实时充装数据
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.RealFillDataInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/goods [post]
+// @Security Bearer
+func (e RealFillDataController) Insert(c *gin.Context) {
+	s := service.RealFillData{}
+	fillGunSvc := service.FillGun{}
+
+	req := dto.RealFillDataInsertReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.JSON).
+		MakeService(&s.Service).
+		MakeService(&fillGunSvc.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	// 设置创建人
+	//p := actions.GetPermissionFromContext(c)
+	req.SetCreateBy(user.GetUserId(c))
+	//req.SetDeptId(p.DeptId)
+	// 获取充装枪信息
+	var fillGun model.FillGun
+
+	err = fillGunSvc.GetByCode(req.ScanGunCode, &fillGun)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	err = s.Insert(&req, fillGun)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}

+ 92 - 5
app/admin/controller/store.go

@@ -10,6 +10,9 @@ import (
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
 	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
+	"strconv"
+	"strings"
 )
 
 type StoreController struct {
@@ -18,9 +21,9 @@ type StoreController struct {
 
 // GetPage 获取销售门店列表
 // @Summary 获取销售门店列表
-// @Description 获取销售门店列表
+// @Description 获取销售门店列表(用户公司及子公司)
 // @Tags 销售门店
-// @Param deptName query string false "销售门店名称"
+// @Param name query string false "销售门店名称"
 // @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDept}} "{"code": 200, "data": [...]}"
 // @Router /api/store [get]
 // @Security Bearer
@@ -52,6 +55,91 @@ func (e StoreController) GetPage(c *gin.Context) {
 	e.OK(list, "查询成功")
 }
 
+// GetDeliveryPage 获取配送门店列表
+// @Summary 获取配送门店列表
+// @Description 获取配送门店列表(进入公司后的公司列表)
+// @Tags 销售门店
+// @Param name query string false "销售门店名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDept}} "{"code": 200, "data": [...]}"
+// @Router /api/store/delivery [get]
+// @Security Bearer
+func (e StoreController) GetDeliveryPage(c *gin.Context) {
+	s := service.Store{}
+	req := dto.StoreGetPageReq{}
+	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)
+	req.DeptId = p.DeptId
+	req.Type = model.TypeStore
+	list := make([]model.SysDept, 0)
+	list, err = s.SetStorePage(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(list, "查询成功")
+}
+
+// GetAllPage 获取配送门店列表(根公司下所有公司)
+// @Summary 获取配送门店列表
+// @Description 获取配送门店列表(进入公司后的公司列表)
+// @Tags 销售门店
+// @Param name query string false "销售门店名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDept}} "{"code": 200, "data": [...]}"
+// @Router /api/store/delivery [get]
+// @Security Bearer
+func (e StoreController) GetAllPage(c *gin.Context) {
+	s := service.Store{}
+	req := dto.StoreGetPageReq{}
+	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
+	}
+
+	var dept model.SysDept
+	//数据权限检查
+	err = s.Get(&dto.StoreGetReq{
+		Id: user.GetDeptId(c),
+	}, &dept)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	deptId := user.GetDeptId(c)
+	deptIdList := strings.Split(strings.Trim(dept.Path, "/"), "/")
+	if len(deptIdList) > 1 {
+		deptId, _ = strconv.Atoi(deptIdList[1])
+	}
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	req.DeptId = deptId
+	req.Type = model.TypeStore
+	list := make([]model.SysDept, 0)
+	p.DeptId = deptId
+	list, err = s.SetStorePage(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(list, "查询成功")
+}
+
 // Get 通过id获取销售门店
 // @Summary 通过id获取销售门店
 // @Description 通过id获取销售门店
@@ -126,7 +214,6 @@ func (e StoreController) Insert(c *gin.Context) {
 // @Tags 销售门店
 // @Accept  application/json
 // @Product application/json
-// @Param id path string true "销售门店id"
 // @Param data body dto.StoreUpdateReq true "body"
 // @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
 // @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
@@ -238,8 +325,8 @@ func (e StoreController) Enter(c *gin.Context) {
 		return
 	}
 
-	err = e.Cache.Set(model.GetEnterDeptCacheKey(user.GetUserId(c)), req.GetId(), -1)
-	err = e.Cache.Set(model.GetEnterDeptNameCacheKey(user.GetUserId(c)), object.Name, -1)
+	err = e.Cache.Set(model.GetEnterDeptCacheKey(c), req.GetId(), int(config.JwtConfig.Timeout)+7200)
+	err = e.Cache.Set(model.GetEnterDeptNameCacheKey(c), object.Name, int(config.JwtConfig.Timeout)+7200)
 	if err != nil {
 		e.Logger.Error(err)
 		e.Error(500, err, "进入失败")

+ 0 - 315
app/admin/controller/sys_config.go

@@ -1,315 +0,0 @@
-package controller
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
-	"gogs.baozhida.cn/zoie/OAuth-core/api"
-	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
-
-	"gas-cylinder-api/app/admin/model"
-	"gas-cylinder-api/app/admin/service"
-	"gas-cylinder-api/app/admin/service/dto"
-	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
-)
-
-type SysConfig struct {
-	api.Api
-}
-
-// GetPage 获取配置管理列表
-// @Summary 获取配置管理列表
-// @Description 获取配置管理列表
-// @Tags 配置管理
-// @Param configName query string false "名称"
-// @Param configKey query string false "key"
-// @Param configType query string false "类型"
-// @Param isFrontend query int false "是否前端"
-// @Param pageSize query int false "页条数"
-// @Param pageIndex query int false "页码"
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysConfig}} "{"code": 200, "data": [...]}"
-// @Router /api/sys-config [get]
-// @Security Bearer
-func (e SysConfig) GetPage(c *gin.Context) {
-	s := service.SysConfig{}
-	req := dto.SysConfigGetPageReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	list := make([]model.SysConfig, 0)
-	var count int64
-	err = s.GetPage(&req, &list, &count)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
-}
-
-// Get 获取配置管理
-// @Summary 获取配置管理
-// @Description 获取配置管理
-// @Tags 配置管理
-// @Param id path string false "id"
-// @Success 200 {object} response.Response{data=model.SysConfig} "{"code": 200, "data": [...]}"
-// @Router /api/sys-config/{id} [get]
-// @Security Bearer
-func (e SysConfig) Get(c *gin.Context) {
-	req := dto.SysConfigGetReq{}
-	s := service.SysConfig{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	var object model.SysConfig
-
-	err = s.Get(&req, &object)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(object, "查询成功")
-}
-
-// Insert 创建配置管理
-// @Summary 创建配置管理
-// @Description 创建配置管理
-// @Tags 配置管理
-// @Accept application/json
-// @Product application/json
-// @Param data body dto.SysConfigControl true "body"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "创建成功"}"
-// @Router /api/sys-config [post]
-// @Security Bearer
-func (e SysConfig) Insert(c *gin.Context) {
-	s := service.SysConfig{}
-	req := dto.SysConfigControl{}
-	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
-	}
-	req.SetCreateBy(user.GetUserId(c))
-
-	err = s.Insert(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "创建成功")
-}
-
-// Update 修改配置管理
-// @Summary 修改配置管理
-// @Description 修改配置管理
-// @Tags 配置管理
-// @Accept application/json
-// @Product application/json
-// @Param data body dto.SysConfigControl true "body"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
-// @Router /api/sys-config/{id} [put]
-// @Security Bearer
-func (e SysConfig) Update(c *gin.Context) {
-	s := service.SysConfig{}
-	req := dto.SysConfigControl{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil, binding.JSON).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Update(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "更新成功")
-}
-
-// Delete 删除配置管理
-// @Summary 删除配置管理
-// @Description 删除配置管理
-// @Tags 配置管理
-// @Param ids body []int false "ids"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}"
-// @Router /api/sys-config [delete]
-// @Security Bearer
-func (e SysConfig) Delete(c *gin.Context) {
-	s := service.SysConfig{}
-	req := dto.SysConfigDeleteReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-
-	err = s.Remove(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "删除成功")
-}
-
-// Get2SysApp 获取系统配置信息
-// @Summary 获取系统前台配置信息,主要注意这里不在验证权限
-// @Description 获取系统配置信息,主要注意这里不在验证权限
-// @Tags 配置管理
-// @Success 200 {object} response.Response{data=map[string]string} "{"code": 200, "data": [...]}"
-// @Router /api/app-config [get]
-func (e SysConfig) Get2SysApp(c *gin.Context) {
-	req := dto.SysConfigGetToSysAppReq{}
-	s := service.SysConfig{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		return
-	}
-	// 控制只读前台的数据
-	req.IsFrontend = "1"
-	list := make([]model.SysConfig, 0)
-	err = s.GetWithKeyList(&req, &list)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	mp := make(map[string]string)
-	for i := 0; i < len(list); i++ {
-		key := list[i].ConfigKey
-		if key != "" {
-			mp[key] = list[i].ConfigValue
-		}
-	}
-	e.OK(mp, "查询成功")
-}
-
-// Get2Set 获取配置
-// @Summary 获取配置
-// @Description 界面操作设置配置值的获取
-// @Tags 配置管理
-// @Accept application/json
-// @Product application/json
-// @Success 200 {object} response.Response{data=map[string]interface{}}	"{"code": 200, "message": "获取成功"}"
-// @Router /api/set-config [get]
-// @Security Bearer
-func (e SysConfig) Get2Set(c *gin.Context) {
-	s := service.SysConfig{}
-	req := make([]dto.GetSetSysConfigReq, 0)
-	err := e.MakeContext(c).
-		MakeOrm().
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	err = s.GetForSet(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	m := make(map[string]interface{}, 0)
-	for _, v := range req {
-		m[v.ConfigKey] = v.ConfigValue
-	}
-	e.OK(m, "查询成功")
-}
-
-// Update2Set 设置配置
-// @Summary 设置配置
-// @Description 界面操作设置配置值
-// @Tags 配置管理
-// @Accept application/json
-// @Product application/json
-// @Param data body []dto.GetSetSysConfigReq true "body"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
-// @Router /api/set-config [put]
-// @Security Bearer
-func (e SysConfig) Update2Set(c *gin.Context) {
-	s := service.SysConfig{}
-	req := make([]dto.GetSetSysConfigReq, 0)
-	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
-	}
-
-	err = s.UpdateForSet(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK("", "更新成功")
-}
-
-// GetSysConfigByKEYForService 根据Key获取SysConfig的Service
-// @Summary 根据Key获取SysConfig的Service
-// @Description 根据Key获取SysConfig的Service
-// @Tags 配置管理
-// @Param configKey path string false "configKey"
-// @Success 200 {object} response.Response{data=dto.SysConfigByKeyReq} "{"code": 200, "data": [...]}"
-// @Router /api/configKey/{{configKey}} [get]
-// @Security Bearer
-func (e SysConfig) GetSysConfigByKEYForService(c *gin.Context) {
-	s := service.SysConfig{}
-	req := dto.SysConfigByKeyReq{}
-	resp := dto.GetSysConfigByKEYForServiceResp{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	err = s.GetWithKey(&req, &resp)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(resp, s.Msg)
-}

+ 0 - 221
app/admin/controller/sys_dict_data_controller.go

@@ -1,221 +0,0 @@
-package controller
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
-	"gogs.baozhida.cn/zoie/OAuth-core/api"
-	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
-
-	"gas-cylinder-api/app/admin/model"
-	"gas-cylinder-api/app/admin/service"
-	"gas-cylinder-api/app/admin/service/dto"
-	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
-)
-
-type SysDictDataController struct {
-	api.Api
-}
-
-// GetPage 获取字典数据列表
-// @Summary 获取字典数据列表
-// @Description 获取字典数据列表
-// @Tags 字典数据
-// @Param status query string false "status"
-// @Param dictCode query string false "dictCode"
-// @Param dictType query string false "dictType"
-// @Param pageSize query int false "页条数"
-// @Param pageIndex query int false "页码"
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDictData}} "{"code": 200, "data": [...]}"
-// @Router /api/dict/data [get]
-// @Security Bearer
-func (e SysDictDataController) GetPage(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataGetPageReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	list := make([]model.SysDictData, 0)
-	var count int64
-	err = s.GetPage(&req, &list, &count)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
-}
-
-// Get 通过id获取字典数据
-// @Summary 通过id获取字典数据
-// @Description 通过id获取字典数据
-// @Tags 字典数据
-// @Param dictCode path int true "字典编码"
-// @Success 200 {object} response.Response{data=model.SysDictData} "{"code": 200, "data": [...]}"
-// @Router /api/dict/data/{dictCode} [get]
-// @Security Bearer
-func (e SysDictDataController) Get(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataGetReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	var object model.SysDictData
-
-	err = s.Get(&req, &object)
-	if err != nil {
-		e.Logger.Warnf("Get error: %s", err.Error())
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(object, "查询成功")
-}
-
-// Insert 添加字典数据
-// @Summary 添加字典数据
-// @Description 添加字典数据
-// @Tags 字典数据
-// @Accept  application/json
-// @Product application/json
-// @Param data body dto.SysDictDataInsertReq true "data"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "添加成功"}"
-// @Router /api/dict/data [post]
-// @Security Bearer
-func (e SysDictDataController) Insert(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataInsertReq{}
-	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
-	}
-	req.SetCreateBy(user.GetUserId(c))
-	err = s.Insert(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(req.GetId(), "创建成功")
-}
-
-// Update 修改字典数据
-// @Summary 修改字典数据
-// @Description 修改字典数据
-// @Tags 字典数据
-// @Accept  application/json
-// @Product application/json
-// @Param dictCode path int true "字典编码"
-// @Param data body dto.SysDictDataUpdateReq true "body"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
-// @Router /api/dict/data/{dictCode} [put]
-// @Security Bearer
-func (e SysDictDataController) Update(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataUpdateReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Update(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "更新成功")
-}
-
-// Delete 删除字典数据
-// @Summary 删除字典数据
-// @Description 删除字典数据
-// @Tags 字典数据
-// @Param dictCode body dto.SysDictDataDeleteReq true "body"
-// @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}"
-// @Router /api/dict/data [delete]
-// @Security Bearer
-func (e SysDictDataController) Delete(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataDeleteReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Remove(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "删除成功")
-}
-
-// GetAll 通过key获取数据字典【业务页面使用】
-// @Summary 通过key获取数据字典【业务页面使用】
-// @Description 通过key获取数据字典【业务页面使用】
-// @Tags 字典数据
-// @Param dictType query string true "dictType"
-// @Success 200 {object} response.Response{data=[]dto.SysDictDataGetAllResp}  "{"code": 200, "data": [...]}"
-// @Router /api/dict-data/option-select [get]
-// @Security Bearer
-func (e SysDictDataController) GetAll(c *gin.Context) {
-	s := service.SysDictDataService{}
-	req := dto.SysDictDataGetPageReq{}
-	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
-	}
-	list := make([]model.SysDictData, 0)
-	err = s.GetAll(&req, &list)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	l := make([]dto.SysDictDataGetAllResp, 0)
-	for _, i := range list {
-		d := dto.SysDictDataGetAllResp{}
-		e.Translate(i, &d)
-		l = append(l, d)
-	}
-
-	e.OK(l, "查询成功")
-}

+ 0 - 211
app/admin/controller/sys_dict_type_controller.go

@@ -1,211 +0,0 @@
-package controller
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
-	"gogs.baozhida.cn/zoie/OAuth-core/api"
-	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
-	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
-
-	"gas-cylinder-api/app/admin/model"
-	"gas-cylinder-api/app/admin/service"
-	"gas-cylinder-api/app/admin/service/dto"
-)
-
-type SysDictTypeController struct {
-	api.Api
-}
-
-// GetPage 获取字典类型列表
-// @Summary 字典类型列表数据
-// @Description 字典类型列表数据
-// @Tags 字典类型
-// @Param dictName query string false "dictName"
-// @Param dictId query string false "dictId"
-// @Param dictType query string false "dictType"
-// @Param pageSize query int false "页条数"
-// @Param pageIndex query int false "页码"
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDictType}} "{"code": 200, "data": [...]}"
-// @Router /api/dict/type [get]
-// @Security Bearer
-func (e SysDictTypeController) GetPage(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeGetPageReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	list := make([]model.SysDictType, 0)
-	var count int64
-	err = s.GetPage(&req, &list, &count)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
-}
-
-// Get 通过id获取字典类型
-// @Summary 通过id获取字典类型
-// @Description 通过id获取字典类型
-// @Tags 字典类型
-// @Param id path int true "字典类型id"
-// @Success 200 {object} response.Response{data=model.SysDictType} "{"code": 200, "data": [...]}"
-// @Router /api/dict/type/{id} [get]
-// @Security Bearer
-func (e SysDictTypeController) Get(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeGetReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	var object model.SysDictType
-	err = s.Get(&req, &object)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(object, "查询成功")
-}
-
-// Insert 创建字典类型
-// @Summary 添加字典类型
-// @Description 添加字典类型
-// @Tags 字典类型
-// @Accept  application/json
-// @Product application/json
-// @Param data body dto.SysDictTypeInsertReq true "data"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/dict/type [post]
-// @Security Bearer
-func (e SysDictTypeController) Insert(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeInsertReq{}
-	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
-	}
-	req.SetCreateBy(user.GetUserId(c))
-	err = s.Insert(&req)
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "创建成功")
-}
-
-// Update 修改字典类型
-// @Summary 修改字典类型
-// @Description 修改字典类型
-// @Tags 字典类型
-// @Accept  application/json
-// @Product application/json
-// @Param id path int true "字典类型id"
-// @Param data body dto.SysDictTypeUpdateReq true "body"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/dict/type/{id} [put]
-// @Security Bearer
-func (e SysDictTypeController) Update(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeUpdateReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Update(&req)
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "更新成功")
-}
-
-// Delete 删除字典类型
-// @Summary 删除字典类型
-// @Description 删除字典类型
-// @Tags 字典类型
-// @Param dictCode body dto.SysDictTypeDeleteReq true "body"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/dict/type [delete]
-// @Security Bearer
-func (e SysDictTypeController) Delete(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeDeleteReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Remove(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "删除成功")
-}
-
-// GetAll 字典类型查询【代码生成】
-// @Summary 字典类型查询【代码生成】
-// @Description 字典类型查询【代码生成】
-// @Tags 字典类型
-// @Param dictName query string false "dictName"
-// @Param dictId query string false "dictId"
-// @Param dictType query string false "dictType"
-// @Success 200 {object} response.Response{data=[]model.SysDictType}  "{"code": 200, "data": [...]}"
-// @Router /api/dict/type-option-select [get]
-// @Security Bearer
-func (e SysDictTypeController) GetAll(c *gin.Context) {
-	s := service.SysDictTypeService{}
-	req := dto.SysDictTypeGetPageReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	list := make([]model.SysDictType, 0)
-	err = s.GetAll(&req, &list)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(list, "查询成功")
-}

+ 3 - 3
app/admin/controller/sys_menu.go

@@ -4,6 +4,7 @@ import (
 	"gas-cylinder-api/app/admin/model"
 	"gas-cylinder-api/app/admin/service"
 	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin/binding"
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
@@ -118,7 +119,6 @@ func (e SysMenuController) Insert(c *gin.Context) {
 // @Tags 菜单
 // @Accept  application/json
 // @Product application/json
-// @Param id path string true "菜单id"
 // @Param data body dto.SysMenuUpdateReq true "body"
 // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
 // @Router /api/menu/{id} [put]
@@ -198,8 +198,8 @@ func (e SysMenuController) GetMenuRole(c *gin.Context) {
 		e.Error(500, err, err.Error())
 		return
 	}
-
-	result, err := s.SetMenuRole(user.GetRoleName(c))
+	p := actions.GetPermissionFromContext(c)
+	result, err := s.SetMenuRole(user.GetRoleKey(c), user.GetUserId(c), p)
 
 	if err != nil {
 		e.Error(500, err, err.Error())

+ 13 - 95
app/admin/controller/sys_role.go

@@ -1,19 +1,18 @@
 package controller
 
 import (
-	"gas-cylinder-api/common/actions"
-	"gas-cylinder-api/common/global"
-	"github.com/gin-gonic/gin"
-	"net/http"
-
 	"gas-cylinder-api/app/admin/model"
 	"gas-cylinder-api/app/admin/service"
 	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"gas-cylinder-api/common/global"
+	"github.com/gin-gonic/gin"
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
 	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
+	"net/http"
 
 	"github.com/gin-gonic/gin/binding"
 )
@@ -118,9 +117,11 @@ func (e SysRoleController) Insert(c *gin.Context) {
 		e.Error(500, err, err.Error())
 		return
 	}
+	p := actions.GetPermissionFromContext(c)
 
 	// 设置创建人
-	req.CreateBy = user.GetUserId(c)
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
 
 	err = s.Insert(&req)
 	if err != nil {
@@ -142,7 +143,6 @@ func (e SysRoleController) Insert(c *gin.Context) {
 // @Tags 角色
 // @Accept  application/json
 // @Product application/json
-// @Param id path string true "角色Id"
 // @Param data body dto.SysRoleUpdateReq true "body"
 // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
 // @Router /api/role/{id} [put]
@@ -171,12 +171,12 @@ func (e SysRoleController) Update(c *gin.Context) {
 		return
 	}
 
-	_, err = global.LoadPolicy(c)
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
+	//_, err = global.LoadPolicy(c)
+	//if err != nil {
+	//	e.Logger.Error(err)
+	//	e.Error(500, err, err.Error())
+	//	return
+	//}
 
 	e.OK(req.GetId(), "更新成功")
 }
@@ -233,85 +233,3 @@ func (e SysRoleController) Delete(c *gin.Context) {
 
 	e.OK(req.GetId(), "删除成功")
 }
-
-// UpdateRoleMenu 修改角色菜单权限
-// @Summary 修改角色菜单权限
-// @Description 修改角色菜单权限
-// @Tags 角色
-// @Accept  application/json
-// @Product application/json
-// @Param id path string true "角色Id"
-// @Param data body dto.SysRoleUpdateRoleMenuReq true "body"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/role-menu/{id} [put]
-// @Security Bearer
-func (e SysRoleController) UpdateRoleMenu(c *gin.Context) {
-	s := service.SysRole{}
-	req := dto.SysRoleUpdateRoleMenuReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil, binding.JSON).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.UpdateRoleMenu(&req)
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(req.GetId(), "更新角色路由权限成功")
-}
-
-// GetRoleMenu 修改角色菜单权限
-// @Summary 修改角色菜单权限
-// @Description 修改角色菜单权限
-// @Tags 角色
-// @Accept  application/json
-// @Product application/json
-// @Param id path string true "角色Id"
-// @Success 200 {object} response.Response{data=dto.SysRoleGetRoleMenuListResp} "{"code": 200, "data": [...]}"
-// @Router /api/role-menu/{id} [get]
-// @Security Bearer
-func (e SysRoleController) GetRoleMenu(c *gin.Context) {
-	req := dto.SysRoleGetRoleMenuListReq{}
-	m := service.SysMenu{}
-	r := service.SysRole{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		MakeService(&m.Service).
-		MakeService(&r.Service).
-		Bind(&req, nil).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	result, err := m.SetLabel()
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	menuIds := make([]int, 0)
-	if req.Id != 0 {
-		menuIds, err = r.GetRoleMenuId(req.Id)
-		if err != nil {
-			e.Error(500, err, "")
-			return
-		}
-	}
-	e.OK(gin.H{
-		"menus":       result,
-		"checkedKeys": menuIds,
-	}, "获取成功")
-}

+ 0 - 265
app/admin/controller/sys_service.go

@@ -1,265 +0,0 @@
-package controller
-
-import (
-	"gas-cylinder-api/app/admin/model"
-	"gas-cylinder-api/app/admin/service"
-	"gas-cylinder-api/app/admin/service/dto"
-	"gas-cylinder-api/common/actions"
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
-	"gogs.baozhida.cn/zoie/OAuth-core/api"
-	coreModel "gogs.baozhida.cn/zoie/OAuth-core/model"
-	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
-	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
-	"strconv"
-)
-
-type SysService struct {
-	api.Api
-}
-
-// GetPage 获取服务列表
-// @Summary 获取服务列表
-// @Description 获取服务列表
-// @Tags 服务
-// @Param name query string false "服务名称"
-// @Param status query int false "状态 1-停用 2-正常"
-// @Param pageSize query int false "页条数"
-// @Param pageIndex query int false "页码"
-// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysService}} "{"code": 200, "data": [...]}"
-// @Router /api/service [get]
-// @Security Bearer
-func (e SysService) GetPage(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServicePageReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.Form).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	list := make([]model.SysService, 0)
-	var count int64
-	//数据权限检查
-	p := actions.GetPermissionFromContext(c)
-	err = s.GetPage(&req, &list, &count, p)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
-}
-
-// Get 通过id获取服务
-// @Summary 通过id获取服务
-// @Description 通过id获取服务
-// @Tags 服务
-// @Param id path int true "服务id"
-// @Success 200 {object} response.Response{data=model.SysService} "{"code": 200, "data": [...]}"
-// @Router /api/service/{id} [get]
-// @Security Bearer
-func (e SysService) Get(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServiceGetReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	var object model.SysService
-	//数据权限检查
-	p := actions.GetPermissionFromContext(c)
-	err = s.Get(&req, &object, p)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(object, "查询成功")
-}
-
-// Insert 添加服务
-// @Summary 添加服务
-// @Description 添加服务
-// @Tags 服务
-// @Accept  application/json
-// @Product application/json
-// @Param data body dto.SysServiceInsertReq true "data"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/service [post]
-// @Security Bearer
-func (e SysService) Insert(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServiceInsertReq{}
-	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
-	}
-
-	req.SetCreateBy(user.GetUserId(c))
-	err = s.Insert(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "创建成功")
-}
-
-// Update 修改服务
-// @Summary 修改服务
-// @Description 修改服务
-// @Tags 服务
-// @Accept  application/json
-// @Product application/json
-// @Param id path int true "服务id"
-// @Param data body dto.SysServiceUpdateReq true "body"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/service/{id} [put]
-// @Security Bearer
-func (e SysService) Update(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServiceUpdateReq{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		Bind(&req, binding.JSON, nil).
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	req.SetUpdateBy(user.GetUserId(c))
-
-	err = s.Update(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "更新成功")
-}
-
-// Delete 删除服务
-// @Summary 删除服务
-// @Description 删除服务
-// @Tags 服务
-// @Accept  application/json
-// @Product application/json
-// @Param id body dto.SysServiceDeleteReq true "请求参数"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/service [delete]
-// @Security Bearer
-func (e SysService) Delete(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServiceDeleteReq{}
-
-	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
-	}
-
-	req.SetUpdateBy(user.GetUserId(c))
-	err = s.Remove(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-	e.OK(req.GetId(), "删除成功")
-}
-
-// Discovery 服务发现
-// @Summary 服务发现
-// @Description 服务发现,服务主动推送到数据库保存,有则更新,没有则删除。
-// @Tags 服务
-// @Accept  application/json
-// @Product application/json
-// @Param data body dto.SysServiceDiscoveryReq true "data"
-// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
-// @Router /api/service-disco [post]
-func (e SysService) Discovery(c *gin.Context) {
-	s := service.SysService{}
-	req := dto.SysServiceDiscoveryReq{}
-	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
-	}
-	err = s.Discovery(&req)
-	if err != nil {
-		e.Error(500, err, err.Error())
-		return
-	}
-
-	e.OK(req.GetId(), "创建成功")
-}
-
-// UserInfo 服务获取用户信息
-// @Summary 服务获取用户信息
-// @Description 服务获取用户信息,验证登录
-// @Tags 服务
-// @Accept  application/json
-// @Product application/json
-// @Success 200 {object} response.Response{data=coreModel.UserInfo} "{"code": 200, "data": [...]}"
-// @Router /api/userinfo [get]
-func (e SysService) UserInfo(c *gin.Context) {
-	s := service.SysService{}
-	err := e.MakeContext(c).
-		MakeOrm().
-		MakeService(&s.Service).
-		Errors
-	if err != nil {
-		e.Logger.Error(err)
-		e.Error(500, err, err.Error())
-		return
-	}
-	info := coreModel.UserInfo{
-		Uuid:      user.GetUUID(c),
-		UserId:    user.GetUserId(c),
-		RoleId:    user.GetRoleId(c),
-		DeptId:    user.GetDeptId(c),
-		UserName:  user.GetUserName(c),
-		RoleName:  user.GetRoleName(c),
-		RoleKey:   user.GetRoleKey(c),
-		DataScope: user.GetDataScope(c),
-		DeptName:  user.GetDeptName(c),
-	}
-
-	if deptIdStr, err := e.Cache.Get(model.GetEnterDeptCacheKey(user.GetUserId(c))); err == nil {
-		info.DeptId, _ = strconv.Atoi(deptIdStr)
-	}
-	if deptNameStr, err := e.Cache.Get(model.GetEnterDeptNameCacheKey(user.GetUserId(c))); err == nil {
-		info.DeptName = deptNameStr
-	}
-	e.Logger.Debug("info", info)
-
-	e.OK(info, "ok")
-}

+ 50 - 9
app/admin/controller/sys_user.go

@@ -19,7 +19,6 @@ import (
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/sms"
 	"golang.org/x/crypto/bcrypt"
 	"net/http"
-	"strconv"
 )
 
 // SysUser 定义用户控制器
@@ -71,6 +70,45 @@ func (e SysUser) GetPage(c *gin.Context) {
 	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
 }
 
+// GetDeliveryPage 获取送气员列表
+// @Summary 获取送气员列表
+// @Description 获取送气员列表
+// @Tags 用户
+// @Param pageSize query int false "页条数"
+// @Param pageIndex query int false "页码"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.SysUser}}  "{"code": 200, "data": [...]}"
+// @Router /api/sys-user/delivery [get]
+// @Security Bearer
+func (e SysUser) GetDeliveryPage(c *gin.Context) {
+	s := service.SysUser{}
+	req := dto.SysUserGetDeliveryPageReq{}
+	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)
+
+	list := make([]model.SysUser, 0)
+	var count int64
+
+	err = s.GetDeliveryPage(&req, nil, &list, &count)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
 // Get 通过id获取用户
 // @Summary 通过id获取用户
 // @Description 通过id获取用户
@@ -117,26 +155,30 @@ func (e SysUser) Get(c *gin.Context) {
 // @Security Bearer
 func (e SysUser) Insert(c *gin.Context) {
 	s := service.SysUser{}
+	roleSvc := service.SysRole{}
 	req := dto.SysUserInsertReq{}
 	err := e.MakeContext(c).
 		MakeOrm().
 		Bind(&req, binding.JSON).
 		MakeService(&s.Service).
+		MakeService(&roleSvc.Service).
 		Errors
 	if err != nil {
 		e.Logger.Error(err)
 		e.Error(500, err, err.Error())
 		return
 	}
-	deptId := user.GetDeptId(c)
 
-	if deptIdStr, err := e.Cache.Get(model.GetEnterDeptCacheKey(user.GetUserId(c))); err == nil {
-		deptId, _ = strconv.Atoi(deptIdStr)
+	p := actions.GetPermissionFromContext(c)
+	// 获取销售门店code
+	store, err := model.GetProvCode(p.DeptId)
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
 	}
-	req.DeptId = deptId
-	req.RoleId = 1
-	req.Status = "2"
-
+	req.DeptId = p.DeptId
+	req.ProvUser.CmpCode = store.CmpCode
 	// 设置创建人
 	req.SetCreateBy(user.GetUserId(c))
 	err = s.Insert(&req)
@@ -154,7 +196,6 @@ func (e SysUser) Insert(c *gin.Context) {
 // @Tags 用户
 // @Accept  application/json
 // @Product application/json
-// @Param id path int true "用户id"
 // @Param data body dto.SysUserUpdateReq true "body"
 // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
 // @Router /api/sys-user [put]

+ 3 - 4
app/admin/controller/truck_enterprise.go

@@ -10,6 +10,7 @@ import (
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
 	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
 )
 
 type TruckEnterpriseController struct {
@@ -40,7 +41,6 @@ func (e TruckEnterpriseController) GetPage(c *gin.Context) {
 
 	//数据权限检查
 	p := actions.GetPermissionFromContext(c)
-	p.DeptId = user.GetDeptId(c)
 	req.DeptId = user.GetDeptId(c)
 	req.Type = model.TypeTruckEnterprise
 	list := make([]model.SysDept, 0)
@@ -237,9 +237,8 @@ func (e TruckEnterpriseController) Enter(c *gin.Context) {
 		e.Error(500, err, err.Error())
 		return
 	}
-
-	err = e.Cache.Set(model.GetEnterDeptCacheKey(user.GetUserId(c)), req.GetId(), -1)
-	err = e.Cache.Set(model.GetEnterDeptNameCacheKey(user.GetUserId(c)), object.Name, -1)
+	err = e.Cache.Set(model.GetEnterDeptCacheKey(c), req.GetId(), int(config.JwtConfig.Timeout)+7200)
+	err = e.Cache.Set(model.GetEnterDeptNameCacheKey(c), object.Name, int(config.JwtConfig.Timeout)+7200)
 	if err != nil {
 		e.Logger.Error(err)
 		e.Error(500, err, "进入失败")

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

@@ -0,0 +1,68 @@
+package controller
+
+import (
+	"fmt"
+	"gas-cylinder-api/common/file_store"
+	"github.com/gin-gonic/gin"
+	"github.com/google/uuid"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"os"
+	"path/filepath"
+	"strings"
+	"time"
+)
+
+type UploadController struct {
+	api.Api
+}
+
+// FilesUpload 文件上传
+// @Summary 文件上传
+// @Description 文件上传
+// @Tags 工具
+// @Success 200 {object} response.Response{data=string,id=string,msg=string} "{"code": 200, "data": [...]}"
+// @Router /api/captcha [get]
+func (e UploadController) FilesUpload(c *gin.Context) {
+	err := e.MakeContext(c).Errors
+	if err != nil {
+		e.Error(500, err, "服务初始化失败!")
+		return
+	}
+
+	// 处理文件上传逻辑
+	file, err := c.FormFile("file")
+	//bizType := c.PostForm("bizType")
+	//correlationCode := c.PostForm("correlationCode")
+	uploadFileName := file.Filename          // 获取文件名
+	fileType := filepath.Ext(uploadFileName) // 获取文件类型(扩展名)
+	if err != nil {
+		c.JSON(400, gin.H{"error": err.Error()})
+		return
+	}
+	filePath := file_store.GetCurrentDirectory() + "/uploads/" + uploadFileName
+	err = c.SaveUploadedFile(file, filePath)
+	if err != nil {
+		c.JSON(400, gin.H{"error": err.Error()})
+		return
+	}
+
+	defer func() {
+		os.Remove(filePath)
+	}()
+
+	// TODO: 文件上传到省平台
+
+	filename := fmt.Sprintf("%s/%s%s", time.Now().Format("2006-01-02"), strings.Replace(uuid.New().String(), "-", "", -1), fileType)
+
+	err = file_store.QiniuFileStore.UpLoad(filename, filePath)
+	if err != nil {
+		c.JSON(400, gin.H{"error": "文件上传失败"})
+		return
+	}
+
+	e.Custom(gin.H{
+		"code": 200,
+		"data": filename,
+		"msg":  "success",
+	})
+}

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

@@ -0,0 +1,195 @@
+package controller
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+	"gogs.baozhida.cn/zoie/OAuth-core/api"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+)
+
+type WarehouseController struct {
+	api.Api
+}
+
+// GetPage 获取仓库列表
+// @Summary 获取仓库列表
+// @Description 获取仓库列表
+// @Tags 仓库
+// @Param deptName query string false "仓库名称"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.Warehouse}} "{"code": 200, "data": [...]}"
+// @Router /api/warehouse [get]
+// @Security Bearer
+func (e WarehouseController) GetPage(c *gin.Context) {
+	s := service.Warehouse{}
+	req := dto.WarehouseGetPageReq{}
+	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)
+
+	list := make([]model.Warehouse, 0)
+	var count int64
+
+	err = s.GetPage(&req, &list, &count, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// Get 通过id获取仓库
+// @Summary 通过id获取仓库
+// @Description 通过id获取仓库
+// @Tags 仓库
+// @Param id path string true "仓库id"
+// @Success 200 {object} response.Response{data=model.Warehouse} "{"code": 200, "data": [...]}"
+// @Router /api/warehouse/{id} [get]
+// @Security Bearer
+func (e WarehouseController) Get(c *gin.Context) {
+	s := service.Warehouse{}
+	req := dto.WarehouseGetReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.Warehouse
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.Get(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
+// Insert 添加仓库
+// @Summary 添加仓库
+// @Description 添加仓库
+// @Tags 仓库
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.WarehouseInsertReq true "data"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/warehouse [post]
+// @Security Bearer
+func (e WarehouseController) Insert(c *gin.Context) {
+	s := service.Warehouse{}
+	req := dto.WarehouseInsertReq{}
+	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)
+	// 设置创建人
+	req.SetCreateBy(user.GetUserId(c))
+	req.SetDeptId(p.DeptId)
+	err = s.Insert(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "创建成功")
+}
+
+// Update 修改仓库
+// @Summary 修改仓库
+// @Description 修改仓库
+// @Tags 仓库
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.WarehouseUpdateReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
+// @Router /api/warehouse [put]
+// @Security Bearer
+func (e WarehouseController) Update(c *gin.Context) {
+	s := service.Warehouse{}
+	req := dto.WarehouseUpdateReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	p := actions.GetPermissionFromContext(c)
+
+	req.SetUpdateBy(user.GetUserId(c))
+	err = s.Update(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "更新成功")
+}
+
+// Delete 删除仓库
+// @Summary 删除仓库
+// @Description 删除仓库
+// @Tags 仓库
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.WarehouseDeleteReq true "body"
+// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
+// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
+// @Router /api/warehouse [delete]
+// @Security Bearer
+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)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	//数据权限检查
+	p := actions.GetPermissionFromContext(c)
+	err = s.Remove(&req, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.GetId(), "删除成功")
+}

+ 28 - 0
app/admin/model/address.go

@@ -0,0 +1,28 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type Address struct {
+	model2.Model
+	CustomerId string `json:"customerId" gorm:"size:32;"` // 客户id
+	Name       string `json:"name" gorm:"size:32;"`       // 收货人名称
+	Phone      string `json:"phone" gorm:"size:32;"`      // 联系电话
+	City       string `json:"city" gorm:"size:6;"`        // 所在地市
+	Area       string `json:"area" gorm:"size:6;"`        // 所属区/县
+	Address    string `json:"address" gorm:"size:128"`    // 详细地址
+	model2.ControlBy
+	model2.ModelTime
+}
+
+func (Address) TableName() string {
+	return "address"
+}
+
+func (e *Address) Generate() model2.ActiveRecord {
+	o := *e
+	return &o
+}
+
+func (e *Address) GetId() interface{} {
+	return e.Id
+}

+ 13 - 0
app/admin/model/applet_customer.go

@@ -0,0 +1,13 @@
+package model
+
+import (
+	"github.com/dgrijalva/jwt-go"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
+)
+
+type CustomerClaims struct {
+	CustomerId string `json:"customerId"`
+	jwt.StandardClaims
+}
+
+var AppletCustomerSecret = []byte(config.JwtConfig.Secret)

+ 53 - 0
app/admin/model/car_info.go

@@ -0,0 +1,53 @@
+package model
+
+import (
+	"database/sql/driver"
+	"encoding/json"
+	model2 "gas-cylinder-api/common/model"
+)
+
+// 省平台运输企业
+type ProvCarInfo struct {
+	CarNo          string `json:"carNo" gorm:"size:32;" vd:"@:len($)>0;msg:'车牌号不能为空'"` // 车牌号
+	TransportTime  string `json:"transportTime" gorm:"size:10;" `                      // 道路运输证有效期
+	CarNumber      string `json:"carNumber" gorm:"size:32;"`                           // 道路运输证编号
+	CarLoadage     string `json:"carLoadage" gorm:"size:128;"`                         // 车辆核定载货量
+	CarNvq         string `json:"carNvq" gorm:"size:32;"`                              // 车辆资格证
+	TypeTransport  string `json:"typeTransport" gorm:"size:64;"`                       // 车辆运输类型
+	BusinessName   string `json:"businessName" gorm:"size:128;"`                       // 业户名称
+	ContactNumber  string `json:"contactNumber" gorm:"size:32;"`                       // 联系电话
+	IssueAuthority string `json:"issueAuthority" gorm:"size:128;"`                     // 发证机关
+	CmpCode        string `json:"cmpCode" gorm:"size:36;"`                             // 归属企业登记编号
+}
+type CarInfo struct {
+	model2.Model
+	CarNo            string           `json:"carNo" gorm:"size:32;"`   // 车牌号
+	CmpCode          string           `json:"cmpCode" gorm:"size:36;"` // 归属企业登记编号
+	ProvCarInfo      ProvCarInfo      `json:"provCarInfo"`
+	TruckUserCarInfo TruckUserCarInfo `json:"truckUserCarInfo"  gorm:"foreignkey:CarNo;references:CarNo"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (CarInfo) TableName() string {
+	return "car_info"
+}
+
+func (e *CarInfo) Generate() model2.ActiveRecord {
+	o := *e
+	return &o
+}
+
+func (e *CarInfo) GetId() interface{} {
+	return e.Id
+}
+
+func (e ProvCarInfo) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+
+func (e *ProvCarInfo) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}

+ 44 - 0
app/admin/model/customer.go

@@ -0,0 +1,44 @@
+package model
+
+import (
+	model2 "gas-cylinder-api/common/model"
+)
+
+type ProvCustomer struct {
+	Id             string  `json:"id" gorm:"size:48"`              // 主键ID
+	PrincipalName  string  `json:"principalName" gorm:"size:128;"` // 负责人名字
+	PrincipalPhone string  `json:"principalPhone" gorm:"size:32;"` // 负责人电话
+	ShopName       string  `json:"shopName" gorm:"size:128;"`      // 商店名字
+	Address        string  `json:"address" gorm:"size:255;"`       // 地址
+	AddressImg     string  `json:"addressImg" gorm:"size:255;"`    // 现场图片
+	Lng            float64 `json:"lng" gorm:"size:9;"`             // 经度
+	Lat            float64 `json:"lat" gorm:"size:9;"`             // 纬度
+	Type           int     `json:"type" gorm:"size:4;"`            // 类型 0-商户 1-私人
+	City           string  `json:"city" gorm:"size:6;"`            // 所在地市
+	Area           string  `json:"area" gorm:"size:6;"`            // 所属区/县
+	Remark         string  `json:"remark" gorm:"size:255;"`        // 备注描述
+	StoreCode      string  `json:"storeCode" gorm:"size:48;"`      // 门店登记编号
+}
+type Customer struct {
+	ProvCustomer
+	IsSyncProv bool   `json:"isSyncProv"`                     // 是否同步到省平台
+	Openid     string `json:"openid"`                         // 微信id
+	State      int    `json:"state" gorm:"size:6;default:-1"` // 0-待整改 1-整改中 2-已整改 合格
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (Customer) TableName() string {
+	return "customer"
+}
+
+type CustomerOmit struct {
+	Id            string `json:"id,omitempty"`            // 主键ID
+	PrincipalName string `json:"principalName,omitempty"` // 负责人名字
+	Openid        string `json:"openid,omitempty"`        // 微信id
+}
+
+func (CustomerOmit) TableName() string {
+	return "customer"
+}

+ 17 - 0
app/admin/model/customer_gas_cylinder.go

@@ -0,0 +1,17 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type CustomerGasCylinder struct {
+	model2.Model
+	CustomerId string      `json:"id" gorm:"size:48"`         // 主键ID
+	InnerCode  string      `json:"innerCode" gorm:"size:48"`  // 钢瓶内编码
+	State      int         `json:"state" gorm:"size:48"`      // 钢瓶状态 1-在用 2-归还
+	BorrowTime model2.Time `json:"borrowTime" gorm:"size:48"` // 借用时间
+	ReturnTime model2.Time `json:"returnTime" gorm:"size:48"` // 归还时间
+	model2.ModelTime
+}
+
+func (CustomerGasCylinder) TableName() string {
+	return "customer_gas_cylinder"
+}

+ 29 - 0
app/admin/model/device.go

@@ -0,0 +1,29 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type Device struct {
+	model2.Model
+	ProvUserId  string      `json:"provUserId" gorm:"size:32;"`  // 省平台用户id
+	ProvCmpCode string      `json:"provCmpCode" gorm:"size:48;"` // 所属机构登记编
+	Sn          string      `json:"sn" gorm:"size:128;"`         // 设备sn
+	Type        int         `json:"type" gorm:"size:32;"`        // 1-手持枪 2-龙门
+	OptType     string      `json:"optType" gorm:"size:32;"`     // 操作类型
+	User        SysUserOmit `json:"user"  gorm:"foreignkey:ProvUserId;references:ProvUserId"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (Device) TableName() string {
+	return "device"
+}
+
+func (e *Device) Generate() model2.ActiveRecord {
+	o := *e
+	return &o
+}
+
+func (e *Device) GetId() interface{} {
+	return e.Id
+}

+ 18 - 0
app/admin/model/dispatch_cost.go

@@ -0,0 +1,18 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+// 派费
+type DispatchCost struct {
+	model2.Model
+	Name   string  `json:"name" gorm:"size:128"`    // 商品名称
+	Price  float64 `json:"price" gorm:"size:9;"`    // 价格
+	Remark string  `json:"remark" gorm:"size:255;"` // 备注
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (DispatchCost) TableName() string {
+	return "dispatch_cost"
+}

+ 66 - 0
app/admin/model/fill_check.go

@@ -0,0 +1,66 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type ProvFillCheck struct {
+	OperationLogId  string  `json:"operationLogId" gorm:"size:36"`                 // 操作记录Id,要求唯一	气瓶充装前后检查操作记录id,要求唯一性
+	StoreId         string  `json:"storeId" gorm:"size:36" swaggerignore:"true"`   // 所属单位(门市)	需要现在平台录入/接口平台上传后返回的对应id
+	InnerCode       string  `json:"innerCode" gorm:"size:36" swaggerignore:"true"` // 气瓶唯一性编码,单位内编号
+	DeadWeight      float64 `json:"deadWeight" gorm:"size:9"`                      // 气瓶自重(kg)
+	Color           string  `json:"color" gorm:"size:10"`                          // 颜色
+	Corrosion       int     `json:"corrosion" gorm:"size:4"`                       // 是否腐蚀	0-无 1-有
+	Crackle         int     `json:"crackle" gorm:"size:4"`                         // 是否有裂纹	0-无 1-有
+	Deform          int     `json:"deform" gorm:"size:4"`                          // 是否变形	0-无 1-有
+	Damage          int     `json:"damage" gorm:"size:4"`                          // 是否有损伤	0-无 1-有
+	SafeAnnex       int     `json:"safeAnnex" gorm:"size:4"`                       // 安全附件完好	0-完好 1-缺失
+	GasPressure     int     `json:"gasPressure" gorm:"size:4"`                     // 余压正常(或抽真空)	0-正常 1-不正常
+	PipePressure    float64 `json:"pipePressure" gorm:"size:9"`                    // 充装管道压力(MPa)
+	BodyDeform      int     `json:"bodyDeform" gorm:"size:4"`                      // 瓶体有无变形	0-无 1-有
+	FillingLeak     int     `json:"fillingLeak" gorm:"size:4"`                     // 充装过程有无泄漏	0-无 1-有
+	BodyTemperature int     `json:"bodyTemperature" gorm:"size:4"`                 // 瓶体温度正常	0-正常 1-不正常
+	FillWeight      float64 `json:"fillWeight" gorm:"size:9"`                      // 充装重量(kg)
+	RepeatWeight    float64 `json:"repeatWeight" gorm:"size:9"`                    // 复秤重量(kg)
+	FilledLeak      int     `json:"filledLeak" gorm:"size:4"`                      // 充装后有无泄漏	0-无 1-有
+	WarnSign        int     `json:"warnSign" gorm:"size:4"`                        // 警示标志完好	0-完好 1-缺失
+	FillLabel       int     `json:"fillLabel" gorm:"size:4"`                       // 充装标签完好	0-完好 1-缺失
+	Seal            int     `json:"seal" gorm:"size:4"`                            // 封口完好	0-完好 1-缺失
+	CreatorId       string  `json:"creatorId" gorm:"size:36" swaggerignore:"true"` // 创建人员id	需要现在平台录入/接口平台上传后返回的对应id
+}
+type FillCheck struct {
+	model2.Model
+	ProvFillCheck
+	UserId int         `json:"userId" gorm:"size:36"  swaggerignore:"true"` // 创建人员id
+	User   SysUserOmit `json:"user"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (FillCheck) TableName() string {
+	return "fill_check"
+}
+func (f FillCheck) GenProvFillCheck() (p ProvFillCheck) {
+	p.OperationLogId = f.OperationLogId
+	p.StoreId = f.StoreId
+	p.InnerCode = f.InnerCode
+	p.DeadWeight = f.DeadWeight
+	p.Color = f.Color
+	p.Corrosion = f.Corrosion
+	p.Crackle = f.Crackle
+	p.Deform = f.Deform
+	p.Damage = f.Damage
+	p.SafeAnnex = f.SafeAnnex
+	p.GasPressure = f.GasPressure
+	p.PipePressure = f.PipePressure
+	p.BodyDeform = f.BodyDeform
+	p.FillingLeak = f.FillingLeak
+	p.BodyTemperature = f.BodyTemperature
+	p.FillWeight = f.FillWeight
+	p.RepeatWeight = f.RepeatWeight
+	p.FilledLeak = f.FilledLeak
+	p.WarnSign = f.WarnSign
+	p.FillLabel = f.FillLabel
+	p.Seal = f.Seal
+	p.CreatorId = f.CreatorId
+	return
+}

+ 94 - 0
app/admin/model/fill_data.go

@@ -0,0 +1,94 @@
+package model
+
+import (
+	"database/sql/driver"
+	"encoding/json"
+	model2 "gas-cylinder-api/common/model"
+)
+
+type TbGasLog struct {
+	Id                string `json:"id" gorm:"size:36"`               // 主键	是	UUID
+	OrgHex            string `json:"orgHex" gorm:"size:128"`          // 源码字符串	是	充装枪上报源码
+	GunCode           string `json:"gunCode" gorm:"size:14"`          // 枪编码	是	需要现在平台录入/接口平台上传后返回的对应id
+	InnerCode         string `json:"innerCode" gorm:"size:36"`        // 气瓶唯一性编码,单位内编号	否	气瓶唯一编号
+	ChipId            string `json:"chipId" gorm:"size:14"`           // 气瓶标签ID	否
+	PersonCode        string `json:"personCode" gorm:"size:36"`       // 充装人员编码	否	需要先在平台录入/接口平台上传后返回的对应id
+	ChipContent       string `json:"chipContent" gorm:"size:200"`     // 标签内容	否
+	PersonFlag        int    `json:"personFlag" gorm:"size:4"`        // 是否绑定充装人员	否	0:false;1:true
+	ChipFlag          int    `json:"chipFlag" gorm:"size:4"`          // 是否读到标签	否	0:false;1:true
+	OpenStatus        int    `json:"openStatus" gorm:"size:4"`        // 阀开关状态	否	0:open;1:close
+	ReturnOpenStatus  int    `json:"returnOpenStatus" gorm:"size:4"`  // 返回开关状态	否	0:open;1:close
+	ReturnLightStatus int    `json:"returnLightStatus" gorm:"size:4"` // 返回灯状态,消息码	否
+	ReturnMsgId       int    `json:"returnMsgId" gorm:"size:4"`       // 返回消息ID	否
+	FillTime          int    `json:"fillTime" gorm:"size:4"`          // 充装时长	否	单位s
+	CreateTime        string `json:"createTime" gorm:"size:19"`       // 创建时间	否	格式:yyyy-MM-dd HH:mm:ss
+}
+
+type TbFillData struct {
+	FillId         string `json:"fillId" gorm:"size:36"`        // 主键 是
+	GunCode        string `json:"gunCode" gorm:"size:14"`       // 枪编码 是
+	StationId      string `json:"stationId" gorm:"size:36"`     // 气站ID 否
+	CompanyId      string `json:"companyId" gorm:"size:36"`     // 企业Id 否
+	Area           string `json:"area" gorm:"size:6"`           // 所在区 否
+	City           string `json:"city" gorm:"size:6"`           // 所在市 否
+	UserId         string `json:"userId" gorm:"size:36"`        // 充装工id 否
+	PersonCode     string `json:"personCode" gorm:"size:36"`    // 充装人员编码 否
+	InnerCode      string `json:"innerCode" gorm:"size:36"`     // 气瓶编号 否
+	ChipId         string `json:"chipId" gorm:"size:14"`        // 气瓶标签ID 否
+	ProductId      int    `json:"productId" gorm:"size:4"`      // 气瓶类型id 否
+	ProductMediaId int    `json:"productMediaId" gorm:"size:4"` // 充装介质id 否
+	ChipContent    string `json:"chipContent" gorm:"size:200"`  // 标签内容 否
+	FillTime       string `json:"fillTime" gorm:"size:19"`      // 充装时间 否 yyyy-MM-dd HH:mm:ss
+	FillDuration   int    `json:"fillDuration" gorm:"size:4"`   // 充装时长 否 单位s
+	CreateTime     string `json:"createTime" gorm:"size:19"`    // 创建时间 否 yyyy-MM-dd HH:mm:ss
+}
+
+type TbGasLogList []TbGasLog
+type TbFillDataList []TbFillData
+type FillData struct {
+	model2.Model
+	Status     int
+	GasLog     TbGasLog    `json:"gasLog"`
+	TbGasLog   TbGasLog    `json:"tbGasLog"`
+	TbFillData TbFillData  `json:"tbFillData"`
+	StationId  string      `json:"stationId" gorm:"size:36"` // 气站ID 否
+	CompanyId  string      `json:"companyId" gorm:"size:36"` // 企业Id 否
+	UserId     string      `json:"userId" gorm:"size:36"`    // 充装工id 否
+	User       SysUserOmit `json:"user" gorm:"foreignkey:UserId;references:ProvUserId"`
+	Station    SysDeptOmit `json:"station" gorm:"foreignkey:StationId;references:CmpCode"`
+	Company    SysDeptOmit `json:"company" gorm:"foreignkey:CompanyId;references:CmpCode"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+type FillDataDistinctStation struct {
+	StationId string      `json:"stationId" gorm:"size:36"` // 气站ID 否
+	Station   SysDeptOmit `json:"station" gorm:"foreignkey:StationId;references:CmpCode"`
+}
+type FillDataDistinctUser struct {
+	UserId string      `json:"userId" gorm:"size:36"` // 充装工id 否
+	User   SysUserOmit `json:"user" gorm:"foreignkey:UserId;references:ProvUserId"`
+}
+
+func (FillData) TableName() string {
+	return "fill_data"
+}
+
+func (e TbGasLog) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+
+func (e *TbGasLog) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}
+
+func (e TbFillData) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+
+func (e *TbFillData) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}

+ 29 - 0
app/admin/model/fill_gun.go

@@ -0,0 +1,29 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+// 充装枪
+type FillGun struct {
+	model2.Model
+	GunCode     string `json:"gunCode" gorm:"size:32;"`      // 充装枪编码
+	ScanGunCode string `json:"scanGunCode" gorm:"size:512;"` // 扫描枪编码
+	PersonCode  string `json:"personCode" gorm:"size:36;"`   // 充装人员编码
+	Remark      string `json:"remark" gorm:"size:128"`       // 备注
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+	Dept SysDept
+}
+
+func (FillGun) TableName() string {
+	return "fill_gun"
+}
+
+func (e *FillGun) Generate() model2.ActiveRecord {
+	o := *e
+	return &o
+}
+
+func (e *FillGun) GetId() interface{} {
+	return e.Id
+}

+ 72 - 0
app/admin/model/gas_cylinder.go

@@ -0,0 +1,72 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type ProvGasCylinder struct {
+	ProVariety        string `json:"pro_variety"`        // 设备品种
+	ProName           string `json:"pro_name"`           // 产品名称
+	ProNo             string `json:"pro_no"`             // 气瓶生产编号
+	FillMedia         int    `json:"fill_media"`         // 充装介质:0液化石油气,1二甲醚,2氧气,3二氧化碳,4溶解乙炔
+	MakeUnit          string `json:"make_unit"`          // 制造单位
+	MakeTime          string `json:"make_time"`          // 生产日期
+	WorkPressure      int    `json:"work_pressure"`      // 公称工作压口(MPa)
+	Volume            int    `json:"volume"`             // 容积(L)
+	CheckTime         string `json:"check_time"`         // 最近一次检验日期(新瓶该值填写出厂日期)
+	NextCheckTime     string `json:"next_check_time"`    // 下次检验日期(液化石油气瓶顺延4年气瓶下一次需要送检验站检验的日期)
+	RegistCode        string `json:"regist_code"`        // 气瓶使用登记代码
+	ChangeEvent       string `json:"change_event"`       // 变更情况(主要记录产权过户日志)
+	Memo              string `json:"memo"`               // 备注
+	InnerCode         string `json:"inner_code"`         // 单位内编号
+	StampMakeUnit     string `json:"stamp_make_unit"`    // 气瓶钢印制造单位名称
+	ProUuid           string `json:"pro_uuid"`           // 产品唯一性编码
+	ChipId            string `json:"chip_id"`            // 芯片id(每一个批次生成的登记证编号)
+	Location          string `json:"location"`           // 归属地(客户、门店、气站、检测机构): 0001 门店,0002 气站,0003 企业,0004 检验机构,005 移动库,006 客户
+	Status            string `json:"status"`             // 气瓶状态[在用(已检测)、停用(待检测)、报废]:submit新瓶提交,using在用(已检测),stop停用(待检测),scrapped报废
+	CheckOrganization string `json:"check_organization"` // 检测机构
+	EmptyBottle       bool   `json:"empty_bottle"`       // 是否空瓶:0是,1不是
+	ProductId         string `json:"product_id"`         // 产品类型ID
+	Uid               string `json:"uid"`                // 高频编码
+	Tid               string `json:"tid"`                // 超高频编码
+	ChipStatus        bool   `json:"chip_status"`        // 是否改造:0未改造,1已改造
+	LocationSourceId  string `json:"location_source_id"` // 当前归属机构ID
+	IsLose            bool   `json:"is_lose"`            // 是否丢失:0丢失,1未丢失
+	OldBottle         bool   `json:"old_bottle"`         // 是否旧瓶
+	DesignThickness   int    `json:"design_thickness"`   // 设计壁厚
+	ResultCode        string `json:"result_code"`        // 检测结果
+	AuditRemark       string `json:"audit_remark"`       // 审批备注
+	DeadlineTime      string `json:"deadline_time"`      // 使用年限
+	CheckInTime       string `json:"check_in_time"`      // 录入日期
+	ScrapTime         string `json:"scrap_time"`         // 报废日期
+	AnalysisStatus    string `json:"analysis_status"`    // 统计状态值:inform已提交待审批,using在用,scrapped报废
+	CheckStatus       bool   `json:"check_status"`       // 1已证,0未证
+	OperationId       string `json:"operation id"`       // 操作人id
+	OperationTime     string `json:"operation time"`     // 操作时间
+	SafeEvaluate      bool   `json:"safe_evaluate"`      // 安全评定
+}
+
+type GasCylinder struct {
+	model2.Model
+	ProVariety    string `json:"pro_variety"`     // 设备品种
+	ProName       string `json:"pro_name"`        // 产品名称
+	ProNo         string `json:"pro_no"`          // 气瓶生产编号
+	FillMedia     int    `json:"fill_media"`      // 充装介质:0液化石油气,1二甲醚,2氧气,3二氧化碳,4溶解乙炔
+	MakeUnit      string `json:"make_unit"`       // 制造单位
+	MakeTime      string `json:"make_time"`       // 生产日期
+	WorkPressure  int    `json:"work_pressure"`   // 公称工作压口(MPa)
+	Volume        int    `json:"volume"`          // 容积(L)
+	CheckTime     string `json:"check_time"`      // 最近一次检验日期(新瓶该值填写出厂日期)
+	NextCheckTime string `json:"next_check_time"` // 下次检验日期(液化石油气瓶顺延4年气瓶下一次需要送检验站检验的日期)
+	InnerCode     string `json:"inner_code"`      // 单位内编号
+	ProUuid       string `json:"pro_uuid"`        // 产品唯一性编码
+	Uid           string `json:"uid"`             // 高频编码
+	ProductId     string `json:"product_id"`      // 产品类型ID
+	DeadlineTime  string `json:"deadline_time"`   // 使用年限
+	CheckInTime   string `json:"check_in_time"`   // 录入日期
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (GasCylinder) TableName() string {
+	return "gas_cylinder"
+}

+ 17 - 0
app/admin/model/gas_cylinder_spec.go

@@ -0,0 +1,17 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+// 钢瓶规格
+type GasCylinderSpec struct {
+	model2.Model
+	Name   string `json:"name" gorm:"size:128"`    // 钢瓶规格
+	Remark string `json:"remark" gorm:"size:255;"` // 备注
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (GasCylinderSpec) TableName() string {
+	return "gas_cylinder_spec"
+}

+ 23 - 0
app/admin/model/goods.go

@@ -0,0 +1,23 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+// 商品管理
+type Goods struct {
+	model2.Model
+	Name          string      `json:"name" gorm:"size:128"`          // 商品名称
+	Price         float64     `json:"price" gorm:"size:9;"`          // 经度
+	MediaType     string      `json:"mediaType" gorm:"size:128"`     // 介质类型
+	IsShow        bool        `json:"isShow" gorm:"size:1"`          // 是否显示
+	ShowStartTime model2.Time `json:"showStartTime" gorm:"size:128"` // 展示开始时间
+	ShowEndTime   model2.Time `json:"showEndTime" gorm:"size:128"`   // 展示结束时间
+	Remark        string      `json:"remark" gorm:"size:255;"`       // 备注
+	Img           string      `json:"img" gorm:"size:255;"`          // 商品图片
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (Goods) TableName() string {
+	return "goods"
+}

+ 74 - 0
app/admin/model/inspect_record.go

@@ -0,0 +1,74 @@
+package model
+
+import (
+	"database/sql/driver"
+	"encoding/json"
+	model2 "gas-cylinder-api/common/model"
+)
+
+type inspectExpand struct {
+	InspectItem string `json:"inspectItem"`
+	ItemCode    string `json:"itemCode"`
+}
+
+type InspectExpandList []inspectExpand
+
+// 省平台入库安全检查
+type ProvInspectRecord struct {
+	OperationLogId    string            `json:"operationLogId" gorm:"size:36" swaggerignore:"true"` //操作记录Id,要求唯一
+	CustomerId        string            `json:"customerId" gorm:"size:36"`                          //客户ID
+	InspectorId       string            `json:"inspectorId" gorm:"size:36"  swaggerignore:"true"`   //检查人ID
+	UserId            int               `json:"userId" gorm:"size:36"  swaggerignore:"true"`        //检查人ID
+	HomeCheckImg      string            `json:"homeCheckImg" gorm:"type:text"`                      //入户检查图片
+	SignImg           string            `json:"signImg" gorm:"type:text"`                           //送气员签字图片
+	CustomerImg       string            `json:"customerImg" gorm:"type:text"`                       //客户签字图片
+	InspectTime       string            `json:"inspectTime" gorm:"size:19"  swaggerignore:"true"`   //检查时间
+	BeforeRectifyImg  string            `json:"beforeRectifyImg" gorm:"type:text"`                  //整改前图片
+	AfterRectifyImg   string            `json:"afterRectifyImg" gorm:"type:text"`                   //整改后图片
+	State             int               `json:"state" gorm:"size:4"`                                //状态 0-待整改 1-整改中 2-已整改
+	Remark            string            `json:"remark" gorm:"size:512"`                             //备注
+	CreatorId         string            `json:"creatorId" gorm:"size:36"  swaggerignore:"true"`     //创建人员id
+	InspectExpandList InspectExpandList `json:"inspectExpandList"`                                  //安全检查项目列表
+
+}
+type InspectRecord struct {
+	model2.Model
+	ProvInspectRecord
+	OrderId  string       `json:"orderId" gorm:"size:48"` // 订单id
+	Customer CustomerOmit `json:"customer"`
+	User     SysUserOmit  `json:"user"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (InspectRecord) TableName() string {
+	return "inspect_record"
+}
+
+func (e InspectExpandList) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+
+func (e *InspectExpandList) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}
+
+func (i InspectRecord) GenProvInspectRecord() (p ProvInspectRecord) {
+	p.OperationLogId = i.OperationLogId
+	p.CustomerId = i.CustomerId
+	p.InspectorId = i.InspectorId
+	p.UserId = i.UserId
+	p.HomeCheckImg = i.HomeCheckImg
+	p.SignImg = i.SignImg
+	p.CustomerImg = i.CustomerImg
+	p.InspectTime = i.InspectTime
+	p.BeforeRectifyImg = i.BeforeRectifyImg
+	p.AfterRectifyImg = i.AfterRectifyImg
+	p.State = i.State
+	p.Remark = i.Remark
+	p.CreatorId = i.CreatorId
+	p.InspectExpandList = i.InspectExpandList
+	return
+}

+ 66 - 0
app/admin/model/operation_log.go

@@ -0,0 +1,66 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type ProvOperationLog struct {
+	InnerCode          string `json:"innerCode" gorm:"size:36" vd:"len($)>0"` //气瓶唯一性编码,单位内编号
+	OptType            string `json:"optType" gorm:"size:4"`                  //气瓶流转步骤
+	OptTime            string `json:"optTime" gorm:"size:"`                   //操作时间
+	OptUser            string `json:"optUser" gorm:"size:36"`                 //操作人
+	Lng                string `json:"lng" gorm:"size:9"`                      //经度
+	Lat                string `json:"lat" gorm:"size:9"`                      //纬度
+	ObjectUser         string `json:"objectUser" gorm:"size:36"`              //交互工作人员ID
+	ObjectCustomer     string `json:"objectCustomer" gorm:"size:36"`          //交互客户ID
+	OptCustomer        string `json:"optCustomer" gorm:"size:36"`             //操作客户ID
+	CompanyId          string `json:"companyId" gorm:"size:36"`               //企业ID
+	CurrentEnterprise  string `json:"currentEnterprise" gorm:"size:36"`       //当前企业ID
+	CurrentStation     string `json:"currentStation" gorm:"size:36"`          //当前气站ID
+	CurrentInstitution string `json:"currentInstitution" gorm:"size:36"`      //当前检验ID
+	CurrentStore       string `json:"currentStore" gorm:"size:36"`            //当前门店ID
+	CurrentTruck       string `json:"currentTruck" gorm:"size:36"`            //当前司机ID
+	CurrentMotor       string `json:"currentMotor" gorm:"size:36"`            //当前车辆ID
+	CurrentAddress     string `json:"currentAddress" gorm:"size:36"`          //当前客户ID
+}
+
+type OperationLog struct {
+	model2.Model
+	ProvOperationLog
+	State                int          `json:"state" gorm:"size:36"` // 1 - 新循环 2-已完成
+	OptUserObj           SysUserOmit  `json:"optUserObj" gorm:"foreignkey:OptUser;references:ProvUserId"`
+	ObjectUserObj        SysUserOmit  `json:"objectUserObj" gorm:"foreignkey:ObjectUser;references:ProvUserId"`
+	ObjectCustomerObj    CustomerOmit `json:"objectCustomerObj" gorm:"foreignkey:ObjectCustomer;references:Id"`
+	OptCustomerObj       CustomerOmit `json:"optCustomerObj" gorm:"foreignkey:OptCustomer;references:Id"`
+	CompanyObj           SysDeptOmit  `json:"companyObj"  gorm:"foreignkey:CompanyId;references:CmpCode"`
+	CurrentEnterpriseObj SysDeptOmit  `json:"currentEnterpriseObj"  gorm:"foreignkey:CurrentEnterprise;references:CmpCode"`
+	CurrentStationObj    SysDeptOmit  `json:"currentStationObj"  gorm:"foreignkey:CurrentStation;references:CmpCode"`
+	CurrentStoreObj      SysDeptOmit  `json:"currentStoreObj"  gorm:"foreignkey:CurrentStore;references:CmpCode"`
+	CurrentTruckObj      SysUserOmit  `json:"currentTruckObj" gorm:"foreignkey:CurrentTruck;references:ProvUserId"`
+	CurrentAddressObj    CustomerOmit `json:"currentAddressObj" gorm:"foreignkey:CurrentAddress;references:Id"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (OperationLog) TableName() string {
+	return "operation_log"
+}
+func (f OperationLog) GenProvOperationLog() (p ProvOperationLog) {
+	p.InnerCode = f.InnerCode
+	p.OptType = f.OptType
+	p.OptTime = f.OptTime
+	p.OptUser = f.OptUser
+	p.Lng = f.Lng
+	p.Lat = f.Lat
+	p.ObjectUser = f.ObjectUser
+	p.ObjectCustomer = f.ObjectCustomer
+	p.OptCustomer = f.OptCustomer
+	p.CompanyId = f.CompanyId
+	p.CurrentEnterprise = f.CurrentEnterprise
+	p.CurrentStation = f.CurrentStation
+	p.CurrentInstitution = f.CurrentInstitution
+	p.CurrentStore = f.CurrentStore
+	p.CurrentTruck = f.CurrentTruck
+	p.CurrentMotor = f.CurrentMotor
+	p.CurrentAddress = f.CurrentAddress
+	return
+}

+ 53 - 0
app/admin/model/order.go

@@ -0,0 +1,53 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+var (
+	OrderStateOrder      = 1 // 已下单
+	OrderStateDelivery   = 2 // 已派单
+	OrderStateArrive     = 3 // 已送达
+	OrderStateCancel     = 4 // 已取消
+	OrderStateInDelivery = 5 // 配送中
+
+	OrderStateMap = map[int]string{
+		OrderStateOrder:      "已下单",
+		OrderStateDelivery:   "已派单",
+		OrderStateArrive:     "已送达",
+		OrderStateCancel:     "已取消",
+		OrderStateInDelivery: "配送中",
+	}
+)
+
+// 商品管理
+type Order struct {
+	model2.Model
+	OrderId      string          `json:"orderId"  gorm:"size:48"` // 订单id
+	CustomerId   string          `json:"customerId"  gorm:"size:48"`
+	Address      string          `json:"address" gorm:"size:128"`      // 客户地址
+	Phone        string          `json:"phone" gorm:"size:128"`        // 客户电话
+	StoreId      int             `json:"storeId"`                      // 配送门店ID
+	UserId       int             `json:"userId"`                       // 配送人员ID
+	GoodsId      int             `json:"goodsId"`                      // 商品ID
+	SpecId       int             `json:"specId"`                       // 规格ID
+	Quantity     int             `json:"quantity" gorm:"size:12"`      // 数量
+	Source       int             `json:"source" gorm:"size:12"`        // 来源 1-坐席下单 2-小程序
+	State        int             `json:"state" gorm:"size:12"`         // 状态 1-已下单 2-已派单-未配送 3-已送达 4-已取消 5-配送中
+	Remark       string          `json:"remark" gorm:"size:1024"`      // 备注
+	OrderTime    model2.Time     `json:"orderTime" gorm:"size:128"`    // 下单时间
+	DeliveryTime model2.Time     `json:"deliveryTime" gorm:"size:128"` // 配送时间
+	ArriveTime   model2.Time     `json:"arriveTime" gorm:"size:128"`   // 送达时间
+	CancelTime   model2.Time     `json:"cancelTime" gorm:"size:128"`   // 取消时间
+	Customer     CustomerOmit    `json:"customer"`
+	Store        SysDeptOmit     `json:"store"`
+	User         SysUserOmit     `json:"user"`
+	Goods        Goods           `json:"goods"`
+	Spec         GasCylinderSpec `json:"spec"`
+	Dept         SysDeptOmit     `json:"dept"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (Order) TableName() string {
+	return "order"
+}

+ 41 - 0
app/admin/model/real_fill_data.go

@@ -0,0 +1,41 @@
+package model
+
+import (
+	model2 "gas-cylinder-api/common/model"
+)
+
+// 省平台上报实时充装数据
+type ProvRealFillData struct {
+	OrgHex      string `json:"orgHex" gorm:"size:128"`      // 源码字符串
+	GunCode     string `json:"gunCode" gorm:"size:14"`      // 枪编码
+	PersonFlag  int    `json:"personFlag" gorm:"size:4"`    // 是否绑定充装人员 是
+	ChipFlag    int    `json:"chipFlag" gorm:"size:4"`      // 是否读到气瓶标签 是
+	OpenStatus  int    `json:"openStatus" gorm:"size:4"`    // 枪开关状态 暂时获取不到
+	PersonCode  string `json:"personCode" gorm:"size:36"`   // 充装人员编码
+	ChipContent string `json:"chipContent" gorm:"size:200"` // 标签内容编码
+	ChipID      string `json:"chipID" gorm:"size:14"`       // 标签ID
+}
+type RealFillData struct {
+	model2.Model
+	ProvRealFillData
+	FillGun FillGun `json:"fillGun" gorm:"foreignkey:GunCode;references:GunCode"`
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (RealFillData) TableName() string {
+	return "real_fill_data"
+}
+
+func (i RealFillData) GenProvRealFillData() (p ProvRealFillData) {
+	p.OrgHex = i.OrgHex
+	p.GunCode = i.GunCode
+	p.PersonFlag = i.PersonFlag
+	p.ChipFlag = i.ChipFlag
+	p.OpenStatus = i.OpenStatus
+	p.PersonCode = i.PersonCode
+	p.ChipContent = i.ChipContent
+	p.ChipID = i.ChipID
+	return
+}

+ 0 - 29
app/admin/model/sys_config.go

@@ -1,29 +0,0 @@
-package model
-
-import (
-	model2 "gas-cylinder-api/common/model"
-)
-
-type SysConfig struct {
-	model2.Model
-	ConfigName  string `json:"configName" gorm:"size:128;comment:ConfigName"`   // 配置名称
-	ConfigKey   string `json:"configKey" gorm:"size:128;comment:ConfigKey"`     //  配置Key
-	ConfigValue string `json:"configValue" gorm:"size:255;comment:ConfigValue"` //   配置值
-	IsFrontend  string `json:"isFrontend" gorm:"size:64;comment:是否前台"`          //是否前台展示
-	Remark      string `json:"remark" gorm:"size:128;comment:Remark"`           //
-	model2.ControlBy
-	model2.ModelTime
-}
-
-func (SysConfig) TableName() string {
-	return "sys_config"
-}
-
-func (e *SysConfig) Generate() model2.ActiveRecord {
-	o := *e
-	return &o
-}
-
-func (e *SysConfig) GetId() interface{} {
-	return e.Id
-}

+ 108 - 59
app/admin/model/sys_dept.go

@@ -6,8 +6,14 @@ import (
 	"errors"
 	"fmt"
 	model2 "gas-cylinder-api/common/model"
+	"github.com/gin-gonic/gin"
+	log "gogs.baozhida.cn/zoie/OAuth-core/logger"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
+	"strings"
+
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
 	"gorm.io/gorm"
-	"time"
 )
 
 const (
@@ -16,64 +22,63 @@ const (
 )
 
 // 省平台运输企业
-type PROVTruckEnterprise struct {
-	SocialCode          string `json:"socialCode,omitempty" gorm:"size:32;"`          // 社会信用代码
-	Name                string `json:"name,omitempty" gorm:"size:32;"`                // 企业名称
-	EnterPhone          string `json:"enterPhone,omitempty" gorm:"size:32;"`          // 企业联系电话
-	Address             string `json:"address,omitempty" gorm:"size:255;"`            // 联系地址
-	LicenceNo           string `json:"licenceNo,omitempty" gorm:"size:32;"`           // 运管许可证号
-	IssueAuthority      string `json:"issueAuthority,omitempty" gorm:"size:128;"`     // 发证单位
-	IssueTime           string `json:"issueTime,omitempty" gorm:"size:10;"`           // 发证日期
-	BusinessScope       string `json:"businessScope,omitempty" gorm:"size:255;"`      // 经营范围
-	QualifyImg          string `json:"qualifyImg,omitempty" gorm:"size:255;"`         // 资质图片
-	QualifyStartTime    string `json:"qualifyStartTime,omitempty" gorm:"size:10;"`    // 资质开始时间
-	QualifyEndTime      string `json:"qualifyEndTime,omitempty" gorm:"size:10;"`      // 资质截止时间
-	LegalPerson         string `json:"legalPerson,omitempty" gorm:"size:64;"`         // 法人代表
-	LegalPersonPhone    string `json:"legalPersonPhone,omitempty" gorm:"size:32;"`    // 法人代表电话
-	SecurityPerson      string `json:"securityPerson,omitempty" gorm:"size:64;"`      // 安全管理员
-	SecurityPersonPhone string `json:"securityPersonPhone,omitempty" gorm:"size:32;"` // 安全管理员电话
-	City                string `json:"city,omitempty" gorm:"size:6;"`                 // 所在地市
-	Area                string `json:"area,omitempty" gorm:"size:6;"`                 // 所在区/县
-	EnterAccount        string `json:"enterAccount,omitempty" gorm:"size:36;"`        // 账号 (非必填)
-	Remark              string `json:"remark,omitempty" gorm:"size:255;"`             // 备注 (非必填)
+type ProvTruckEnterprise struct {
+	SocialCode          string `json:"socialCode,omitempty" gorm:"size:32;"`                            // 社会信用代码
+	Name                string `json:"name,omitempty" gorm:"size:32;" vd:"@:len($)>0;msg:'运输企业名称不能为空'"` // 企业名称
+	EnterPhone          string `json:"enterPhone,omitempty" gorm:"size:32;"`                            // 企业联系电话
+	Address             string `json:"address,omitempty" gorm:"size:255;"`                              // 联系地址
+	LicenceNo           string `json:"licenceNo,omitempty" gorm:"size:32;"`                             // 运管许可证号
+	IssueAuthority      string `json:"issueAuthority,omitempty" gorm:"size:128;"`                       // 发证单位
+	IssueTime           string `json:"issueTime,omitempty" gorm:"size:10;"`                             // 发证日期
+	BusinessScope       string `json:"businessScope,omitempty" gorm:"size:255;"`                        // 经营范围
+	QualifyImg          string `json:"qualifyImg,omitempty" gorm:"size:255;"`                           // 资质图片
+	QualifyStartTime    string `json:"qualifyStartTime,omitempty" gorm:"size:10;"`                      // 资质开始时间
+	QualifyEndTime      string `json:"qualifyEndTime,omitempty" gorm:"size:10;"`                        // 资质截止时间
+	LegalPerson         string `json:"legalPerson,omitempty" gorm:"size:64;"`                           // 法人代表
+	LegalPersonPhone    string `json:"legalPersonPhone,omitempty" gorm:"size:32;"`                      // 法人代表电话
+	SecurityPerson      string `json:"securityPerson,omitempty" gorm:"size:64;"`                        // 安全管理员
+	SecurityPersonPhone string `json:"securityPersonPhone,omitempty" gorm:"size:32;"`                   // 安全管理员电话
+	City                string `json:"city,omitempty" gorm:"size:6;"`                                   // 所在地市
+	Area                string `json:"area,omitempty" gorm:"size:6;"`                                   // 所在区/县
+	EnterAccount        string `json:"enterAccount,omitempty" gorm:"size:36;"`                          // 账号 (非必填)
+	Remark              string `json:"remark,omitempty" gorm:"size:255;"`                               // 备注 (非必填)
 }
 
 // 省平台销售门店
-type PROVStore struct {
-	CmpCode        string  `json:"cmpCode,omitempty" gorm:"size:4;"`         // 所属企业登记编码(社会信用代码)
-	Name           string  `json:"name,omitempty" gorm:"size:128;"`          // 门店名称
-	Contact        string  `json:"contact,omitempty" gorm:"size:128;"`       // 联系人
-	ContactPhone   string  `json:"contactPhone,omitempty" gorm:"size:32;"`   // 联系人电话
-	City           string  `json:"city,omitempty" gorm:"size:6;"`            // 所在地市
-	District       string  `json:"district,omitempty" gorm:"size:6;"`        // 所在区/县
-	Address        string  `json:"address,omitempty" gorm:"size:128;"`       // 地址
-	Lng            float64 `json:"lng,omitempty" gorm:"size:9;"`             // 经度
-	Lat            float64 `json:"lat,omitempty" gorm:"size:9;"`             // 纬度
-	CertificateNo  string  `json:"certificateNo,omitempty" gorm:"size:32;"`  // 许可证编号
-	Type           int     `json:"type,omitempty" gorm:"size:4;"`            // 经营类别
-	BusinessArea   string  `json:"businessArea,omitempty" gorm:"size:128;"`  // 经营区域
-	LegalPerson    string  `json:"legalPerson,omitempty" gorm:"size:64;"`    // 法人姓名
-	IssueAuthority string  `json:"issueAuthority,omitempty" gorm:"size:64;"` // 发证部门
-	IssueTime      string  `json:"issueTime,omitempty" gorm:"size:10;"`      // 发证时间
-	StartTime      string  `json:"startTime,omitempty" gorm:"size:10;"`      // 开始时间
-	ExpireTime     string  `json:"expireTime,omitempty" gorm:"size:10;"`     // 证件有效期
-	Description    string  `json:"description,omitempty" gorm:"size:255;"`   // 描述
+type ProvStore struct {
+	CmpCode        string  `json:"cmpCode,omitempty" gorm:"size:4;"`                               // 所属企业登记编码(社会信用代码)
+	Name           string  `json:"name,omitempty" gorm:"size:128;" vd:"@:len($)>0;msg:'门店名称不能为空'"` // 门店名称
+	Contact        string  `json:"contact,omitempty" gorm:"size:128;"`                             // 联系人
+	ContactPhone   string  `json:"contactPhone,omitempty" gorm:"size:32;"`                         // 联系人电话
+	City           string  `json:"city,omitempty" gorm:"size:6;"`                                  // 所在地市
+	District       string  `json:"district,omitempty" gorm:"size:6;"`                              // 所在区/县
+	Address        string  `json:"address,omitempty" gorm:"size:128;"`                             // 地址
+	Lng            float64 `json:"lng,omitempty" gorm:"size:9;"`                                   // 经度
+	Lat            float64 `json:"lat,omitempty" gorm:"size:9;"`                                   // 纬度
+	CertificateNo  string  `json:"certificateNo,omitempty" gorm:"size:32;"`                        // 许可证编号
+	Type           int     `json:"type,omitempty" gorm:"size:4;"`                                  // 经营类别
+	BusinessArea   string  `json:"businessArea,omitempty" gorm:"size:128;"`                        // 经营区域
+	LegalPerson    string  `json:"legalPerson,omitempty" gorm:"size:64;"`                          // 法人姓名
+	IssueAuthority string  `json:"issueAuthority,omitempty" gorm:"size:64;"`                       // 发证部门
+	IssueTime      string  `json:"issueTime,omitempty" gorm:"size:10;"`                            // 发证时间
+	StartTime      string  `json:"startTime,omitempty" gorm:"size:10;"`                            // 开始时间
+	ExpireTime     string  `json:"expireTime,omitempty" gorm:"size:10;"`                           // 证件有效期
+	Description    string  `json:"description,omitempty" gorm:"size:255;"`                         // 描述
 }
 
 type SysDept struct {
 	model2.Model
-	ParentId            int                 `json:"parentId" gorm:""`                                               // 上级部门
-	Path                string              `json:"path" gorm:"size:255;" swaggerignore:"true"`                     // 路径
-	Name                string              `json:"name"  gorm:"size:128;"`                                         // 部门名称
-	Sort                int                 `json:"sort" gorm:"size:4;"`                                            // 排序
-	Status              int                 `json:"status" gorm:"size:4;"`                                          // 状态 1-停用 2-正常
-	ProvStore           PROVStore           `json:"store,omitempty" gorm:"type:json;comment:'省平台销售门店信息'"`           // 销售门店
-	ProvTruckEnterprise PROVTruckEnterprise `json:"truckEnterprise,omitempty" gorm:"type:json;comment:'省平台运输企业信息'"` // 运输企业
+	ParentId            int                 `json:"parentId" gorm:""`                                                 // 上级部门
+	Path                string              `json:"path,omitempty" gorm:"size:255;" swaggerignore:"true"`             // 路径
+	Name                string              `json:"name"  gorm:"size:128;"`                                           // 部门名称
+	Sort                int                 `json:"sort,omitempty" gorm:"size:4;"`                                    // 排序
+	Status              int                 `json:"status,omitempty" gorm:"size:4;"`                                  // 状态 1-停用 2-正常
+	ProvStore           ProvStore           `json:"provStore,omitempty" gorm:"type:json;comment:省平台销售门店信息"`           // 销售门店
+	ProvTruckEnterprise ProvTruckEnterprise `json:"provTruckEnterprise,omitempty" gorm:"type:json;comment:省平台运输企业信息"` // 运输企业
 	Children            []SysDept           `json:"children" gorm:"-"`
-	UploadTime          time.Time           `json:"uploadTime" gorm:"size:128;"` // 省平台上传时间
-	Type                int                 `json:"type" gorm:"size:4;"`         // 1-销售门店 2-运输企业
-	CmpCode             string              `json:"cmpCode" gorm:"size:128;"`    // 运输企业在省中心唯一编码
-	StoreCode           string              `json:"storeCode" gorm:"size:128;"`  //销售门店在省中心唯一编码
+	UploadTime          model2.Time         `json:"uploadTime,omitempty" gorm:"size:128;"` // 省平台上传时间
+	Type                int                 `json:"type,omitempty" gorm:"size:4;"`         // 1-销售门店 2-运输企业
+	CmpCode             string              `json:"cmpCode" gorm:"size:128;"`              // 省中心唯一编码
 	model2.ControlBy
 	model2.ModelTime
 }
@@ -82,6 +87,17 @@ func (SysDept) TableName() string {
 	return "sys_dept"
 }
 
+type SysDeptOmit struct {
+	Id      int    `json:"id,omitempty"`
+	Path    string `json:"path,omitempty"`    // 路径
+	Name    string `json:"name,omitempty"`    // 部门名称
+	CmpCode string `json:"cmpCode,omitempty"` // 省中心唯一编码
+}
+
+func (SysDeptOmit) TableName() string {
+	return "sys_dept"
+}
+
 func (e *SysDept) Generate() model2.ActiveRecord {
 	o := *e
 	return &o
@@ -91,21 +107,21 @@ func (e *SysDept) GetId() interface{} {
 	return e.Id
 }
 
-func (e PROVTruckEnterprise) Value() (driver.Value, error) {
+func (e ProvTruckEnterprise) Value() (driver.Value, error) {
 	d, err := json.Marshal(e)
 	return string(d), err
 }
 
-func (e *PROVTruckEnterprise) Scan(src interface{}) error {
+func (e *ProvTruckEnterprise) Scan(src interface{}) error {
 	return json.Unmarshal(src.([]byte), e)
 }
 
-func (e PROVStore) Value() (driver.Value, error) {
+func (e ProvStore) Value() (driver.Value, error) {
 	d, err := json.Marshal(e)
 	return string(d), err
 }
 
-func (e *PROVStore) Scan(src interface{}) error {
+func (e *ProvStore) Scan(src interface{}) error {
 	return json.Unmarshal(src.([]byte), e)
 }
 
@@ -116,9 +132,42 @@ func (e *SysDept) BeforeDelete(_ *gorm.DB) (err error) {
 	return
 }
 
-func GetEnterDeptCacheKey(userId int) string {
-	return fmt.Sprintf("enter-dept-%d", userId)
+func GetEnterDeptCacheKey(c *gin.Context) string {
+	userId := user.GetUserId(c)
+	tokenId := ""
+	list := strings.Split(c.Request.Header.Get("Authorization"), ".")
+	if len(list) > 0 {
+		tokenId = list[len(list)-1]
+	}
+
+	return fmt.Sprintf("enter-dept-%s-%d", tokenId, userId)
+}
+func GetEnterDeptNameCacheKey(c *gin.Context) string {
+	userId := user.GetUserId(c)
+	tokenId := ""
+	list := strings.Split(c.Request.Header.Get("Authorization"), ".")
+	if len(list) > 0 {
+		tokenId = list[len(list)-1]
+	}
+	return fmt.Sprintf("enter-dept-name-%s-%d", tokenId, userId)
 }
-func GetEnterDeptNameCacheKey(userId int) string {
-	return fmt.Sprintf("enter-dept-name-%d", userId)
+
+func GetProvCode(id int) (SysDept, error) {
+	var err error
+	var deptModel SysDept
+	//准备db
+	db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host)
+	if db == nil {
+		err = errors.New("db not exist")
+		log.Errorf("host[%s]'s %s", err.Error())
+		return deptModel, err
+	}
+	err = db.First(&deptModel, id).Error
+	if err != nil {
+		log.Errorf("db error: %s", err)
+		err = errors.New("获取企业信息失败")
+		return deptModel, err
+	}
+
+	return deptModel, nil
 }

+ 0 - 34
app/admin/model/sys_dict_data.go

@@ -1,34 +0,0 @@
-package model
-
-import (
-	model2 "gas-cylinder-api/common/model"
-)
-
-type SysDictData struct {
-	DictCode  int    `json:"dictCode" gorm:"primaryKey;column:dict_code;autoIncrement;comment:主键编码"`
-	DictSort  int    `json:"dictSort" gorm:"size:20;comment:DictSort"`
-	DictLabel string `json:"dictLabel" gorm:"size:128;comment:DictLabel"`
-	DictValue string `json:"dictValue" gorm:"size:255;comment:DictValue"`
-	DictType  string `json:"dictType" gorm:"size:64;comment:DictType"`
-	CssClass  string `json:"cssClass" gorm:"size:128;comment:CssClass"`
-	ListClass string `json:"listClass" gorm:"size:128;comment:ListClass"`
-	IsDefault string `json:"isDefault" gorm:"size:8;comment:IsDefault"`
-	Status    int    `json:"status" gorm:"size:4;not null;default:2;comment:状态"` // 1-停用 2-正常
-	Default   string `json:"default" gorm:"size:8;comment:Default"`
-	Remark    string `json:"remark" gorm:"size:255;comment:Remark"`
-	model2.ControlBy
-	model2.ModelTime
-}
-
-func (SysDictData) TableName() string {
-	return "sys_dict_data"
-}
-
-func (e *SysDictData) Generate() model2.ActiveRecord {
-	o := *e
-	return &o
-}
-
-func (e *SysDictData) GetId() interface{} {
-	return e.DictCode
-}

+ 0 - 28
app/admin/model/sys_dict_type.go

@@ -1,28 +0,0 @@
-package model
-
-import (
-	model2 "gas-cylinder-api/common/model"
-)
-
-type SysDictType struct {
-	ID       int    `json:"id" gorm:"primaryKey;column:dict_id;autoIncrement;comment:主键编码"`
-	DictName string `json:"dictName" gorm:"size:128;comment:DictName"`
-	DictType string `json:"dictType" gorm:"size:128;comment:DictType"`
-	Status   int    `json:"status" gorm:"size:4;not null;default:2;comment:状态"` // 1-停用 2-正常
-	Remark   string `json:"remark" gorm:"size:255;comment:Remark"`
-	model2.ControlBy
-	model2.ModelTime
-}
-
-func (SysDictType) TableName() string {
-	return "sys_dict_type"
-}
-
-func (e *SysDictType) Generate() model2.ActiveRecord {
-	o := *e
-	return &o
-}
-
-func (e *SysDictType) GetId() interface{} {
-	return e.ID
-}

+ 14 - 12
app/admin/model/sys_menu.go

@@ -6,18 +6,20 @@ import (
 
 type SysMenu struct {
 	model2.Model
-	ParentId int    `json:"parentId" gorm:"size:11;"`                    // 父id
-	Sort     int    `json:"sort" gorm:"size:4;"`                         // 排序
-	Visible  string `json:"visible" gorm:"size:1;"`                      // 1-显示 0-隐藏
-	MenuPath string `json:"paths" gorm:"size:128;" swaggerignore:"true"` //
-
-	Name       string `json:"name" gorm:"size:128;"`             // 菜单名称
-	MenuType   string `json:"menuType" gorm:"size:1;"`           // 菜单类型
-	Icon       string `json:"icon" gorm:"size:128;"`             // 图标
-	Component  string `json:"component" gorm:"size:255;"`        // 组件路径
-	IsFrame    string `json:"isFrame" gorm:"size:128;default:0"` // 是否外链 1-是 0-否
-	Path       string `json:"path" gorm:"size:128;"`             // 外链路由地址
-	Permission string `json:"permission" gorm:"size:255;"`       // 权限标识
+	ParentId   int    `json:"parentId" gorm:"size:11;"`                // 父id
+	Sort       int    `json:"sort" gorm:"size:4;"`                     // 排序
+	Visible    string `json:"visible" gorm:"size:1;default:1"`         // 1-显示 0-隐藏
+	MenuPath   string `json:"-" gorm:"size:128;" swaggerignore:"true"` // 菜单id路径 /0/1
+	Redirect   string `json:"redirect" gorm:"size:128;"`               // 重定向
+	Title      string `json:"title" gorm:"size:128;"`                  // 菜单名称
+	MenuType   string `json:"menuType" gorm:"size:1;"`                 // 菜单类型 M-目录 C-菜单 F-按钮
+	Icon       string `json:"icon" gorm:"size:128;"`                   // 图标
+	Component  string `json:"component" gorm:"size:255;"`              // 组件路径
+	IsFrame    string `json:"-" gorm:"size:128;default:0"`             // 是否外链 1-是 0-否
+	Path       string `json:"-" gorm:"size:128;"`                      // 后端路由地址
+	Name       string `json:"name" gorm:"size:255;"`                   // 路由名称
+	Permission string `json:"-" gorm:"size:255;"`                      // 权限标识
+	IsDept     int    `json:"-" gorm:"size:255;default:1"`             // 是否为企业菜单
 
 	Children []SysMenu `json:"children,omitempty" gorm:"-"`
 	model2.ControlBy

+ 2 - 2
app/admin/model/sys_opera_log.go

@@ -1,9 +1,9 @@
 package model
 
 import (
-	model2 "gas-cylinder-api/common/model"
 	"encoding/json"
 	"errors"
+	model2 "gas-cylinder-api/common/model"
 	log "gogs.baozhida.cn/zoie/OAuth-core/logger"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
@@ -74,7 +74,7 @@ func SaveOperaLog(message storage.Messager) (err error) {
 		return nil
 	}
 	// 外部调用获取身份信息,操作频繁,不做日志记录
-	if l.OperaUrl == "/api/service/userinfo" {
+	if l.OperaUrl == "/api/service/userinfo" || l.OperaUrl == "/api/upload" {
 		return nil
 	}
 	// 超出100个字符返回值截断

+ 16 - 1
app/admin/model/sys_role.go

@@ -11,8 +11,10 @@ import (
 type SysRole struct {
 	model2.Model
 	coreModel.Role
+	MenuIds []int `json:"menuIds" gorm:"-"`
 	model2.ControlBy
 	model2.ModelTime
+	model2.DeptBy
 }
 
 func (SysRole) TableName() string {
@@ -27,9 +29,22 @@ func (e *SysRole) Generate() model2.ActiveRecord {
 func (e *SysRole) GetId() interface{} {
 	return e.Id
 }
+
+var (
+	ErrForbidUpdateSysRole = errors.New("禁止修改系统角色")
+	ErrForbidDeleteSysRole = errors.New("禁止删除系统角色")
+)
+
 func (e *SysRole) BeforeDelete(_ *gorm.DB) (err error) {
 	if e.RoleKey == "admin" {
-		return errors.New("禁止删除系统角色")
+		return ErrForbidDeleteSysRole
+	}
+	return
+}
+
+func (e *SysRole) BeforeUpdate(_ *gorm.DB) (err error) {
+	if e.RoleKey == "admin" {
+		return ErrForbidUpdateSysRole
 	}
 	return
 }

+ 6 - 3
app/admin/model/sys_role_menu.go

@@ -1,9 +1,9 @@
 package model
 
 import (
-	model2 "gas-cylinder-api/common/model"
 	"encoding/json"
 	"errors"
+	model2 "gas-cylinder-api/common/model"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk"
 	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
 )
@@ -46,13 +46,16 @@ func DeleteAllRoleMenuCache() error {
 		return err
 	}
 	for _, role := range list {
-		_ = sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(role.RoleKey))
+		_ = sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(role.RoleKey) + "-0")
+		_ = sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(role.RoleKey) + "-1")
 	}
 	return nil
 }
 
 func DeleteRoleMenuCache(roleKey string) error {
-	return sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(roleKey))
+	err := sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(roleKey) + "-0")
+	err = sdk.Runtime.GetCacheAdapter().Del(GetRoleMenuCacheKey(roleKey) + "-1")
+	return err
 }
 
 func SetRoleMenuCache(roleKey string, menuList []SysMenu) error {

+ 0 - 30
app/admin/model/sys_service.go

@@ -1,30 +0,0 @@
-package model
-
-import (
-	model2 "gas-cylinder-api/common/model"
-)
-
-type SysService struct {
-	model2.Model
-	No         string `gorm:"size:8;not null;" json:"no"`                         // 服务编号
-	Name       string `gorm:"size:128;" json:"name"`                              // 服务名称
-	Host       string `gorm:"size:512;not null;comment:服务地址" json:"host"`         // 服务地址
-	AuthCode   string `gorm:"size:32;not null;comment:授权码" json:"authCode"`       // 授权码
-	Status     int    `gorm:"size:4;not null;default:2;comment:状态" json:"status"` // 状态 1-停用 2-正常
-	RoleApiUrl string `gorm:"size:128;" json:"roleApiUrl"`                        // 角色权限回调地址
-	model2.ControlBy
-	model2.ModelTime
-}
-
-func (SysService) TableName() string {
-	return "sys_service"
-}
-
-func (e *SysService) Generate() model2.ActiveRecord {
-	o := *e
-	return &o
-}
-
-func (e *SysService) GetId() interface{} {
-	return e.Id
-}

+ 110 - 22
app/admin/model/sys_user.go

@@ -1,39 +1,71 @@
 package model
 
 import (
+	"database/sql/driver"
+	"encoding/json"
 	"errors"
 	"fmt"
 	model2 "gas-cylinder-api/common/model"
-	"github.com/google/uuid"
+	log "gogs.baozhida.cn/zoie/OAuth-core/logger"
 	coreModel "gogs.baozhida.cn/zoie/OAuth-core/model"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk"
+	"gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
 	"golang.org/x/crypto/bcrypt"
 	"gorm.io/gorm"
 )
 
-type PROVUser struct {
-	UserId      string `json:"userId" gorm:"size:48;"`       // 用户ID
-	Name        string `json:"name" gorm:"size:128;"`        // 用户姓名
-	IdCard      string `json:"idCard" gorm:"size:32;"`       // 身份证号
-	No          string `json:"no" gorm:"size:32;"`           // 用户工号
-	Phone       string `json:"phone" gorm:"size:32;"`        // 联系电话
-	UserType    int    `json:"userType" gorm:"size:4;"`      // 用户类型
-	Description string `json:"description" gorm:"size:255;"` // 描述
-	HireStatus  string `json:"hireStatus" gorm:"size:64;"`   // 聘用状态
-	HireTime    string `json:"hireTime" gorm:"size:10;"`     // 聘用日期
-	Education   string `json:"education" gorm:"size:64;"`    // 教育程度
-	JobCategory string `json:"jobCategory" gorm:"size:64;"`  // 岗位类别
-	PersonQual  string `json:"personQual" gorm:"size:128;"`  // 资质
-	Isorders    int    `json:"isorders" gorm:"size:4;"`      // 用户类型
-	CmpCode     string `json:"cmpCode" gorm:"size:48;"`      // 所属机构登记编
+// 省平台用户
+type ProvUser struct {
+	UserId      string `json:"userId" gorm:"size:48;" swaggerignore:"true"` // 用户ID
+	Name        string `json:"name" gorm:"size:128;"`                       // 用户姓名
+	IdCard      string `json:"idCard" gorm:"size:32"`                       // 身份证号
+	No          string `json:"no" gorm:"size:32"`                           // 用户工号
+	Phone       string `json:"phone" gorm:"size:32"`                        // 联系电话
+	UserType    int    `json:"userType" gorm:"size:4"`                      // 用户类型 3-门店人员 4-货车司机 5-充装站人员
+	Description string `json:"description" gorm:"size:255"`                 // 描述
+	HireStatus  string `json:"hireStatus" gorm:"size:64"`                   // 聘用状态
+	HireTime    string `json:"hireTime" gorm:"size:10"`                     // 聘用日期
+	Education   string `json:"education" gorm:"size:64"`                    // 教育程度
+	JobCategory string `json:"jobCategory" gorm:"size:64"`                  // 岗位类别
+	PersonQual  string `json:"personQual" gorm:"size:128"`                  // 资质
+	Isorders    int    `json:"isorders" gorm:"size:4"`                      // 用户类型 0-送气员 1-库管 userType=3时必填
+	CmpCode     string `json:"cmpCode" gorm:"size:48"`                      // 所属机构登记编
 
 }
 
+// 送气人员绑定资质信息《燃气从业资格证》
+type ProvStoreUserBindCertificate struct {
+	UserId         string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID
+	CertificateNo  string `json:"certificateNo,omitempty" gorm:"size:32;"`               // 证书编号
+	Type           int    `json:"type,omitempty" gorm:"size:4;default:1"`                // 人员类型 1:运输、维护和抢修人员
+	IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:128;"`             // 发证机关
+	IssueTime      string `json:"issueTime,omitempty" gorm:"size:10;"`                   // 发证时间
+	ImgUrl         string `json:"imgUrl,omitempty" gorm:"size:255;"`                     // 资质图片URL地址
+	Remarks        string `json:"remarks,omitempty" gorm:"size:255;"`                    // 备注信息
+}
+
+// 货车司机绑定《道路运输从业人员从业资格证》信息
+type ProvTruckUserBindCertificate struct {
+	UserId         string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID
+	CertificateNo  string `json:"certificateNo,omitempty" gorm:"size:32;"`               // 证书编号
+	Type           int    `json:"type,omitempty" gorm:"size:4;default:1"`                // 从业资格类型 1:道路危险货物运输押运员
+	IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:64;"`              // 发证机关
+	IssueTime      string `json:"issueTime,omitempty" gorm:"size:10;"`                   // 发证时间
+	FirstIssueTime string `json:"firstIssueTime,omitempty" gorm:"size:10;"`              // 首次发证时间
+	ExpireTime     string `json:"expireTime,omitempty" gorm:"size:10;"`                  // 有效期
+	ImgUrl         string `json:"imgUrl,omitempty" gorm:"size:255;"`                     // 资质图片URL地址
+	Remarks        string `json:"remarks,omitempty" gorm:"size:255;"`                    // 备注信息
+}
+
 type SysUser struct {
 	model2.Model
 	coreModel.User
-	Dept     SysDept  `json:"dept" gorm:"-"`      // 部门
-	Role     SysRole  `json:"role" gorm:"-"`      // 角色
-	ProvUser PROVUser `json:"prov_user" gorm:"-"` // 省平台用户信息
+	Dept                         SysDept                      `json:"dept,omitempty"`               // 部门
+	Role                         SysRole                      `json:"role,omitempty"`               // 角色
+	ProvUser                     ProvUser                     `json:"provUser"`                     // 省平台用户信息
+	ProvUserId                   string                       `json:"provUserId" gorm:"size:48;"`   // 省平台用户id
+	ProvStoreUserBindCertificate ProvStoreUserBindCertificate `json:"provStoreUserBindCertificate"` // 送气人员绑定资质信息《燃气从业资格证》
+	ProvTruckUserBindCertificate ProvTruckUserBindCertificate `json:"provTruckUserBindCertificate"` // 货车司机绑定《道路运输从业人员从业资格证》信息
 	model2.ControlBy
 	model2.ModelTime
 }
@@ -41,11 +73,33 @@ type SysUser struct {
 func (SysUser) TableName() string {
 	return "sys_user"
 }
+func (e ProvUser) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
 
+func (e *ProvUser) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}
 func (e *SysUser) Generate() model2.ActiveRecord {
 	o := *e
 	return &o
 }
+func (e ProvStoreUserBindCertificate) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+func (e *ProvStoreUserBindCertificate) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}
+
+func (e ProvTruckUserBindCertificate) Value() (driver.Value, error) {
+	d, err := json.Marshal(e)
+	return string(d), err
+}
+func (e *ProvTruckUserBindCertificate) Scan(src interface{}) error {
+	return json.Unmarshal(src.([]byte), e)
+}
 
 func (e *SysUser) GetId() interface{} {
 	return e.Id
@@ -66,14 +120,18 @@ func (e *SysUser) Encrypt() (err error) {
 	}
 }
 
+var (
+	ErrForbidUpdateSysUser = errors.New("禁止修改系统用户")
+	ErrForbidDeleteSysUser = errors.New("禁止删除系统用户")
+)
+
 func (e *SysUser) BeforeCreate(_ *gorm.DB) error {
-	e.Uuid = uuid.NewString()
 	return e.Encrypt()
 }
 
 func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
 	if e.Username == "admin" {
-		return errors.New("禁止修改系统用户")
+		return ErrForbidUpdateSysUser
 	}
 	var err error
 	if e.Password != "" {
@@ -84,7 +142,7 @@ func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
 
 func (e *SysUser) BeforeDelete(_ *gorm.DB) error {
 	if e.Username == "admin" {
-		return errors.New("禁止删除系统用户")
+		return ErrForbidDeleteSysUser
 	}
 	return nil
 }
@@ -92,3 +150,33 @@ func (e *SysUser) BeforeDelete(_ *gorm.DB) error {
 func GetUserCacheKey(id int) string {
 	return fmt.Sprintf("oauth:user:%d", id)
 }
+
+func GetUserCode(id int) (SysUser, error) {
+	var err error
+	var userModel SysUser
+	//准备db
+	db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host)
+	if db == nil {
+		err = errors.New("db not exist")
+		log.Errorf("host[%s]'s %s", err.Error())
+		return userModel, err
+	}
+	err = db.First(&userModel, id).Error
+	if err != nil {
+		log.Errorf("db error: %s", err)
+		err = errors.New("获取用户信息失败")
+		return userModel, err
+	}
+
+	return userModel, nil
+}
+
+type SysUserOmit struct {
+	Id         int    `json:"id,omitempty"`         // 主键编码
+	NickName   string `json:"nickName,omitempty"`   // 昵称
+	ProvUserId string `json:"provUserId,omitempty"` // 省平台用户id
+}
+
+func (SysUserOmit) TableName() string {
+	return "sys_user"
+}

+ 15 - 0
app/admin/model/truck_user_car_info.go

@@ -0,0 +1,15 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+type TruckUserCarInfo struct {
+	model2.Model
+	ProvUserId string      `json:"provUserId" gorm:"size:48;"`  // 省平台用户id
+	CarNo      string      `json:"provCmpCode" gorm:"size:32;"` // 所属机构登记编
+	User       SysUserOmit `json:"user"  gorm:"foreignkey:ProvUserId;references:ProvUserId"`
+	model2.ModelTime
+}
+
+func (TruckUserCarInfo) TableName() string {
+	return "truck_user_car_info"
+}

+ 17 - 0
app/admin/model/warehouse.go

@@ -0,0 +1,17 @@
+package model
+
+import model2 "gas-cylinder-api/common/model"
+
+// 仓库
+type Warehouse struct {
+	model2.Model
+	Name    string `json:"name" gorm:"size:128"`     // 商品名称
+	Address string `json:"address" gorm:"size:255;"` // 地址
+	model2.ControlBy
+	model2.ModelTime
+	model2.DeptBy
+}
+
+func (Warehouse) TableName() string {
+	return "warehouse"
+}

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

@@ -0,0 +1,23 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"github.com/gin-gonic/gin"
+)
+
+func init() {
+	routerNoCheckRole = append(routerNoCheckRole, registerAddressRouter)
+}
+
+// 需认证的路由代码
+func registerAddressRouter(v1 *gin.RouterGroup) {
+	cont := controller.AddressController{}
+	r := v1.Group("/address").Use(AppletCunJWTMiddleware())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 88 - 0
app/admin/router/applet_customer.go

@@ -0,0 +1,88 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/app/admin/model"
+	"github.com/dgrijalva/jwt-go"
+	"github.com/gin-gonic/gin"
+	"net/http"
+	"strings"
+)
+
+func init() {
+	routerNoCheckRole = append(routerNoCheckRole, registerAppletCustomerRouter)
+}
+
+func AppletCunJWTMiddleware() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		tokenString := c.GetHeader("Authorization")
+		if tokenString == "" {
+			c.JSON(http.StatusUnauthorized, gin.H{
+				"code": 200,
+				"msg":  "Unauthorized",
+			})
+			c.Abort()
+			return
+		}
+
+		parts := strings.SplitN(tokenString, " ", 2)
+		if !(len(parts) == 2 && parts[0] == "Bearer") {
+			c.JSON(http.StatusOK, gin.H{
+				"code": 2004,
+				"msg":  "请求头中auth格式有误",
+			})
+			c.Abort()
+			return
+		}
+
+		// 解析token
+		token, err := jwt.ParseWithClaims(parts[1], &model.CustomerClaims{}, func(token *jwt.Token) (i interface{}, err error) {
+			return model.AppletCustomerSecret, nil
+		})
+
+		if err != nil || !token.Valid {
+			c.JSON(http.StatusUnauthorized, gin.H{
+				"code": 401,
+				"msg":  "Unauthorized",
+			})
+			c.Abort()
+			return
+		}
+
+		claims, ok := token.Claims.(*model.CustomerClaims)
+		if !ok {
+			c.JSON(http.StatusUnauthorized, gin.H{
+				"code": 401,
+				"msg":  "Unauthorized",
+			})
+			c.Abort()
+			return
+		}
+
+		c.Set("customer_id", claims.CustomerId)
+
+		c.Next()
+	}
+}
+func registerAppletCustomerRouter(v1 *gin.RouterGroup) {
+	//cont := controller.AppletCustomerController{}
+	//r := v1.Group("/applet-customer").Use(AppletCunJWTMiddleware())
+	//{
+	//	r.POST("login", cont.Login)
+	//	//r.GET("", cont.GetPage)
+	//	//r.GET("/:id", cont.Get)
+	//	//r.GET("/phone", cont.GetByPhone)
+	//	//r.POST("/insert-or-update", cont.InsertOrUpdate)
+	//	//r.PUT("", cont.Update)
+	//	//r.DELETE("", cont.Delete)
+	//}
+}
+
+func AppletCustomerRouterInit(v1 *gin.RouterGroup) {
+	cont := controller.AppletCustomerController{}
+	r := v1.Group("/applet")
+	{
+		r.POST("/login", cont.Login)
+
+	}
+}

+ 26 - 0
app/admin/router/car_info.go

@@ -0,0 +1,26 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerCarInfoRouter)
+}
+
+// 需认证的路由代码
+func registerCarInfoRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.CarInfoController{}
+	r := v1.Group("/car-info").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+		r.POST("/bind-truck-user", cont.BindTruckUser)
+	}
+}

+ 36 - 0
app/admin/router/customer.go

@@ -0,0 +1,36 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerCustomerRouter)
+	routerNoCheckRole = append(routerNoCheckRole, registerCustomerRouter2)
+}
+
+// 需认证的路由代码
+func registerCustomerRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.CustomerController{}
+	r := v1.Group("/customer").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		//r.GET("/:id", cont.Get)
+		r.GET("/phone", cont.GetByPhone)
+		r.POST("", cont.Insert)
+		r.POST("/insert-or-update", cont.InsertOrUpdate)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+		r.GET("/borrow-gas-cylinder", cont.GetBorrowGasCylinder)
+	}
+}
+func registerCustomerRouter2(v1 *gin.RouterGroup) {
+	cont := controller.CustomerController{}
+	r := v1.Group("/customer")
+	{
+		r.GET("/:id", cont.Get)
+	}
+}

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

@@ -0,0 +1,25 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/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("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 26 - 0
app/admin/router/dispatch_cost.go

@@ -0,0 +1,26 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerDispatchCostRouter)
+}
+
+// 派费管理
+// 需认证的路由代码
+func registerDispatchCostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.DispatchCostController{}
+	r := v1.Group("/dispatch-cost").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 25 - 0
app/admin/router/fill_check.go

@@ -0,0 +1,25 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerFillCheckRouter)
+}
+
+// 需认证的路由代码
+func registerFillCheckRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.FillCheckController{}
+	r := v1.Group("/fill-check").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		//r.PUT("", cont.Update)
+		//r.DELETE("", cont.Delete)
+	}
+}

+ 33 - 0
app/admin/router/fill_data.go

@@ -0,0 +1,33 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerFillDataRouter)
+	routerNoCheckRole = append(routerNoCheckRole, registerFillDataRouter2)
+}
+
+// 需认证的路由代码
+func registerFillDataRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.FillDataController{}
+	r := v1.Group("/fill_data").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/station", cont.StationList)
+		r.GET("/user", cont.UserList)
+	}
+}
+
+// 需认证的路由代码
+func registerFillDataRouter2(v1 *gin.RouterGroup) {
+	cont := controller.FillDataController{}
+	r := v1.Group("/fill_data")
+	{
+		r.POST("", cont.Insert)
+	}
+}

+ 25 - 0
app/admin/router/fill_gun.go

@@ -0,0 +1,25 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerFillGunRouter)
+}
+
+// 需认证的路由代码
+func registerFillGunRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.FillGunController{}
+	r := v1.Group("/fill-gun").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 24 - 0
app/admin/router/gas_cylinder.go

@@ -0,0 +1,24 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerGasCylinderRouter)
+}
+
+// 派费管理
+// 需认证的路由代码
+func registerGasCylinderRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.GasCylinderController{}
+	r := v1.Group("/gas-cylinder").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:inner_code", cont.Get)
+		r.GET("/uid/:inner_code", cont.GetByUid)
+	}
+}

+ 26 - 0
app/admin/router/gas_cylinder_spec.go

@@ -0,0 +1,26 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerGasCylinderSpecRouter)
+}
+
+// 派费管理
+// 需认证的路由代码
+func registerGasCylinderSpecRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.GasCylinderSpecController{}
+	r := v1.Group("/gas-cylinder-spec").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 25 - 0
app/admin/router/goods.go

@@ -0,0 +1,25 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerGoodsRouter)
+}
+
+// 需认证的路由代码
+func registerGoodsRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.GoodsController{}
+	r := v1.Group("/goods").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 5 - 1
app/admin/router/init_router.go

@@ -51,6 +51,7 @@ func InitSysRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.Rou
 	}
 	// 需要认证
 	sysCheckRoleRouterInit(g, authMiddleware)
+	AppletCustomerRouterInit(g)
 
 	return g
 }
@@ -75,12 +76,15 @@ func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
 	for _, f := range routerCheckRole {
 		f(v1, authMiddleware)
 	}
+	for _, f := range routerNoCheckRole {
+		f(v1)
+	}
 
 	registerBaseRouter(v1, authMiddleware)
 }
 
 func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
-	v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
+	v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc())
 	{
 		v1auth.POST("/logout", handler2.LogOut)
 	}

+ 25 - 0
app/admin/router/inspect_record.go

@@ -0,0 +1,25 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerInspectRecordRouter)
+}
+
+// 需认证的路由代码
+func registerInspectRecordRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.InspectRecordController{}
+	r := v1.Group("/inspect_record").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		//r.DELETE("", cont.Delete)
+	}
+}

+ 37 - 0
app/admin/router/operation_log.go

@@ -0,0 +1,37 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerOperationLogRouter)
+	routerNoCheckRole = append(routerNoCheckRole, registerOperationLogRouter2)
+
+}
+
+// 需认证的路由代码
+func registerOperationLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.OperationLogController{}
+	r := v1.Group("/operation-log").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		//r.PUT("", cont.Update)
+		//r.DELETE("", cont.Delete)
+	}
+}
+
+// 需认证的路由代码
+func registerOperationLogRouter2(v1 *gin.RouterGroup) {
+	cont := controller.OperationLogController{}
+	r := v1.Group("/operation-log")
+	{
+		r.POST("/gas-station", cont.InsertForGasStation)
+
+	}
+}

+ 29 - 0
app/admin/router/order.go

@@ -0,0 +1,29 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerOrderRouter)
+}
+
+// 需认证的路由代码
+func registerOrderRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.OrderController{}
+	r := v1.Group("/order").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.GET("/delivery", cont.GetDeliveryPage) // 送气员订单列表
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.POST("/cancel", cont.Cancel)
+		r.POST("/delivery", cont.Delivery)
+		r.PUT("/state", cont.UpdateState) // 修改订单状态
+		r.DELETE("", cont.Delete)
+	}
+}

+ 31 - 0
app/admin/router/real_fill_data.go

@@ -0,0 +1,31 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerRealFillDataRouter)
+	routerNoCheckRole = append(routerNoCheckRole, registerRealFillDataRouter2)
+}
+
+// 需认证的路由代码
+func registerRealFillDataRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.RealFillDataController{}
+	r := v1.Group("/real_fill_data").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+	}
+}
+
+// 需认证的路由代码
+func registerRealFillDataRouter2(v1 *gin.RouterGroup) {
+	cont := controller.RealFillDataController{}
+	r := v1.Group("/real_fill_data")
+	{
+		r.POST("", cont.Insert)
+	}
+}

+ 0 - 43
app/admin/router/sys_config.go

@@ -1,43 +0,0 @@
-package router
-
-import (
-	"gas-cylinder-api/common/middleware"
-	"github.com/gin-gonic/gin"
-
-	"gas-cylinder-api/app/admin/controller"
-	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
-)
-
-func init() {
-	routerCheckRole = append(routerCheckRole, registerSysConfigRouter)
-}
-
-// 需认证的路由代码
-func registerSysConfigRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
-	cont := controller.SysConfig{}
-	r := v1.Group("/config").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
-	{
-		r.GET("", cont.GetPage)
-		r.GET("/:id", cont.Get)
-		r.POST("", cont.Insert)
-		r.PUT("/:id", cont.Update)
-		r.DELETE("", cont.Delete)
-	}
-
-	r1 := v1.Group("/configKey").Use(authMiddleware.MiddlewareFunc())
-	{
-		r1.GET("/:configKey", cont.GetSysConfigByKEYForService)
-	}
-
-	r2 := v1.Group("/app-config")
-	{
-		r2.GET("", cont.Get2SysApp)
-	}
-
-	r3 := v1.Group("/set-config").Use(authMiddleware.MiddlewareFunc())
-	{
-		r3.PUT("", cont.Update2Set)
-		r3.GET("", cont.Get2Set)
-	}
-
-}

+ 4 - 3
app/admin/router/sys_dept.go

@@ -3,7 +3,6 @@ package router
 import (
 	"gas-cylinder-api/app/admin/controller"
 	"gas-cylinder-api/common/actions"
-	"gas-cylinder-api/common/middleware"
 	"github.com/gin-gonic/gin"
 	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
 )
@@ -17,7 +16,7 @@ func init() {
 func registerTruckEnterpriseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
 	cont := controller.TruckEnterpriseController{}
 
-	r := v1.Group("/truck-enterprise").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
+	r := v1.Group("/truck-enterprise").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		r.GET("", cont.GetPage)
 		r.GET("/:id", cont.Get)
@@ -32,14 +31,16 @@ func registerTruckEnterpriseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJ
 func registerStoreRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
 	cont := controller.StoreController{}
 
-	r := v1.Group("/store").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
+	r := v1.Group("/store").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		r.GET("", cont.GetPage)
+		r.GET("/delivery", cont.GetDeliveryPage) // 配送门店 当前门店及子门店
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
 		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)
 		r.POST("/enter", cont.Enter)
+		r.GET("/all", cont.GetAllPage)
 	}
 
 }

+ 0 - 38
app/admin/router/sys_dict.go

@@ -1,38 +0,0 @@
-package router
-
-import (
-	"gas-cylinder-api/common/middleware"
-	"github.com/gin-gonic/gin"
-
-	"gas-cylinder-api/app/admin/controller"
-	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
-)
-
-func init() {
-	routerCheckRole = append(routerCheckRole, registerDictRouter)
-}
-
-func registerDictRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
-	dictCont := controller.SysDictTypeController{}
-	dataCont := controller.SysDictDataController{}
-	dicts := v1.Group("/dict").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
-	{
-
-		dicts.GET("/data", dataCont.GetPage)
-		dicts.GET("/data/:dictCode", dataCont.Get)
-		dicts.POST("/data", dataCont.Insert)
-		dicts.PUT("/data/:dictCode", dataCont.Update)
-		dicts.DELETE("/data", dataCont.Delete)
-
-		dicts.GET("/type-option-select", dictCont.GetAll)
-		dicts.GET("/type", dictCont.GetPage)
-		dicts.GET("/type/:id", dictCont.Get)
-		dicts.POST("/type", dictCont.Insert)
-		dicts.PUT("/type/:id", dictCont.Update)
-		dicts.DELETE("/type", dictCont.Delete)
-	}
-	opSelect := v1.Group("/dict-data").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
-	{
-		opSelect.GET("/option-select", dataCont.GetAll)
-	}
-}

+ 4 - 4
app/admin/router/sys_menu.go

@@ -2,7 +2,7 @@ package router
 
 import (
 	"gas-cylinder-api/app/admin/controller"
-	"gas-cylinder-api/common/middleware"
+	"gas-cylinder-api/common/actions"
 	"github.com/gin-gonic/gin"
 	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
 )
@@ -15,16 +15,16 @@ func init() {
 func registerSysMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
 	cont := controller.SysMenuController{}
 
-	r := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
+	r := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc())
 	{
 		r.GET("", cont.GetPage)
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
-		r.PUT("/:id", cont.Update)
+		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)
 	}
 
-	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
+	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		r1.GET("/menu-role", cont.GetMenuRole)
 	}

+ 2 - 9
app/admin/router/sys_role.go

@@ -2,7 +2,6 @@ package router
 
 import (
 	"gas-cylinder-api/common/actions"
-	"gas-cylinder-api/common/middleware"
 	"github.com/gin-gonic/gin"
 
 	"gas-cylinder-api/app/admin/controller"
@@ -16,18 +15,12 @@ func init() {
 // 需认证的路由代码
 func registerSysRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
 	cont := controller.SysRoleController{}
-	r := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
+	r := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		r.GET("", cont.GetPage)
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
-		r.PUT("/:id", cont.Update)
+		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)
 	}
-	// 角色关联的菜单
-	r2 := v1.Group("/role-menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
-	{
-		r2.GET("/:id", cont.GetRoleMenu)
-		r2.PUT("/:id", cont.UpdateRoleMenu)
-	}
 }

+ 0 - 35
app/admin/router/sys_service.go

@@ -1,35 +0,0 @@
-package router
-
-import (
-	"gas-cylinder-api/app/admin/controller"
-	"gas-cylinder-api/common/middleware"
-	"github.com/gin-gonic/gin"
-	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
-)
-
-func init() {
-	routerCheckRole = append(routerCheckRole, registerSysServiceRouter)
-}
-
-// 需认证的路由代码
-func registerSysServiceRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
-	cont := controller.SysService{}
-	r := v1.Group("/service").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
-	{
-		r.GET("", cont.GetPage)
-		r.GET("/:id", cont.Get)
-		r.POST("", cont.Insert)
-		r.PUT("/:id", cont.Update)
-		r.DELETE("", cont.Delete)
-	}
-	r1 := v1.Group("")
-	{
-		// 服务发现
-		r1.POST("/service-disco", cont.Discovery)
-	}
-	r2 := v1.Group("/service").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckService())
-	{
-		// 服务获取用户信息
-		r2.GET("/userinfo", cont.UserInfo)
-	}
-}

+ 3 - 2
app/admin/router/sys_user.go

@@ -16,16 +16,17 @@ func init() {
 // 需认证的路由代码
 func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
 	cont := controller.SysUser{}
-	r := v1.Group("/sys-user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
+	r := v1.Group("/sys-user").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		r.GET("", cont.GetPage)
+		r.GET("/delivery", cont.GetDeliveryPage)
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
 		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)
 	}
 
-	user := v1.Group("/user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
+	user := v1.Group("/user").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
 	{
 		user.GET("/profile", cont.GetProfile)
 		user.GET("/info", cont.GetInfo)

+ 19 - 0
app/admin/router/upload.go

@@ -0,0 +1,19 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerUploadRouter)
+}
+
+func registerUploadRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
+	{
+		cont := controller.UploadController{}
+		r1.POST("/upload", cont.FilesUpload)
+	}
+}

+ 26 - 0
app/admin/router/warehouse.go

@@ -0,0 +1,26 @@
+package router
+
+import (
+	"gas-cylinder-api/app/admin/controller"
+	"gas-cylinder-api/common/actions"
+	"github.com/gin-gonic/gin"
+	jwt "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth"
+)
+
+func init() {
+	routerCheckRole = append(routerCheckRole, registerWarehouseRouter)
+}
+
+// 派费管理
+// 需认证的路由代码
+func registerWarehouseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
+	cont := controller.WarehouseController{}
+	r := v1.Group("/warehouse").Use(authMiddleware.MiddlewareFunc()).Use(actions.PermissionAction())
+	{
+		r.GET("", cont.GetPage)
+		r.GET("/:id", cont.Get)
+		r.POST("", cont.Insert)
+		r.PUT("", cont.Update)
+		r.DELETE("", cont.Delete)
+	}
+}

+ 158 - 0
app/admin/service/address.go

@@ -0,0 +1,158 @@
+package service
+
+import (
+	"errors"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	cDto "gas-cylinder-api/common/dto"
+	"gas-cylinder-api/common/global"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+)
+
+type Address struct {
+	service.Service
+}
+
+// GetPage 获取Address列表
+func (e *Address) GetPage(c *dto.AddressGetPageReq, list *[]model.Address, count *int64) error {
+	var err error
+	var data model.Address
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+		).
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Get 获取Address对象
+func (e *Address) Get(d *dto.AddressGetReq, carInfoModel *model.Address, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(carInfoModel, d.GetId()).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundOrNoPermissionErr
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
+
+// Insert 创建Address对象
+func (e *Address) Insert(c *dto.AddressInsertReq) error {
+	var err error
+	var data model.Address
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// TODO 1.1.1.12新运输增车辆信息
+
+	// 添加角色
+	c.Generate(&data)
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.Id = data.Id
+	return nil
+
+}
+
+// Update 修改Address对象
+func (e *Address) Update(c *dto.AddressUpdateReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel = model.Address{}
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.UpdateNotFoundOrNoPermissionErr
+		}
+		return global.UpdateFailedErr
+	}
+
+	// TODO 1.1.1.13更新车辆信息
+
+	c.Generate(&carInfoModel)
+	err = tx.Save(&carInfoModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+
+	c.Id = carInfoModel.Id
+
+	return nil
+}
+
+// Remove 删除Address
+func (e *Address) Remove(c *dto.AddressDeleteReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel model.Address
+
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.DeleteNotFoundOrNoPermissionErr
+		}
+		return global.DeleteFailedErr
+	}
+
+	db := tx.Delete(&carInfoModel)
+
+	if err = db.Error; err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if db.RowsAffected == 0 {
+		return global.DeleteNotFoundOrNoPermissionErr
+	}
+
+	return nil
+}

+ 108 - 0
app/admin/service/applet_customer.go

@@ -0,0 +1,108 @@
+package service
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/conf"
+	"github.com/dgrijalva/jwt-go"
+	"github.com/gin-gonic/gin"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+	"net/http"
+	"time"
+)
+
+type AppletCustomer struct {
+	service.Service
+}
+
+func GetAppletCustomerId(c *gin.Context) string {
+	customerId, exists := c.Get("customer_id")
+	if !exists {
+		return ""
+	}
+	return customerId.(string)
+}
+
+// GetPage 获取Customer列表
+func (e *AppletCustomer) Login(c *dto.AppletCustomerLoginReq) (token, expiresAt string, err error) {
+	var data model.Customer
+
+	url := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
+	appid := conf.ExtConfig.Applet.Appid
+	appSecret := conf.ExtConfig.Applet.AppSecret
+	url = fmt.Sprintf(url, appid, appSecret, c.Code)
+	// 发起请求
+	res, _ := http.Get(url)
+
+	// 成功后获取openId
+	wxRes := dto.AppletCustomerLoginResp{}
+	err = json.NewDecoder(res.Body).Decode(&wxRes)
+
+	if err != nil || wxRes.Openid == "" {
+		return token, expiresAt, errors.New("获取openid失败")
+	}
+
+	err = e.Orm.Where("principal_phone = ?", c.Phone).First(&data).Error
+	id := data.Id
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			// 添加客户
+			for {
+				var count int64
+				id = utils.GetUUID()
+				var i int64
+				err = e.Orm.Model(&data).Where("id = ?", id).Count(&count).Error
+				if err != nil {
+					continue
+				}
+				if i == 0 {
+					break
+				}
+			}
+			err = e.Orm.Create(&model.Customer{
+				ProvCustomer: model.ProvCustomer{
+					Id:             id,
+					PrincipalPhone: c.Phone,
+				},
+				Openid: wxRes.Openid,
+			}).Error
+		} else {
+			return token, expiresAt, errors.New("获取个人信息失败")
+		}
+	}
+
+	if data.Openid != wxRes.Openid {
+		data.Openid = wxRes.Openid
+		err = e.Orm.Save(&data).Error
+		if err != nil {
+			return token, expiresAt, errors.New("同步个人信息失败")
+		}
+	}
+
+	token, expiresAt, _ = e.GeneratorToken(id)
+	return token, expiresAt, nil
+
+}
+
+func (e *AppletCustomer) GeneratorToken(customerId string) (string, string, error) {
+	// 创建一个我们自己的声明
+	var TokenExpireDuration = time.Second * 24 * 3600 * time.Duration(conf.ExtConfig.Applet.TokenExpire)
+	expiresAt := time.Now().Add(TokenExpireDuration)
+	c := model.CustomerClaims{
+		customerId,
+		jwt.StandardClaims{
+			ExpiresAt: expiresAt.Unix(), // 过期时间
+			Issuer:    "customer",       // 签发人
+		},
+	}
+	// 使用指定的签名方法创建签名对象
+	token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
+	// 使用指定的secret签名并获得完整的编码后的字符串token
+	tokenStr, err := token.SignedString(model.AppletCustomerSecret)
+	return tokenStr, expiresAt.Format("2006-01-02 15:04:05"), err
+}

+ 117 - 0
app/admin/service/applet_test.go

@@ -0,0 +1,117 @@
+package service
+
+import (
+	"fmt"
+	"github.com/alibaba/sentinel-golang/util"
+	"strings"
+	"testing"
+	"unicode"
+)
+
+func TestParseToken(t *testing.T) {
+	// 解析token
+	// 如果是自定义Claim结构体则需要使用 ParseWithClaims 方法
+	//tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21lcklkIjoiIiwiZXhwIjoxNzExMTU0NDAxLCJpc3MiOiJjdXN0b21lciJ9.ujrz1YTMFOKeIsDbYaQctLiOhkYicnZ8xb-Y6E_JeJg"
+	//token, err := jwt.ParseWithClaims(tokenString, &model.CustomerClaims{}, func(token *jwt.Token) (i interface{}, err error) {
+	//	// 直接使用标准的Claim则可以直接使用Parse方法
+	//	//token, err := jwt.Parse(tokenString, func(token *jwt.Token) (i interface{}, err error) {
+	//	return model.AppletCustomerSecret, nil
+	//})
+	//if err != nil {
+	//	fmt.Println("==========", err)
+	//}
+	//// 对token对象中的Claim进行类型断言
+	//if claims, ok := token.Claims.(*model.CustomerClaims); ok && token.Valid { // 校验token
+	//	fmt.Println("==========", claims)
+	//} else {
+	//	fmt.Println("==========", "invalid token")
+	//}
+
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+	fmt.Println(util.NewUuid())
+
+}
+
+// 单词全部转化为大写
+func ToUpper(s string) string {
+	return strings.ToUpper(s)
+}
+
+// 单词全部转化为小写
+func ToLower(s string) string {
+	return strings.ToLower(s)
+}
+
+// 下划线单词转为大写驼峰单词
+func UderscoreToUpperCamelCase(s string) string {
+	s = strings.Replace(s, "_", " ", -1)
+	s = strings.Title(s)
+	return strings.Replace(s, " ", "", -1)
+}
+
+// 下划线单词转为小写驼峰单词
+func UderscoreToLowerCamelCase(s string) string {
+	s = UderscoreToUpperCamelCase(s)
+	return string(unicode.ToLower(rune(s[0]))) + s[1:]
+}
+func TestCode(t *testing.T) {
+	list := []string{
+		"pro_variety",
+		"pro_name",
+		"pro_no",
+		"fill_media",
+		"make_unit",
+		"make_time",
+		"work_pressure",
+		"volume",
+		"check_time",
+		"next_check_time",
+		"regist_code",
+		"change_event",
+		"memo",
+		"inner_code",
+		"stamp_make_unit",
+		"pro_uuid",
+		"chip_id",
+		"location",
+		"status",
+		"check_organization",
+		"empty_bottle",
+		"product_id",
+		"uid",
+		"tid",
+		"chip_status",
+		"location_source_id",
+		"is_lose",
+		"old_bottle",
+		"design_thickness",
+		"result_code",
+		"audit_remark",
+		"deadline_time",
+		"check_in_time",
+		"scrap_time",
+		"analysis_status",
+		"check_status",
+		"operation_id",
+		"operation_time",
+		"safe_evaluate",
+	}
+
+	for _, s := range list {
+		fmt.Println(UderscoreToLowerCamelCase(s))
+	}
+}

+ 218 - 0
app/admin/service/car_info.go

@@ -0,0 +1,218 @@
+package service
+
+import (
+	"errors"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	cDto "gas-cylinder-api/common/dto"
+	"gas-cylinder-api/common/global"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+)
+
+type CarInfo struct {
+	service.Service
+}
+
+// GetPage 获取CarInfo列表
+func (e *CarInfo) GetPage(c *dto.CarInfoGetPageReq, list *[]model.CarInfo, count *int64, p *actions.DataPermission) error {
+	var err error
+	var data model.CarInfo
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			actions.Permission(data.TableName(), p),
+		).Preload("TruckUserCarInfo.User").
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Get 获取CarInfo对象
+func (e *CarInfo) Get(d *dto.CarInfoGetReq, carInfoModel *model.CarInfo, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(carInfoModel, d.GetId()).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundOrNoPermissionErr
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
+
+// Insert 创建CarInfo对象
+func (e *CarInfo) Insert(c *dto.CarInfoInsertReq) error {
+	var err error
+	var data model.CarInfo
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// TODO 1.1.1.12新运输增车辆信息
+
+	// 查询车辆信息是否存在
+	err = e.Orm.Where("car_no = ?", c.ProvCarInfo.CarNo).First(&data).Error
+	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	if data.Id > 0 {
+		return errors.New("车辆信息已存在")
+	}
+	// 添加车辆信息
+	c.Generate(&data)
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.Id = data.Id
+	return nil
+
+}
+
+// Update 修改CarInfo对象
+func (e *CarInfo) Update(c *dto.CarInfoUpdateReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel = model.CarInfo{}
+	// 查询车辆信息是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.UpdateNotFoundOrNoPermissionErr
+		}
+		return global.UpdateFailedErr
+	}
+
+	// TODO 1.1.1.13更新车辆信息
+
+	c.Generate(&carInfoModel)
+	err = tx.Save(&carInfoModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+
+	c.Id = carInfoModel.Id
+
+	return nil
+}
+
+// Remove 删除CarInfo
+func (e *CarInfo) Remove(c *dto.CarInfoDeleteReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel model.CarInfo
+
+	// 查询车辆信息是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.DeleteNotFoundOrNoPermissionErr
+		}
+		return global.DeleteFailedErr
+	}
+
+	// TODO 1.1.1.14注销车辆信息
+
+	db := tx.Delete(&carInfoModel)
+
+	if err = db.Error; err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if db.RowsAffected == 0 {
+		return global.DeleteNotFoundOrNoPermissionErr
+	}
+
+	return nil
+}
+
+func (e *CarInfo) BindTruckUser(c *dto.CarInfoBindTruckUserReq) error {
+	var err error
+	var data model.TruckUserCarInfo
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// 查询车辆是否绑定了其他货车司机
+	var truckUserCarInfo = model.TruckUserCarInfo{}
+	// 查询车辆信息是否存在
+	err = e.Orm.Where("car_no = ?", c.CarNo).First(&truckUserCarInfo).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			data.ProvUserId = c.UserId
+			data.CarNo = c.CarNo
+			err = tx.Create(&data).Error
+			if err != nil {
+				e.Log.Errorf("db error: %s", err)
+				return global.CreateFailedErr
+			}
+			// TODO 1.1.1.15货车司机绑定车辆信息
+
+			c.CarNo = data.CarNo
+			return nil
+		}
+		return global.UpdateFailedErr
+	}
+
+	// TODO 1.1.1.15货车司机绑定车辆信息
+	truckUserCarInfo.ProvUserId = c.UserId
+
+	err = tx.Updates(&truckUserCarInfo).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.CarNo = data.CarNo
+	return nil
+
+}

+ 372 - 0
app/admin/service/customer.go

@@ -0,0 +1,372 @@
+package service
+
+import (
+	"errors"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	cDto "gas-cylinder-api/common/dto"
+	"gas-cylinder-api/common/global"
+	"gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+)
+
+type Customer struct {
+	service.Service
+}
+
+// GetPage 获取Customer列表
+func (e *Customer) GetPage(c *dto.CustomerGetPageReq, list *[]model.Customer, count *int64, p *actions.DataPermission) error {
+	var err error
+	var data model.Customer
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			actions.Permission(data.TableName(), p),
+		).
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Get 获取Customer对象
+func (e *Customer) Get(d *dto.CustomerGetReq, CustomerModel *model.Customer) error {
+	err := e.Orm.
+		Where("id = ?", d.GetId()).
+		First(CustomerModel).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundOrNoPermissionErr
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
+func (e *Customer) GetByPhone(d *dto.CustomerGetByPhoneReq, CustomerModel *model.Customer, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(CustomerModel.TableName(), p)).
+		Where("principal_phone = ? and dept_id = ?", d.Phone, p.DeptId).
+		First(CustomerModel).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundErr
+		}
+		return global.GetFailedErr
+	}
+	return nil
+}
+func (e *Customer) GetBorrowGasCylinder(d *dto.CustomerGetBorrowGasCylinderReq, list *[]model.CustomerGasCylinder) error {
+	var err error
+	var data model.CustomerGasCylinder
+
+	err = e.Orm.Model(&data).
+		Where("customer_id = ?", d.CustomerId).
+		Find(list).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Insert 创建Customer对象
+func (e *Customer) Insert(c *dto.CustomerInsertReq) error {
+	var err error
+	var data model.Customer
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	var id string
+	for {
+		var count int64
+		id = utils.GetUUID()
+		var i int64
+		err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
+		if err != nil {
+			continue
+		}
+		if i == 0 {
+			break
+		}
+	}
+
+	// 添加角色
+	c.Generate(&data)
+	data.Id = id
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+
+	// TODO 1.1.1.16新增客户信息
+
+	c.Id = data.Id
+	return nil
+
+}
+func (e *Customer) InsertOrUpdate(c *dto.CustomerInsertReq, p *actions.DataPermission) error {
+	var err error
+	var data model.Customer
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	err = e.Orm.
+		Scopes(actions.Permission(data.TableName(), p)).
+		Where("principal_phone = ? and dept_id = ?", c.PrincipalPhone, p.DeptId).
+		First(&data).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			// TODO 1.1.1.16新增客户信息
+			// 添加客户
+			var id string
+			for {
+				var count int64
+				id = utils.GetUUID()
+				var i int64
+				err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
+				if err != nil {
+					continue
+				}
+				if i == 0 {
+					break
+				}
+			}
+
+			c.Generate(&data)
+			data.Id = id
+			data.IsSyncProv = true
+			err = tx.Create(&data).Error
+			if err != nil {
+				e.Log.Errorf("db error: %s", err)
+				return global.CreateFailedErr
+			}
+			c.Id = data.Id
+			return nil
+		}
+		return global.GetFailedErr
+	}
+
+	// 数据一致则不更新
+	if e.CheckDataConsistency(*c, data) {
+		c.Id = data.Id
+		return nil
+	}
+	dataIntegrity := e.CheckDataIntegrity(data)
+	if dataIntegrity {
+		data.IsSyncProv = true
+	}
+	// 更新客户信息
+	c.Generate(&data)
+	err = tx.Save(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+	c.Id = data.Id
+
+	if dataIntegrity {
+		// TODO 1.1.1.17更新客户信息
+	}
+	return nil
+
+}
+
+// Update 修改Customer对象
+func (e *Customer) Update(c *dto.CustomerUpdateReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var CustomerModel = model.Customer{}
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(CustomerModel.TableName(), p)).
+		Where("id = ?", c.GetId()).
+		First(&CustomerModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.UpdateNotFoundOrNoPermissionErr
+		}
+		return global.UpdateFailedErr
+	}
+	c.Generate(&CustomerModel)
+	// 检查数据完整性
+	dataIntegrity := e.CheckDataIntegrity(CustomerModel)
+	if dataIntegrity {
+		CustomerModel.IsSyncProv = true
+	}
+	err = tx.Save(&CustomerModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+
+	// 检查数据完整性
+	if dataIntegrity {
+		// TODO 1.1.1.17更新客户信息
+	}
+
+	c.Id = CustomerModel.Id
+
+	return nil
+}
+
+// Remove 删除Customer
+func (e *Customer) Remove(c *dto.CustomerDeleteReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var CustomerModel model.Customer
+
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(CustomerModel.TableName(), p)).
+		Where("id = ?", c.GetId()).
+		First(&CustomerModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.DeleteNotFoundOrNoPermissionErr
+		}
+		return global.DeleteFailedErr
+	}
+
+	// TODO 1.1.1.18注销客户信息
+
+	db := tx.Delete(&CustomerModel)
+
+	if err = db.Error; err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if db.RowsAffected == 0 {
+		return global.DeleteNotFoundOrNoPermissionErr
+	}
+
+	return nil
+}
+
+// 检查数据完整性,数据完整之后再上传省平台
+func (e *Customer) CheckDataIntegrity(customer model.Customer) bool {
+	flag := true
+
+	if customer.Address == "" {
+		flag = false
+	}
+	if customer.AddressImg == "" {
+		flag = false
+	}
+	if customer.Lng == 0 {
+		flag = false
+	}
+	if customer.Lat == 0 {
+		flag = false
+	}
+
+	switch customer.Type {
+	case 0:
+		if customer.ShopName == "" {
+			flag = false
+		}
+	case 1:
+		if customer.PrincipalName == "" {
+			flag = false
+		}
+	}
+
+	if customer.City == "" {
+		flag = false
+	}
+	if customer.Area == "" {
+		flag = false
+	}
+
+	return flag
+}
+
+// 检查数据一致性,数据一致则不更新,不上传省平台
+func (e *Customer) CheckDataConsistency(req dto.CustomerInsertReq, customer model.Customer) bool {
+	flag := true
+	// 0-商户 1-私人
+	if customer.Type == 1 {
+		if req.Name != customer.PrincipalName {
+			flag = false
+		}
+	}
+	if customer.Type == 0 {
+		if req.Name != customer.ShopName {
+			flag = false
+		}
+	}
+
+	if req.PrincipalPhone != customer.PrincipalPhone {
+		flag = false
+	}
+	if req.Address != customer.Address {
+		flag = false
+	}
+	if req.Lng != customer.Lng {
+		flag = false
+	}
+	if req.Lat != customer.Lat {
+		flag = false
+	}
+	if req.Type != customer.Type {
+		flag = false
+	}
+	if req.City != customer.City {
+		flag = false
+	}
+	if req.Area != customer.Area {
+		flag = false
+	}
+	if req.Remark != customer.Remark {
+		flag = false
+	}
+	if req.StoreCode != customer.StoreCode {
+		flag = false
+	}
+	return flag
+}

+ 156 - 0
app/admin/service/device.go

@@ -0,0 +1,156 @@
+package service
+
+import (
+	"errors"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	cDto "gas-cylinder-api/common/dto"
+	"gas-cylinder-api/common/global"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+)
+
+type Device struct {
+	service.Service
+}
+
+// GetPage 获取Device列表
+func (e *Device) GetPage(c *dto.DeviceGetPageReq, list *[]model.Device, count *int64, p *actions.DataPermission) error {
+	var err error
+	var data model.Device
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			actions.Permission(data.TableName(), p),
+		).
+		Preload("User").
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Get 获取Device对象
+func (e *Device) Get(d *dto.DeviceGetReq, deviceModel *model.Device, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(deviceModel.TableName(), p)).
+		First(deviceModel, d.GetId()).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundOrNoPermissionErr
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
+
+// Insert 创建Device对象
+func (e *Device) Insert(c *dto.DeviceInsertReq) error {
+	var err error
+	var data model.Device
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// 添加设备
+	c.Generate(&data)
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.Id = data.Id
+	return nil
+
+}
+
+// Update 修改Device对象
+func (e *Device) Update(c *dto.DeviceUpdateReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var deviceModel = model.Device{}
+	// 查询设备是否存在
+	err = e.Orm.Scopes(actions.Permission(deviceModel.TableName(), p)).
+		First(&deviceModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.UpdateNotFoundOrNoPermissionErr
+		}
+		return global.UpdateFailedErr
+	}
+
+	c.Generate(&deviceModel)
+	err = tx.Save(&deviceModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+
+	c.Id = deviceModel.Id
+
+	return nil
+}
+
+// Remove 删除Device
+func (e *Device) Remove(c *dto.DeviceDeleteReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var deviceModel model.Device
+
+	// 查询设备是否存在
+	err = e.Orm.Scopes(actions.Permission(deviceModel.TableName(), p)).
+		First(&deviceModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.DeleteNotFoundOrNoPermissionErr
+		}
+		return global.DeleteFailedErr
+	}
+
+	db := tx.Delete(&deviceModel)
+
+	if err = db.Error; err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if db.RowsAffected == 0 {
+		return global.DeleteNotFoundOrNoPermissionErr
+	}
+
+	return nil
+}

+ 155 - 0
app/admin/service/dispatch_cost.go

@@ -0,0 +1,155 @@
+package service
+
+import (
+	"errors"
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/app/admin/service/dto"
+	"gas-cylinder-api/common/actions"
+	cDto "gas-cylinder-api/common/dto"
+	"gas-cylinder-api/common/global"
+	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"gorm.io/gorm"
+)
+
+type DispatchCost struct {
+	service.Service
+}
+
+// GetPage 获取DispatchCost列表
+func (e *DispatchCost) GetPage(c *dto.DispatchCostGetPageReq, list *[]model.DispatchCost, count *int64, p *actions.DataPermission) error {
+	var err error
+	var data model.DispatchCost
+
+	err = e.Orm.Model(&data).
+		Scopes(
+			cDto.MakeCondition(c.GetNeedSearch()),
+			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
+			actions.Permission(data.TableName(), p),
+		).
+		Find(list).Limit(-1).Offset(-1).
+		Count(count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	return nil
+}
+
+// Get 获取DispatchCost对象
+func (e *DispatchCost) Get(d *dto.DispatchCostGetReq, carInfoModel *model.DispatchCost, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(carInfoModel, d.GetId()).Error
+
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.GetNotFoundOrNoPermissionErr
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
+
+// Insert 创建DispatchCost对象
+func (e *DispatchCost) Insert(c *dto.DispatchCostInsertReq) error {
+	var err error
+	var data model.DispatchCost
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	// 添加角色
+	c.Generate(&data)
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.Id = data.Id
+	return nil
+
+}
+
+// Update 修改DispatchCost对象
+func (e *DispatchCost) Update(c *dto.DispatchCostUpdateReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel = model.DispatchCost{}
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.UpdateNotFoundOrNoPermissionErr
+		}
+		return global.UpdateFailedErr
+	}
+
+	c.Generate(&carInfoModel)
+	err = tx.Save(&carInfoModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.UpdateFailedErr
+	}
+
+	c.Id = carInfoModel.Id
+
+	return nil
+}
+
+// Remove 删除DispatchCost
+func (e *DispatchCost) Remove(c *dto.DispatchCostDeleteReq, p *actions.DataPermission) error {
+	var err error
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var carInfoModel model.DispatchCost
+
+	// 查询角色是否存在
+	err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
+		First(&carInfoModel, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return global.DeleteNotFoundOrNoPermissionErr
+		}
+		return global.DeleteFailedErr
+	}
+
+	db := tx.Delete(&carInfoModel)
+
+	if err = db.Error; err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if db.RowsAffected == 0 {
+		return global.DeleteNotFoundOrNoPermissionErr
+	}
+
+	return nil
+}

+ 94 - 0
app/admin/service/dto/address.go

@@ -0,0 +1,94 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type AddressGetPageReq struct {
+	dto.Pagination `search:"-"`
+	CustomerId     string `form:"customerId" search:"type:contains;column:customer_id;table:address"` // 角色名称
+}
+
+func (m *AddressGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type AddressInsertReq struct {
+	Id         int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	CustomerId string `json:"customerId"  swaggerignore:"true"`     // 客户id
+	Name       string `json:"name"`                                 // 收货人名称
+	Phone      string `json:"phone"`                                // 联系电话
+	City       string `json:"city"`                                 // 所在地市
+	Area       string `json:"area"`                                 // 所属区/县
+	Address    string `json:"address"`                              // 详细地址
+}
+
+func (s *AddressInsertReq) Generate(m *model.Address) {
+	if s.Id != 0 {
+		m.Id = s.Id
+	}
+	m.CustomerId = s.CustomerId
+	m.Name = s.Name
+	m.Phone = s.Phone
+	m.City = s.City
+	m.Area = s.Area
+	m.Address = s.Address
+}
+
+func (e *AddressInsertReq) SetCustomerId(CustomerId string) {
+	e.CustomerId = CustomerId
+}
+
+func (s *AddressInsertReq) GetId() interface{} {
+	return s.Id
+}
+
+type AddressUpdateReq struct {
+	Id               int    `json:"id" comment:"编码"` // 编码
+	Name             string `json:"name"`            // 收货人名称
+	Phone            string `json:"phone"`           // 联系电话
+	City             string `json:"city"`            // 所在地市
+	Area             string `json:"area"`            // 所属区/县
+	Address          string `json:"address"`         // 详细地址
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *AddressUpdateReq) Generate(m *model.Address) {
+	if s.Id != 0 {
+		m.Id = s.Id
+	}
+	m.Name = s.Name
+	m.Phone = s.Phone
+	m.City = s.City
+	m.Area = s.Area
+	m.Address = s.Address
+	if s.ControlBy.UpdateBy != 0 {
+		m.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		m.CreateBy = s.CreateBy
+	}
+}
+
+func (s *AddressUpdateReq) GetId() interface{} {
+	return s.Id
+}
+
+type AddressGetReq struct {
+	Id int `uri:"id"`
+}
+
+func (s *AddressGetReq) GetId() interface{} {
+	return s.Id
+}
+
+type AddressDeleteReq struct {
+	Id               int `json:"id"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *AddressDeleteReq) GetId() interface{} {
+	return s.Id
+}

+ 19 - 0
app/admin/service/dto/applet_customer.go

@@ -0,0 +1,19 @@
+package dto
+
+import common "gas-cylinder-api/common/model"
+
+// 小程序客户登录
+type AppletCustomerLoginReq struct {
+	Phone            string `json:"phone"` // 手机号
+	Code             string `json:"code"`  // 收货人名称
+	common.ControlBy `swaggerignore:"true"`
+}
+
+type AppletCustomerLoginResp struct {
+	Openid      string `json:"openid"`      //用户唯一标识
+	Session_key string `json:"session_key"` // 会话密钥 session_key 是对用户数据进行 加密签名 的密钥
+	Unionid     string `json:"unionid"`     // 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回
+	Errcode     int    `json:"errcode"`     //错误码: -1、0、40029、 45011、 40226  (具体说明,请阅读 接口文档)
+	Errmsg      string `json:"errmsg"`      //错误信息
+
+}

+ 98 - 0
app/admin/service/dto/car_info.go

@@ -0,0 +1,98 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type CarInfoGetPageReq struct {
+	dto.Pagination `search:"-"`
+	CarNo          string `form:"carNo" search:"type:contains;column:car_no;table:car_info"` // 角色名称
+}
+
+func (m *CarInfoGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type CarInfoInsertReq struct {
+	Id               int               `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	CarNo            string            `json:"carNo" swaggerignore:"true"`           // 车牌号
+	CmpCode          string            `json:"cmpCode" swaggerignore:"true"`         // 归属企业登记编号
+	ProvCarInfo      model.ProvCarInfo `json:"provCarInfo"`
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *CarInfoInsertReq) Generate(model *model.CarInfo) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.CarNo = s.ProvCarInfo.CarNo
+	model.CmpCode = s.ProvCarInfo.CmpCode
+	model.ProvCarInfo = s.ProvCarInfo
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+	if s.DeptBy.DeptId != 0 {
+		model.DeptId = s.DeptId
+	}
+}
+
+func (s *CarInfoInsertReq) GetId() interface{} {
+	return s.Id
+}
+func (s *CarInfoInsertReq) SetCmpCode(cmpCode string) {
+	s.ProvCarInfo.CmpCode = cmpCode
+}
+
+type CarInfoUpdateReq struct {
+	Id               int               `json:"id" comment:"编码"`            // 编码
+	CarNo            string            `json:"carNo" swaggerignore:"true"` // 车牌号
+	ProvCarInfo      model.ProvCarInfo `json:"provCarInfo"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *CarInfoUpdateReq) Generate(model *model.CarInfo) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.CarNo = s.ProvCarInfo.CarNo
+	model.ProvCarInfo = s.ProvCarInfo
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+}
+
+func (s *CarInfoUpdateReq) GetId() interface{} {
+	return s.Id
+}
+
+type CarInfoGetReq struct {
+	Id int `uri:"id"`
+}
+
+func (s *CarInfoGetReq) GetId() interface{} {
+	return s.Id
+}
+
+type CarInfoDeleteReq struct {
+	Id               int `json:"id"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *CarInfoDeleteReq) GetId() interface{} {
+	return s.Id
+}
+
+type CarInfoBindTruckUserReq struct {
+	CarNo            string `json:"carNo"`
+	UserId           string `json:"userId"`
+	common.ControlBy `swaggerignore:"true"`
+}

+ 148 - 0
app/admin/service/dto/customer.go

@@ -0,0 +1,148 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type CustomerGetPageReq struct {
+	dto.Pagination `search:"-"`
+	PrincipalPhone string `form:"principalPhone" search:"type:contains;column:principal_phone;table:customer"` // 电话
+	Type           string `form:"type" search:"type:exact;column:type;table:customer"`                         // 类型
+	Address        string `form:"address" search:"type:contains;column:address;table:customer"`                // 地址
+}
+
+type CustomerOrder struct {
+	CreatedAtOrder string `search:"type:order;column:created_at;table:customer" form:"createdAtOrder" default:"desc"`
+}
+
+func (m *CustomerGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type CustomerInsertReq struct {
+	Id             string  `json:"id" swaggerignore:"true"`                   // 主键ID
+	Name           string  `json:"name"`                                      // 名字
+	PrincipalPhone string  `json:"principalPhone" vd:"len($)>0;msg:'电话不能为空'"` // 负责人电话
+	Address        string  `json:"address"`                                   // 地址
+	AddressImg     string  `json:"addressImg"`                                // 现场图片
+	Lng            float64 `json:"lng"`                                       // 经度
+	Lat            float64 `json:"lat"`                                       // 纬度
+	Type           int     `json:"type"`                                      // 类型 0-商户 1-私人
+	City           string  `json:"city"`                                      // 所在地市
+	Area           string  `json:"area"`                                      // 所属区/县
+	Remark         string  `json:"remark"`                                    // 备注描述
+	StoreCode      string  `swaggerignore:"true"`                             // 门店登记编号
+
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *CustomerInsertReq) Generate(model *model.Customer) {
+	if s.Type == 0 {
+		model.ShopName = s.Name
+	}
+	if s.Type == 1 {
+		model.PrincipalName = s.Name
+	}
+	model.PrincipalPhone = s.PrincipalPhone
+	model.Address = s.Address
+	if len(s.AddressImg) > 0 {
+		model.AddressImg = s.AddressImg
+	}
+	model.Lng = s.Lng
+	model.Lat = s.Lat
+	model.Type = s.Type
+	model.City = s.City
+	model.Area = s.Area
+	model.Remark = s.Remark
+	model.StoreCode = s.StoreCode
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+	if s.DeptBy.DeptId != 0 {
+		model.DeptId = s.DeptId
+	}
+}
+
+func (s *CustomerInsertReq) GetId() interface{} {
+	return s.Id
+}
+func (s *CustomerInsertReq) SetStoreCode(storeCode string) {
+	s.StoreCode = storeCode
+}
+
+type CustomerUpdateReq struct {
+	Id             string  `json:"id" vd:"len($)>0"`                           // 主键ID
+	Name           string  `json:"name"`                                       // 名字
+	PrincipalPhone string  `json:"principalPhone"  vd:"len($)>0;msg:'电话不能为空'"` // 负责人电话
+	Address        string  `json:"address"`                                    // 地址
+	AddressImg     string  `json:"addressImg"`                                 // 现场图片
+	Lng            float64 `json:"lng"`                                        // 经度
+	Lat            float64 `json:"lat"`                                        // 纬度
+	Type           int     `json:"type"`                                       // 类型 0-商户 1-私人
+	City           string  `json:"city"`                                       // 所在地市
+	Area           string  `json:"area"`                                       // 所属区/县
+	Remark         string  `json:"remark"`                                     // 备注描述
+	StoreCode      string  `swaggerignore:"true"`                              // 门店登记编号
+
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *CustomerUpdateReq) Generate(model *model.Customer) {
+	if s.Type == 0 {
+		model.ShopName = s.Name
+	}
+	if s.Type == 1 {
+		model.PrincipalName = s.Name
+	}
+	model.PrincipalPhone = s.PrincipalPhone
+	model.Address = s.Address
+	model.AddressImg = s.AddressImg
+	model.Lng = s.Lng
+	model.Lat = s.Lat
+	model.Type = s.Type
+	model.City = s.City
+	model.Area = s.Area
+	model.Remark = s.Remark
+	model.StoreCode = s.StoreCode
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+}
+
+func (s *CustomerUpdateReq) GetId() interface{} {
+	return s.Id
+}
+
+type CustomerGetReq struct {
+	Id string `uri:"id"`
+}
+
+func (s *CustomerGetReq) GetId() interface{} {
+	return s.Id
+}
+
+type CustomerGetByPhoneReq struct {
+	Phone string `form:"phone"  vd:"len($)>0"`
+}
+type CustomerGetBorrowGasCylinderReq struct {
+	CustomerId string `form:"customerId"  vd:"len($)>0"`
+}
+
+type CustomerDeleteReq struct {
+	Id               string `json:"id" vd:"len($)>0"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *CustomerDeleteReq) GetId() interface{} {
+	return s.Id
+}

+ 103 - 0
app/admin/service/dto/device.go

@@ -0,0 +1,103 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type DeviceGetPageReq struct {
+	dto.Pagination `search:"-"`
+	Name           string `form:"name" search:"type:contains;column:name;table:goods"`            // 商品名称
+	MediaType      string `form:"MediaType" search:"type:contains;column:media_type;table:goods"` // 介质类型
+	IsShow         bool   `form:"isShow" search:"type:exact;column:is_show;table:goods"`          // 角色名称
+}
+
+func (m *DeviceGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type DeviceInsertReq struct {
+	Id          int    `json:"id" comment:"编码" swaggerignore:"true"`              // 编码
+	ProvUserId  string `json:"provUserId" gorm:"size:32;"`                        // 省平台用户id
+	ProvCmpCode string `json:"provCmpCode" gorm:"size:48;"  swaggerignore:"true"` // 所属机构登记编
+	Sn          string `json:"sn" gorm:"size:128;"`                               // 设备sn
+	Type        int    `json:"type" gorm:"size:32;"`                              // 1-手持枪 2-龙门
+	OptType     string `json:"optType"`                                           // 操作类型
+
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *DeviceInsertReq) Generate(model *model.Device) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.ProvUserId = s.ProvUserId
+	//model.UserId = s.UserId
+	model.ProvCmpCode = s.ProvCmpCode
+	model.Sn = s.Sn
+	model.Type = s.Type
+	model.OptType = s.OptType
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+	if s.DeptBy.DeptId != 0 {
+		model.DeptId = s.DeptId
+	}
+}
+
+func (s *DeviceInsertReq) GetId() interface{} {
+	return s.Id
+}
+
+type DeviceUpdateReq struct {
+	Id         int    `json:"id" comment:"编码"`              // 编码
+	ProvUserId string `json:"provUserId"`                   // 省平台用户id
+	UserId     int    `json:"userId"  swaggerignore:"true"` // 客户id
+	Sn         string `json:"sn"`                           // 设备sn
+	Type       int    `json:"type"`                         // 1-手持枪 2-龙门
+	OptType    string `json:"optType"`                      // 操作类型
+
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *DeviceUpdateReq) Generate(model *model.Device) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.ProvUserId = s.ProvUserId
+	model.Sn = s.Sn
+	model.Type = s.Type
+	model.OptType = s.OptType
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+}
+
+func (s *DeviceUpdateReq) GetId() interface{} {
+	return s.Id
+}
+
+type DeviceGetReq struct {
+	Id int `uri:"id"`
+}
+
+func (s *DeviceGetReq) GetId() interface{} {
+	return s.Id
+}
+
+type DeviceDeleteReq struct {
+	Id               int `json:"id"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *DeviceDeleteReq) GetId() interface{} {
+	return s.Id
+}

+ 91 - 0
app/admin/service/dto/dispatch_cost.go

@@ -0,0 +1,91 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type DispatchCostGetPageReq struct {
+	dto.Pagination `search:"-"`
+	Name           string `form:"name" search:"type:contains;column:name;table:dispatch_cost"` // 商品名称
+}
+
+func (m *DispatchCostGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type DispatchCostInsertReq struct {
+	Id               int     `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	Name             string  `json:"name"`                                 // 商品名称
+	Price            float64 `json:"price"`                                // 价格
+	Remark           string  `json:"remark"`                               // 备注
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *DispatchCostInsertReq) Generate(model *model.DispatchCost) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.Name = s.Name
+	model.Price = s.Price
+	model.Remark = s.Remark
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+	if s.DeptBy.DeptId != 0 {
+		model.DeptId = s.DeptId
+	}
+}
+
+func (s *DispatchCostInsertReq) GetId() interface{} {
+	return s.Id
+}
+
+type DispatchCostUpdateReq struct {
+	Id               int     `json:"id" comment:"编码"` // 编码
+	Name             string  `json:"name"`            // 商品名称
+	Price            float64 `json:"price"`           // 价格
+	Remark           string  `json:"remark"`          // 备注
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *DispatchCostUpdateReq) Generate(model *model.DispatchCost) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.Name = s.Name
+	model.Price = s.Price
+	model.Remark = s.Remark
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+}
+
+func (s *DispatchCostUpdateReq) GetId() interface{} {
+	return s.Id
+}
+
+type DispatchCostGetReq struct {
+	Id int `uri:"id"`
+}
+
+func (s *DispatchCostGetReq) GetId() interface{} {
+	return s.Id
+}
+
+type DispatchCostDeleteReq struct {
+	Id               int `json:"id"`
+	common.ControlBy `swaggerignore:"true"`
+}
+
+func (s *DispatchCostDeleteReq) GetId() interface{} {
+	return s.Id
+}

+ 54 - 0
app/admin/service/dto/fill_ckeck.go

@@ -0,0 +1,54 @@
+package dto
+
+import (
+	"gas-cylinder-api/app/admin/model"
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type FillCheckGetPageReq struct {
+	dto.Pagination `search:"-"`
+	InnerCode      string `form:"innerCode" search:"type:contains;column:inner_code;table:fill_check"` //
+}
+
+func (m *FillCheckGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type FillCheckInsertReq struct {
+	Id      int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	UserId  int    `swaggerignore:"true"`                        // 用户id
+	ChipUid string `json:"chipUid"`                              // 高频编码
+	model.ProvFillCheck
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+func (s *FillCheckInsertReq) Generate(model *model.FillCheck) {
+	if s.Id != 0 {
+		model.Id = s.Id
+	}
+	model.UserId = s.UserId
+	model.ProvFillCheck = s.ProvFillCheck
+	if s.ControlBy.UpdateBy != 0 {
+		model.UpdateBy = s.UpdateBy
+	}
+	if s.ControlBy.CreateBy != 0 {
+		model.CreateBy = s.CreateBy
+	}
+	if s.DeptBy.DeptId != 0 {
+		model.DeptId = s.DeptId
+	}
+}
+
+func (s *FillCheckInsertReq) GetId() interface{} {
+	return s.Id
+}
+
+type FillCheckGetReq struct {
+	Id int `uri:"id"`
+}
+
+func (s *FillCheckGetReq) GetId() interface{} {
+	return s.Id
+}

+ 34 - 0
app/admin/service/dto/fill_data.go

@@ -0,0 +1,34 @@
+package dto
+
+import (
+	"gas-cylinder-api/common/dto"
+	common "gas-cylinder-api/common/model"
+)
+
+type FillDataGetPageReq struct {
+	dto.Pagination `search:"-"`
+	StationId      string `form:"stationId" search:"-"`     // 气站id
+	UserId         string `form:"userId" search:"-"`        // 充装人员id
+	InnerCode      string `form:"innerCode" search:"-"`     // 气瓶内编码
+	ChipId         string `form:"chipId" search:"-"`        // 高频编码
+	StartFillTime  string `form:"startFillTime" search:"-"` // 充装开始时间
+	EndFillTime    string `form:"endFillTime" search:"-"`   // 充装结束时间
+
+}
+
+func (m *FillDataGetPageReq) GetNeedSearch() interface{} {
+	return *m
+}
+
+type FillDataInsertReq struct {
+	Id               int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
+	ScanGunCode      string `json:"scanGunCode"`
+	ChipUid          string `json:"chipUid"`
+	common.ControlBy `swaggerignore:"true"`
+	common.DeptBy    `swaggerignore:"true"`
+}
+
+// GetId 获取数据对应的ID
+func (s *FillDataInsertReq) GetId() interface{} {
+	return s.Id
+}

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików