1.优化零售订单审核接口;

2.查询零售订单列表接口增加入参:商品名称;
This commit is contained in:
chenlin 2024-01-11 15:45:54 +08:00
parent 4124d8862a
commit ae2d54b2fa
6 changed files with 230 additions and 41 deletions

View File

@ -161,6 +161,12 @@ func ErpOrderAudit(c *gin.Context) {
return return
} }
// 如果订单已审核而且是已支付状态,则不能取消审核
if erpOrder.State == model.ErpOrderStateAudited && erpOrder.PayStatus == model.HavePaid && req.State == 2 {
app.Error(c, http.StatusInternalServerError, err, "操作失败:已支付订单不能取消审核")
return
}
orderState := model.ErpOrderStateAudited orderState := model.ErpOrderStateAudited
stockState := model.OnSale stockState := model.OnSale
switch req.State { switch req.State {
@ -176,16 +182,19 @@ func ErpOrderAudit(c *gin.Context) {
return return
} }
// 检查支付方式,如果没有线上支付则默认为支付已完成 nPayStatus := model.NoCreatePayOrder
nPayStatus := model.WaitForPaying // 待支付 if req.State == 1 { // 审核
var cashiers []model.ErpOrderCashier // 检查支付方式,如果没有线上支付则默认为支付已完成
err = json.Unmarshal([]byte(erpOrder.CashierList), &cashiers) nPayStatus = model.WaitForPaying // 待支付
if err != nil { var cashiers []model.ErpOrderCashier
logger.Error("unmarshal CashierList err:", logger.Field("err", err)) err = json.Unmarshal([]byte(erpOrder.CashierList), &cashiers)
} if err != nil {
if !model.CheckIsOnlinePay(cashiers) { logger.Error("unmarshal CashierList err:", logger.Field("err", err))
nPayStatus = model.HavePaid // 已完成 }
stockState = model.SoldOut // 库存-已售 if !model.CheckIsOnlinePay(cashiers) {
nPayStatus = model.HavePaid // 已完成
stockState = model.SoldOut // 库存-已售
}
} }
begin := orm.Eloquent.Begin() begin := orm.Eloquent.Begin()

View File

@ -264,7 +264,7 @@ func AddRemark(c *gin.Context) {
// @Accept json // @Accept json
// @Param request body models.QueryCodeReq true "查询商品串码或条码模型" // @Param request body models.QueryCodeReq true "查询商品串码或条码模型"
// @Success 200 {object} models.QueryCodeResp // @Success 200 {object} models.QueryCodeResp
// @Router /api/v1/inventory/add_remark [post] // @Router /api/v1/inventory/query_code [post]
func QueryCode(c *gin.Context) { func QueryCode(c *gin.Context) {
req := &models.QueryCodeReq{} req := &models.QueryCodeReq{}
if err := c.ShouldBindJSON(&req); err != nil { if err := c.ShouldBindJSON(&req); err != nil {

View File

@ -179,19 +179,20 @@ type ErpOrderCreateReq struct {
// ErpOrderListReq 查询零售订单列表入参 // ErpOrderListReq 查询零售订单列表入参
type ErpOrderListReq struct { type ErpOrderListReq struct {
ScanCode string `json:"scan_code"` // 扫码枪扫码数据:串码 ScanCode string `json:"scan_code"` // 扫码枪扫码数据:串码
BillSn string `json:"bill_sn"` // 单据编号 BillSn string `json:"bill_sn"` // 单据编号
RetailType string `json:"retail_type"` // 销售类型sale 零售销售; rejected 零售退货 RetailType string `json:"retail_type"` // 销售类型sale 零售销售; rejected 零售退货
Uid int `json:"uid"` // 用户ID CommodityName string `json:"commodity_name"` // 商品名称
Tel string `json:"tel"` // 客户手机号 Uid int `json:"uid"` // 用户ID
Salesman uint32 `json:"salesman"` // 销售人员ID Tel string `json:"tel"` // 客户手机号
StoreId uint32 `json:"store_id"` // 门店ID Salesman uint32 `json:"salesman"` // 销售人员ID
State string `json:"state"` // 订单状态 StoreId uint32 `json:"store_id"` // 门店ID
PayStatus uint32 `json:"pay_status"` // 支付状态 0-未创建 1-待支付; 2-已支付 State string `json:"state"` // 订单状态
StartTime string `json:"start_time"` // 开始时间 PayStatus uint32 `json:"pay_status"` // 支付状态 0-未创建 1-待支付; 2-已支付
EndTime string `json:"end_time"` // 结束时间 StartTime string `json:"start_time"` // 开始时间
PageIndex int `json:"pageIndex"` // 页码 EndTime string `json:"end_time"` // 结束时间
PageSize int `json:"pageSize"` // 页面条数 PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
} }
// ErpOrderListResp 查询零售订单列表出参 // ErpOrderListResp 查询零售订单列表出参
@ -411,10 +412,14 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) {
if m.PageSize == 0 { if m.PageSize == 0 {
m.PageSize = 10 m.PageSize = 10
} }
if m.ScanCode != "" { // 扫了串码,需要查询已售的商品数据 if m.ScanCode != "" { // 扫了串码,需要查询已售的商品数据
return QueryListByScanCode(m.ScanCode) return QueryListByScanCode(m.ScanCode)
} }
if m.CommodityName != "" { // 输入了商品名称进行查询
return QueryListByCommodityName(m)
}
qs := orm.Eloquent.Table("erp_order") qs := orm.Eloquent.Table("erp_order")
if m.BillSn != "" { if m.BillSn != "" {
qs = qs.Where("bill_sn=?", m.BillSn) qs = qs.Where("bill_sn=?", m.BillSn)
@ -481,6 +486,7 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) {
return resp, nil return resp, nil
} }
// QueryListByScanCode 通过扫描串码查询列表
func QueryListByScanCode(scanCode string) (*ErpOrderListResp, error) { func QueryListByScanCode(scanCode string) (*ErpOrderListResp, error) {
resp := &ErpOrderListResp{} resp := &ErpOrderListResp{}
@ -512,6 +518,66 @@ func QueryListByScanCode(scanCode string) (*ErpOrderListResp, error) {
return resp, nil return resp, nil
} }
// QueryListByCommodityName 通过商品名称查询列表
func QueryListByCommodityName(req *ErpOrderListReq) (*ErpOrderListResp, error) {
resp := &ErpOrderListResp{
PageIndex: req.PageIndex,
PageSize: req.PageSize,
}
page := req.PageIndex - 1
if page < 0 {
page = 0
}
if req.PageSize == 0 {
req.PageSize = 10
}
qs := orm.Eloquent.Debug().Table("erp_order_commodity").
Select("erp_order_commodity.*, erp_order.*").
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id")
if req.CommodityName != "" { // 商品名称
qs = qs.Where("erp_order_commodity.erp_commodity_name like ?", "%"+req.CommodityName+"%")
}
if req.Tel != "" { // 用户手机号
qs = qs.Where("erp_order.tel=?", req.Tel)
}
if req.StoreId != 0 { // 门店ID
qs = qs.Where("erp_order.store_id=?", req.StoreId)
}
qs.Where("erp_order.pay_status = ?", HavePaid)
es := qs
var result []RetailDetailByJoin
err := qs.Order("erp_order.audit_time DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&result).Error
if err != nil && err != RecordNotFound {
logger.Error("erp commodity list err:", logger.Field("err", err))
return resp, err
}
var count int64
err = es.Count(&count).Error
if err != nil {
logger.Errorf("QueryRetailMargin count err:", err.Error())
return nil, err
}
orders := packData(result)
erpOrderListSetCashier(orders)
erpOrderListSetSalesman(orders)
resp.List = orders
//跟之前保持一致
resp.Total = int(count)
resp.PageIndex = page + 1
resp.PageSize = req.PageSize
return resp, nil
}
// UpdateStock 扣减or添加库存 // UpdateStock 扣减or添加库存
// 零售订单: // 零售订单:
// 有串码,通过串码查找库存详情表,然后更改对应库存的状态为"已售" // 有串码,通过串码查找库存详情表,然后更改对应库存的状态为"已售"
@ -723,6 +789,7 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
staffProfit += item.StaffProfit * erpCommodity.Brokerage2 staffProfit += item.StaffProfit * erpCommodity.Brokerage2
} }
var salesmanList []ErpOrderSales
for _, item := range m.Salesman { for _, item := range m.Salesman {
item.SalesProfitPer = salesProfit / float64(len(m.Salesman)) item.SalesProfitPer = salesProfit / float64(len(m.Salesman))
item.StaffProfitPer = staffProfit / float64(len(m.Salesman)) item.StaffProfitPer = staffProfit / float64(len(m.Salesman))
@ -734,8 +801,11 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
} }
item.Name = userInfo.NickName item.Name = userInfo.NickName
item.SalesmanPer = staffProfit * userInfo.SalesCommRate / float64(len(m.Salesman)) item.SalesmanPer = staffProfit * userInfo.SalesCommRate / float64(len(m.Salesman))
salesmanList = append(salesmanList, item)
} }
m.Salesman = salesmanList
jSalesman, err := json.Marshal(m.Salesman) jSalesman, err := json.Marshal(m.Salesman)
if err != nil { if err != nil {
logger.Error("salesman marshal err:", logger.Field("err", err)) logger.Error("salesman marshal err:", logger.Field("err", err))
@ -770,13 +840,13 @@ func GetErpOrderCommodityMap(ids []uint32) (map[uint32]ErpOrderCommodity, error)
return commodityMap, nil return commodityMap, nil
} }
var commodities []ErpOrderCommodity var commodities []ErpOrderCommodity
err := orm.Eloquent.Table("erp_order_commodity").Where("id IN (?)", ids).Find(&commodities).Error err := orm.Eloquent.Table("erp_order_commodity").Where("erp_commodity_id IN (?)", ids).Find(&commodities).Error
if err != nil { if err != nil {
logger.Error("commodities err:", logger.Field("err", err)) logger.Error("commodities err:", logger.Field("err", err))
return commodityMap, err return commodityMap, err
} }
for i, _ := range commodities { for i, _ := range commodities {
commodityMap[commodities[i].ID] = commodities[i] commodityMap[commodities[i].ErpCommodityId] = commodities[i]
} }
return commodityMap, nil return commodityMap, nil
} }
@ -2447,7 +2517,7 @@ func EditErpOrder(req *ErpOrderCreateReq, sysUser *SysUser) error {
return errors.New("操作失败:" + err.Error()) return errors.New("操作失败:" + err.Error())
} }
if orderInfo.State != "ErpOrderStateUnAudit" { if orderInfo.State != ErpOrderStateUnAudit {
logger.Error("EditErpOrder err:", logger.Field("err", err)) logger.Error("EditErpOrder err:", logger.Field("err", err))
return errors.New("订单状态不是待审核,操作失败") return errors.New("订单状态不是待审核,操作失败")
} }
@ -2565,8 +2635,12 @@ func checkOrderData(req *ErpOrderCreateReq, sysUser *SysUser) (*ErpOrder, error)
} }
// 校验商品相关金额是否符合要求 // 校验商品相关金额是否符合要求
for i, _ := range req.ErpOrderCommodities { for i, item := range req.ErpOrderCommodities {
if req.RetailType == RetailTypeRejected { // 零售退货订单 if req.RetailType == RetailTypeRejected { // 零售退货订单
if item.RejectedOrderCommodityId == 0 {
logger.Error("rejected_order_commodity_id is null")
return nil, errors.New("rejected_order_commodity_id is null")
}
v, ok := orderCommodityMap[req.ErpOrderCommodities[i].RejectedOrderCommodityId] v, ok := orderCommodityMap[req.ErpOrderCommodities[i].RejectedOrderCommodityId]
if ok { if ok {
v.RejectedPrice = req.ErpOrderCommodities[i].RejectedPrice // 退货单价 v.RejectedPrice = req.ErpOrderCommodities[i].RejectedPrice // 退货单价

View File

@ -1869,15 +1869,15 @@ const docTemplate = `{
"tags": [ "tags": [
"库存管理" "库存管理"
], ],
"summary": "查询商品串码或条码", "summary": "添加备注",
"parameters": [ "parameters": [
{ {
"description": "查询商品串码或条码模型", "description": "添加备注模型",
"name": "request", "name": "request",
"in": "body", "in": "body",
"required": true, "required": true,
"schema": { "schema": {
"$ref": "#/definitions/models.QueryCodeReq" "$ref": "#/definitions/inventorymanage.AddRemarkReq"
} }
} }
], ],
@ -1885,7 +1885,7 @@ const docTemplate = `{
"200": { "200": {
"description": "OK", "description": "OK",
"schema": { "schema": {
"$ref": "#/definitions/models.QueryCodeResp" "$ref": "#/definitions/app.Response"
} }
} }
} }
@ -2056,6 +2056,39 @@ const docTemplate = `{
} }
} }
}, },
"/api/v1/inventory/query_code": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"库存管理"
],
"summary": "查询商品串码或条码",
"parameters": [
{
"description": "查询商品串码或条码模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.QueryCodeReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.QueryCodeResp"
}
}
}
}
},
"/api/v1/loginlog": { "/api/v1/loginlog": {
"put": { "put": {
"security": [ "security": [
@ -5597,6 +5630,10 @@ const docTemplate = `{
"description": "单据编号", "description": "单据编号",
"type": "string" "type": "string"
}, },
"commodity_name": {
"description": "商品名称",
"type": "string"
},
"end_time": { "end_time": {
"description": "结束时间", "description": "结束时间",
"type": "string" "type": "string"
@ -6555,6 +6592,9 @@ const docTemplate = `{
"description": "1-管理系统 2-合作商系统", "description": "1-管理系统 2-合作商系统",
"type": "integer" "type": "integer"
}, },
"uid": {
"type": "integer"
},
"username": { "username": {
"type": "string" "type": "string"
}, },

View File

@ -1858,15 +1858,15 @@
"tags": [ "tags": [
"库存管理" "库存管理"
], ],
"summary": "查询商品串码或条码", "summary": "添加备注",
"parameters": [ "parameters": [
{ {
"description": "查询商品串码或条码模型", "description": "添加备注模型",
"name": "request", "name": "request",
"in": "body", "in": "body",
"required": true, "required": true,
"schema": { "schema": {
"$ref": "#/definitions/models.QueryCodeReq" "$ref": "#/definitions/inventorymanage.AddRemarkReq"
} }
} }
], ],
@ -1874,7 +1874,7 @@
"200": { "200": {
"description": "OK", "description": "OK",
"schema": { "schema": {
"$ref": "#/definitions/models.QueryCodeResp" "$ref": "#/definitions/app.Response"
} }
} }
} }
@ -2045,6 +2045,39 @@
} }
} }
}, },
"/api/v1/inventory/query_code": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"库存管理"
],
"summary": "查询商品串码或条码",
"parameters": [
{
"description": "查询商品串码或条码模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.QueryCodeReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.QueryCodeResp"
}
}
}
}
},
"/api/v1/loginlog": { "/api/v1/loginlog": {
"put": { "put": {
"security": [ "security": [
@ -5586,6 +5619,10 @@
"description": "单据编号", "description": "单据编号",
"type": "string" "type": "string"
}, },
"commodity_name": {
"description": "商品名称",
"type": "string"
},
"end_time": { "end_time": {
"description": "结束时间", "description": "结束时间",
"type": "string" "type": "string"
@ -6544,6 +6581,9 @@
"description": "1-管理系统 2-合作商系统", "description": "1-管理系统 2-合作商系统",
"type": "integer" "type": "integer"
}, },
"uid": {
"type": "integer"
},
"username": { "username": {
"type": "string" "type": "string"
}, },

View File

@ -1192,6 +1192,9 @@ definitions:
bill_sn: bill_sn:
description: 单据编号 description: 单据编号
type: string type: string
commodity_name:
description: 商品名称
type: string
end_time: end_time:
description: 结束时间 description: 结束时间
type: string type: string
@ -1882,6 +1885,8 @@ definitions:
sys_type: sys_type:
description: 1-管理系统 2-合作商系统 description: 1-管理系统 2-合作商系统
type: integer type: integer
uid:
type: integer
username: username:
type: string type: string
uuid: uuid:
@ -4190,20 +4195,20 @@ paths:
consumes: consumes:
- application/json - application/json
parameters: parameters:
- description: 查询商品串码或条码模型 - description: 添加备注模型
in: body in: body
name: request name: request
required: true required: true
schema: schema:
$ref: '#/definitions/models.QueryCodeReq' $ref: '#/definitions/inventorymanage.AddRemarkReq'
produces: produces:
- application/json - application/json
responses: responses:
"200": "200":
description: OK description: OK
schema: schema:
$ref: '#/definitions/models.QueryCodeResp' $ref: '#/definitions/app.Response'
summary: 查询商品串码或条码 summary: 添加备注
tags: tags:
- 库存管理 - 库存管理
/api/v1/inventory/delivery: /api/v1/inventory/delivery:
@ -4311,6 +4316,27 @@ paths:
summary: 批量打印 summary: 批量打印
tags: tags:
- 库存管理 - 库存管理
/api/v1/inventory/query_code:
post:
consumes:
- application/json
parameters:
- description: 查询商品串码或条码模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.QueryCodeReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.QueryCodeResp'
summary: 查询商品串码或条码
tags:
- 库存管理
/api/v1/loginlog: /api/v1/loginlog:
post: post:
consumes: consumes: