1.修复缺陷,优化代码:

(1)解决权限判断时,门店只有1家时sql报错的问题;
(2)解决零售明细筛选退货单金额为正,且汇总数据为空的问题;
This commit is contained in:
chenlin 2024-05-27 19:01:04 +08:00
parent 4d18ca0416
commit ee90ce6630
4 changed files with 106 additions and 26 deletions

View File

@ -1695,8 +1695,13 @@ func (m *ErpStockListReq) stockNoEmptyList(c *gin.Context) (*ErpStockListResp, e
}
} else {
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
es = es.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
es = es.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
es = es.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -1888,8 +1893,13 @@ func (m *ErpStockListReq) allCommodityList(c *gin.Context) (*ErpStockListResp, e
}
} else {
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
es = es.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
es = es.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
es = es.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -2069,7 +2079,11 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context) (*ErpStockCommo
}
} else {
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}

View File

@ -509,7 +509,11 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) {
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -730,7 +734,11 @@ func QueryListByCommodityName(req *ErpOrderListReq, showConfig string, c *gin.Co
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("erp_order.store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("erp_order.store_id = ?", storeList[0])
} else {
qs = qs.Where("erp_order.store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -1899,7 +1907,11 @@ func QueryStoreManageData(req *ErpOrderStoreManageDataReq, c *gin.Context) (*Erp
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -2231,7 +2243,7 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR
if req.StartTime != "" {
startTime, err := time.Parse(QueryTimeFormat, req.StartTime)
if err == nil {
qs = qs.Where("erp_order.created_at>?", startTime)
qs = qs.Where("erp_order.audit_time>?", startTime)
} else {
logger.Errorf("QueryRetailMargin time start parse err:", err.Error())
}
@ -2239,7 +2251,7 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR
if req.EndTime != "" {
endTime, err := time.Parse(QueryTimeFormat, req.EndTime)
if err == nil {
qs = qs.Where("erp_order.created_at<?", endTime)
qs = qs.Where("erp_order.audit_time<?", endTime)
} else {
logger.Errorf("QueryRetailMargin time end parse err:", err.Error())
}
@ -2347,13 +2359,6 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR
} else {
existingData.GrossMargins = float64ToPercentage(existingData.SalesMargin / existingData.SalesAmount)
}
// 如果是拒绝的销售,进行相应的处理
if existingData.RetailType == RetailTypeRejected {
existingData.SalesAmount = -existingData.SalesAmount
existingData.SalesCost = -existingData.SalesCost
existingData.SalesMargin = -existingData.SalesMargin
}
} else {
// 如果不存在,说明是新数据,直接添加到列表中
data := &RetailMarginData{
@ -2750,40 +2755,50 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
orderSumQs := orm.Eloquent.Table("erp_order_commodity AS oc").Select("oc.*, eo.*").
Joins("JOIN erp_order AS eo ON oc.erp_order_id = eo.id")
rejectedOrderSumQs := orm.Eloquent.Table("erp_order_commodity AS oc").Select("oc.*, eo.*").
Joins("JOIN erp_order AS eo ON oc.erp_order_id = eo.id")
if req.ErpCategoryId != 0 { // 商品分类
qs = qs.Where("erp_order_commodity.erp_category_id=?", req.ErpCategoryId)
es = es.Where("erp_order_commodity.erp_category_id=?", req.ErpCategoryId)
orderSumQs = orderSumQs.Where("oc.erp_category_id=?", req.ErpCategoryId)
rejectedOrderSumQs = rejectedOrderSumQs.Where("oc.erp_category_id=?", req.ErpCategoryId)
}
if req.ErpCommodityName != "" { // 商品名称
qs = qs.Where("erp_order_commodity.erp_commodity_name = ?", req.ErpCommodityName)
es = es.Where("erp_order_commodity.erp_commodity_name = ?", req.ErpCommodityName)
orderSumQs = orderSumQs.Where("oc.erp_commodity_name = ?", req.ErpCommodityName)
rejectedOrderSumQs = rejectedOrderSumQs.Where("oc.erp_commodity_name = ?", req.ErpCommodityName)
}
if req.RetailType != "" { // 销售类型
qs = qs.Where("erp_order.retail_type=?", req.RetailType)
qs = qs.Where("erp_order.retail_type=?", req.RetailType)
es = es.Where("erp_order.retail_type=?", req.RetailType)
orderSumQs = orderSumQs.Where("eo.retail_type=?", req.RetailType)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.retail_type=?", req.RetailType)
}
if req.Uid != 0 { // 用户ID
qs = qs.Where("erp_order.uid=?", req.Uid)
es = es.Where("erp_order.uid=?", req.Uid)
orderSumQs = orderSumQs.Where("eo.uid=?", req.Uid)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.uid=?", req.Uid)
}
if req.Tel != "" { // 用户手机号
qs = qs.Where("erp_order.tel=?", req.Tel)
qs = qs.Where("erp_order.tel=?", req.Tel)
es = es.Where("erp_order.tel=?", req.Tel)
orderSumQs = orderSumQs.Where("eo.tel=?", req.Tel)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.tel=?", req.Tel)
}
if req.StoreId != 0 { // 门店ID
qs = qs.Where("erp_order.store_id=?", req.StoreId)
es = es.Where("erp_order.store_id=?", req.StoreId)
orderSumQs = orderSumQs.Where("eo.store_id=?", req.StoreId)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.store_id=?", req.StoreId)
}
if req.IMEI != "" { // 串码
qs = qs.Where("erp_order_commodity.imei=?", req.IMEI)
es = es.Where("erp_order_commodity.imei=?", req.IMEI)
orderSumQs = orderSumQs.Where("oc.imei=?", req.IMEI)
rejectedOrderSumQs = rejectedOrderSumQs.Where("oc.imei=?", req.IMEI)
}
// 非管理员才判断所属门店
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
@ -2795,9 +2810,17 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("erp_order.store_id IN (?)", storeList)
es = es.Where("erp_order.store_id IN (?)", storeList)
orderSumQs = orderSumQs.Where("erp_order.store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("erp_order.store_id = ?", storeList[0])
es = es.Where("erp_order.store_id = ?", storeList[0])
orderSumQs = orderSumQs.Where("eo.store_id = ?", storeList[0])
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.store_id = ?", storeList[0])
} else {
qs = qs.Where("erp_order.store_id IN (?)", storeList)
es = es.Where("erp_order.store_id IN (?)", storeList)
orderSumQs = orderSumQs.Where("eo.store_id IN (?)", storeList)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}
@ -2806,6 +2829,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
qs = qs.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman))
es = es.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman))
orderSumQs = orderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman))
rejectedOrderSumQs = rejectedOrderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman))
}
if req.StartTime != "" { // 审核开始时间
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
@ -2815,6 +2839,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
qs = qs.Where("erp_order.audit_time > ?", parse)
es = es.Where("erp_order.audit_time > ?", parse)
orderSumQs = orderSumQs.Where("eo.audit_time > ?", parse)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.audit_time > ?", parse)
}
if req.EndTime != "" { // 审核结束时间
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
@ -2825,11 +2850,13 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
qs = qs.Where("erp_order.audit_time < ?", parse)
es = es.Where("erp_order.audit_time < ?", parse)
orderSumQs = orderSumQs.Where("eo.audit_time < ?", parse)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.audit_time < ?", parse)
}
if showConfig.ShowAll == "OFF" {
qs = qs.Where("erp_order.is_print = ? or erp_order.retail_type = ?", HavePrinted, RetailTypeRejected)
es = es.Where("erp_order.is_print = ? or erp_order.retail_type = ?", HavePrinted, RetailTypeRejected)
orderSumQs = orderSumQs.Where("eo.is_print = ? or eo.retail_type = ?", HavePrinted, RetailTypeRejected)
rejectedOrderSumQs = rejectedOrderSumQs.Where("eo.is_print = ? or eo.retail_type = ?", HavePrinted, RetailTypeRejected)
}
qs.Where("erp_order.pay_status = ? or (erp_order.retail_type = ? and erp_order.state != ?)",
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
@ -2837,6 +2864,8 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
orderSumQs.Where("eo.pay_status = ? or (eo.retail_type = ? and eo.state != ?)",
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
rejectedOrderSumQs.Where("eo.pay_status = ? or (eo.retail_type = ? and eo.state != ?)",
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
// 销售订单的汇总数据
var sumData RetailDetailTotalData
@ -2847,7 +2876,6 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
}
// 退货订单的汇总数据
var rejectedSumData RetailDetailTotalData
rejectedOrderSumQs := orderSumQs
rejectedSumData, err = getRetailDetailTotalDataJoinErpOrder(rejectedOrderSumQs, RetailTypeRejected)
if err != nil {
logger.Error("query sum data err:", logger.Field("err", err))
@ -3026,8 +3054,34 @@ func packData(result []RetailDetailByJoin) []ErpOrder {
order.InvoiceNumber = item.InvoiceNumber
order.RejectedTotalAmount = item.RejectedTotalAmount
order.RejectedTotalCount = item.RejectedTotalCount
if order.RetailType == RetailTypeRejected { // 退货订单,金额需要转换为负值
order.TotalRetailPrice = -math.Abs(order.TotalRetailPrice)
order.TotalAmount = -math.Abs(order.TotalAmount)
order.TotalCount = -int32(math.Abs(float64(order.TotalCount)))
order.TotalSalesProfit = -math.Abs(order.TotalSalesProfit)
order.TotalStaffProfit = -math.Abs(order.TotalStaffProfit)
order.TotalDiscount = -math.Abs(order.TotalDiscount)
order.VmCount = -uint32(math.Abs(float64(order.VmCount)))
order.StorePer = -math.Abs(order.StorePer)
}
}
if order.RetailType == RetailTypeRejected { // 退货订单,金额需要转换为负值
item.Count = -item.Count
item.RetailPrice = -item.RetailPrice
item.SalePrice = -item.SalePrice
item.Amount = -item.Amount
item.SaleDiscount = -item.SaleDiscount
item.MemberDiscount = -item.MemberDiscount
item.VmDiscount = -item.VmDiscount
item.ReceivedAmount = -item.ReceivedAmount
item.RejectedAmount = -item.RejectedAmount
item.SalesProfit = -item.SalesProfit
item.StaffProfit = -item.StaffProfit
item.StaffCostPrice = -item.StaffCostPrice
item.WholesalePrice = -item.WholesalePrice
}
// 订单商品数据
commodity.CreatedAt = item.ErpOrderCommodity.CreatedAt
commodity.ErpOrderId = item.ErpOrderId
@ -3119,7 +3173,11 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}

View File

@ -579,7 +579,11 @@ func (m *ErpPurchaseOrderListReq) List(c *gin.Context) (*ErpPurchaseOrderListRes
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
}

View File

@ -108,7 +108,11 @@ func (m *RecycleCardOrderListReq) List(c *gin.Context) (RecycleCardOrderListRsp,
}
} else {
if len(storeList) > 0 {
qs = qs.Where("store_id IN (?)", storeList)
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
}
} else {
return RecycleCardOrderListRsp{}, errors.New("用户未绑定门店")
}