1.修复缺陷,优化代码:
(1)优化库存列表查询sql,解决数据重复问题; (2)报表查询入参增加串码筛选; (3)系统管理员登录时返回所有门店列表;
This commit is contained in:
parent
c2c2782a7b
commit
4d18ca0416
|
@ -1506,47 +1506,69 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
} else { // 没传门店id,则子查询先求库存表中erp_commodity_id相同的count之和
|
||||
if len(storeList) == 0 {
|
||||
qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
} else {
|
||||
qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
}
|
||||
} else {
|
||||
qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count," +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
//Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Group("erp_commodity.id").
|
||||
//Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId).
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
//Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Group("erp_commodity.id").
|
||||
//Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId).
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
}
|
||||
//} else { // 没传门店id,则子查询先求库存表中erp_commodity_id相同的count之和
|
||||
// if len(storeList) == 0 {
|
||||
// qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
// "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
// Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
// "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
// Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
// Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
// Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
// "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
// "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
// es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
// "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
// Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
// "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
// Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
// Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
// Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
// "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
// "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
// } else {
|
||||
// qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
// "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
// Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
// "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
// Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
// Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
// Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
// "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
// "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
// es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
// "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
// Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
// "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
// Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
// Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
// Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
// "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
// "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
// }
|
||||
//}
|
||||
|
||||
if m.SerialNumber != "" {
|
||||
qs = qs.Where("erp_commodity.serial_number=?", m.SerialNumber)
|
||||
|
@ -1924,7 +1946,8 @@ func (m *ErpStockListReq) allCommodityList(c *gin.Context) (*ErpStockListResp, e
|
|||
}
|
||||
|
||||
var count int64
|
||||
err := es.Count(&count).Error
|
||||
err := orm.Eloquent.Debug().Table("(?) AS subquery", es).Count(&count).Error
|
||||
//err := es.Count(&count).Error
|
||||
if err != nil {
|
||||
logger.Error("commodityList count err", logger.Field("err", err))
|
||||
return resp, err
|
||||
|
|
|
@ -326,6 +326,7 @@ type ErpOrderRetailDetailReq struct {
|
|||
ErpCategoryId uint32 `json:"erp_category_id"` // 分类id
|
||||
ErpCommodityName string `json:"erp_commodity_name"` // 商品名称
|
||||
Salesman uint32 `json:"salesman"` // 销售人员ID
|
||||
IMEI string `json:"imei"` // 串码
|
||||
StartTime string `json:"start_time"` // 开始时间
|
||||
EndTime string `json:"end_time"` // 结束时间
|
||||
PageIndex int `json:"pageIndex"` // 页码
|
||||
|
@ -1301,7 +1302,8 @@ func erpOrderListSetCashier(list []ErpOrder) {
|
|||
}
|
||||
|
||||
func (m *ErpOrder) SetErpCashier() {
|
||||
if m.CashierList != "" && m.RetailType == RetailTypeSale { // 临时限制,退货订单不展示具体付款方式
|
||||
//if m.CashierList != "" && m.RetailType == RetailTypeSale { // 临时限制,退货订单不展示具体付款方式
|
||||
if m.CashierList != "" {
|
||||
var cashiers []ErpOrderCashier
|
||||
err := json.Unmarshal([]byte(m.CashierList), &cashiers)
|
||||
if err != nil {
|
||||
|
@ -2320,19 +2322,31 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR
|
|||
key := fmt.Sprintf("%d_%d_%s", item.StoreID, item.ErpCommodityId, item.RetailType)
|
||||
|
||||
var nCount int32
|
||||
var salesAmount, salesCost, salesMargin float64
|
||||
if item.RetailType == RetailTypeRejected {
|
||||
nCount = -int32(item.Count)
|
||||
salesAmount = -item.ReceivedAmount
|
||||
salesCost = -float64(int32(item.WholesalePrice) * item.Count)
|
||||
salesMargin = -(item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count))
|
||||
} else {
|
||||
nCount = int32(item.Count)
|
||||
salesAmount = item.ReceivedAmount
|
||||
salesCost = float64(int32(item.WholesalePrice) * item.Count)
|
||||
salesMargin = item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)
|
||||
}
|
||||
// 检查是否已经处理过这个组合的数据
|
||||
if existingData, ok := processedData[key]; ok {
|
||||
// 如果存在,说明已经有数据,进行合并操作
|
||||
existingData.Count += nCount
|
||||
existingData.SalesAmount += item.ReceivedAmount
|
||||
existingData.SalesCost += float64(int32(item.WholesalePrice) * item.Count)
|
||||
existingData.SalesMargin = existingData.SalesAmount - existingData.SalesCost
|
||||
existingData.GrossMargins = float64ToPercentage(existingData.SalesMargin / existingData.SalesAmount)
|
||||
existingData.SalesAmount += salesAmount
|
||||
existingData.SalesCost += salesCost
|
||||
existingData.SalesMargin += salesMargin
|
||||
|
||||
if existingData.SalesAmount == 0 {
|
||||
existingData.GrossMargins = "--"
|
||||
} else {
|
||||
existingData.GrossMargins = float64ToPercentage(existingData.SalesMargin / existingData.SalesAmount)
|
||||
}
|
||||
|
||||
// 如果是拒绝的销售,进行相应的处理
|
||||
if existingData.RetailType == RetailTypeRejected {
|
||||
|
@ -2354,7 +2368,11 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR
|
|||
SalesAmount: item.ReceivedAmount,
|
||||
SalesCost: float64(int32(item.WholesalePrice) * item.Count),
|
||||
SalesMargin: item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count),
|
||||
GrossMargins: float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) / item.ReceivedAmount),
|
||||
GrossMargins: "--",
|
||||
//GrossMargins: float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) / item.ReceivedAmount),
|
||||
}
|
||||
if item.ReceivedAmount != 0 {
|
||||
data.GrossMargins = float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) / item.ReceivedAmount)
|
||||
}
|
||||
|
||||
// 如果是拒绝的销售,进行相应的处理
|
||||
|
@ -2435,7 +2453,7 @@ func QueryRetailDetail(req *ErpOrderRetailDetailReq, c *gin.Context) (*ErpOrderR
|
|||
resp := &ErpOrderRetailDetailResp{}
|
||||
|
||||
var err error
|
||||
if (req.ErpCategoryId != 0 || req.ErpCommodityName != "") && req.BillSn == "" { // 商品分类or商品名称不为空且订单编号为空
|
||||
if (req.ErpCategoryId != 0 || req.ErpCommodityName != "" || req.IMEI != "") && req.BillSn == "" { // 商品分类or商品名称不为空且订单编号为空
|
||||
// 联表查询
|
||||
resp, err = queryRetailDetailByJoin(req, c)
|
||||
} else {
|
||||
|
@ -2762,6 +2780,11 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
|||
es = es.Where("erp_order.store_id=?", req.StoreId)
|
||||
orderSumQs = orderSumQs.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)
|
||||
}
|
||||
// 非管理员才判断所属门店
|
||||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||
sysUser, err := GetSysUserByCtx(c)
|
||||
|
|
|
@ -111,6 +111,7 @@ type InventoryReportAllotDetailReq struct {
|
|||
ReceiveStoreId []uint32 `json:"receive_store_id"` // 调入门店id
|
||||
CommodityName []string `json:"commodity_name"` // 商品名称
|
||||
CategoryID []uint32 `json:"category_id"` // 商品分类id
|
||||
IMEI string `json:"imei"` // 串码
|
||||
State uint32 `json:"state"` // 调拨状态:1-调拨中 2-已完成
|
||||
AuditTimeStart string `json:"audit_time_start"` // 审核/发起开始时间
|
||||
AuditTimeEnd string `json:"audit_time_end"` // 审核/发起结束时间
|
||||
|
@ -195,6 +196,7 @@ type InventoryReportOtherDetailReq struct {
|
|||
CommodityName []string `json:"commodity_name"` // 商品名称
|
||||
CategoryID []uint32 `json:"category_id"` // 商品分类id
|
||||
Type uint32 `json:"type"` // 出入库方式:1-产品入库 2-盘点入库 3-系统出库 4-盘点出库
|
||||
IMEI string `json:"imei"` // 串码
|
||||
StartTime string `json:"start_time"` // 开始时间/入库时间
|
||||
EndTime string `json:"end_time"` // 结束时间/出库时间
|
||||
IsExport uint32 `json:"is_export"` // 1-导出
|
||||
|
@ -983,6 +985,11 @@ func (m *InventoryReportAllotDetailReq) ReportAllotDetailList(c *gin.Context) (*
|
|||
countQuery = countQuery.Where("erp_inventory_allot_commodity.category_id IN (?)", categoryIDs)
|
||||
}
|
||||
|
||||
if m.IMEI != "" {
|
||||
qs = qs.Where("erp_inventory_allot_commodity.imei = ?", m.IMEI)
|
||||
countQuery = countQuery.Where("erp_inventory_allot_commodity.imei = ?", m.IMEI)
|
||||
}
|
||||
|
||||
if m.State != 0 { // 调拨状态
|
||||
switch m.State {
|
||||
case 1: // 调拨中
|
||||
|
@ -1566,23 +1573,43 @@ func (m *InventoryReportOtherDetailReq) ReportByOtherDetailList(c *gin.Context)
|
|||
allData[i].CategoryName = commodityInfo.ErpCategoryName
|
||||
}
|
||||
|
||||
if (len(m.SerialNumber) == 0 || data.SerialNumber == m.SerialNumber) &&
|
||||
(len(m.StoreId) == 0 || tools.Uint32SliceContains(m.StoreId, data.StoreId)) &&
|
||||
(len(m.CommodityName) == 0 || tools.StringSliceContains(m.CommodityName, data.CommodityName)) &&
|
||||
(len(m.CategoryID) == 0 || tools.Uint32SliceContains(m.CategoryID, allData[i].CategoryID)) &&
|
||||
(m.Type == 0 || m.Type == data.Type) &&
|
||||
((m.StartTime == "" && m.EndTime == "") || (data.StockTime.After(startTime) && data.StockTime.Before(endTime))) {
|
||||
if data.Type == 3 || data.Type == 4 { // 系统出库、盘点出库
|
||||
totalPurchasePrice -= allData[i].PurchasePrice
|
||||
totalEmployeePrice -= allData[i].EmployeePrice
|
||||
if m.IMEI != "" {
|
||||
if data.IMEI == m.IMEI {
|
||||
if data.Type == 3 || data.Type == 4 { // 系统出库、盘点出库
|
||||
totalPurchasePrice -= allData[i].PurchasePrice
|
||||
totalEmployeePrice -= allData[i].EmployeePrice
|
||||
|
||||
allData[i].PurchasePrice = -allData[i].PurchasePrice
|
||||
allData[i].EmployeePrice = -allData[i].EmployeePrice
|
||||
allData[i].PurchasePrice = -allData[i].PurchasePrice
|
||||
allData[i].EmployeePrice = -allData[i].EmployeePrice
|
||||
} else {
|
||||
totalPurchasePrice += allData[i].PurchasePrice
|
||||
totalEmployeePrice += allData[i].EmployeePrice
|
||||
}
|
||||
filteredData = append(filteredData, allData[i])
|
||||
break
|
||||
} else {
|
||||
totalPurchasePrice += allData[i].PurchasePrice
|
||||
totalEmployeePrice += allData[i].EmployeePrice
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
if (len(m.SerialNumber) == 0 || data.SerialNumber == m.SerialNumber) &&
|
||||
(len(m.StoreId) == 0 || tools.Uint32SliceContains(m.StoreId, data.StoreId)) &&
|
||||
(len(m.CommodityName) == 0 || tools.StringSliceContains(m.CommodityName, data.CommodityName)) &&
|
||||
(len(m.CategoryID) == 0 || tools.Uint32SliceContains(m.CategoryID, allData[i].CategoryID)) &&
|
||||
(m.Type == 0 || m.Type == data.Type) &&
|
||||
((m.StartTime == "" && m.EndTime == "") || (data.StockTime.After(startTime) && data.StockTime.Before(endTime))) {
|
||||
if data.Type == 3 || data.Type == 4 { // 系统出库、盘点出库
|
||||
totalPurchasePrice -= allData[i].PurchasePrice
|
||||
totalEmployeePrice -= allData[i].EmployeePrice
|
||||
|
||||
allData[i].PurchasePrice = -allData[i].PurchasePrice
|
||||
allData[i].EmployeePrice = -allData[i].EmployeePrice
|
||||
} else {
|
||||
totalPurchasePrice += allData[i].PurchasePrice
|
||||
totalEmployeePrice += allData[i].EmployeePrice
|
||||
}
|
||||
|
||||
filteredData = append(filteredData, allData[i])
|
||||
}
|
||||
filteredData = append(filteredData, allData[i])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -498,6 +498,7 @@ type ErpPurchaseReportDetailReq struct {
|
|||
ErpCommodityName string `json:"erp_commodity_name"` // 商品名称
|
||||
ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id
|
||||
ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id
|
||||
IMEI string `json:"imei"` // 串码
|
||||
StartTime string `json:"startTime"` // 入/出库,开始时间
|
||||
EndTime string `json:"endTime"` // 入/出库,结束时间
|
||||
IsExport uint32 `json:"is_export"` // 1-导出
|
||||
|
@ -5309,6 +5310,10 @@ func GetReportDetail(req *ErpPurchaseReportDetailReq, c *gin.Context) (*ErpPurch
|
|||
qs = qs.Where("erp_purchase_order.erp_supplier_id = ?", req.ErpSupplierId)
|
||||
countQuery = countQuery.Where("erp_purchase_order.erp_supplier_id = ?", req.ErpSupplierId)
|
||||
}
|
||||
if req.IMEI != "" {
|
||||
qs = qs.Where("erp_purchase_inventory.imei = ?", req.IMEI)
|
||||
countQuery = countQuery.Where("erp_purchase_inventory.imei = ?", req.IMEI)
|
||||
}
|
||||
if req.StartTime != "" { // 入/出库开始时间
|
||||
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
||||
if err != nil {
|
||||
|
|
|
@ -167,9 +167,24 @@ func (e *SysUser) Get() (SysUserView SysUserView, err error) {
|
|||
}
|
||||
|
||||
SysUserView.Password = ""
|
||||
if SysUserView.StoreData != "" {
|
||||
SysUserView.StoreList = deserializeStoreData(SysUserView.StoreData)
|
||||
if SysUserView.RoleName == "系统管理员" {
|
||||
// 查询组合所有门店数据
|
||||
stores := make([]Store, 0)
|
||||
orm.Eloquent.Table("store").Where("cooperative_business_id = ?", SysUserView.CooperativeBusinessId).Find(&stores)
|
||||
for _, item := range stores {
|
||||
storeInfo := StoreInfo{
|
||||
StoreID: int(item.ID),
|
||||
StoreName: item.Name,
|
||||
ExpireTime: "2099.12.30",
|
||||
}
|
||||
SysUserView.StoreList = append(SysUserView.StoreList, storeInfo)
|
||||
}
|
||||
} else { // 普通用户
|
||||
if SysUserView.StoreData != "" {
|
||||
SysUserView.StoreList = deserializeStoreData(SysUserView.StoreData)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -1486,15 +1486,17 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid")
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid").
|
||||
Group("user_invite_record.id").
|
||||
Order("MAX(user_invite_record.action_time) DESC")
|
||||
|
||||
if m.StoreId != 0 {
|
||||
qs = qs.Where("store_id=?", m.StoreId)
|
||||
countQuery = countQuery.Where("store_id=?", m.StoreId)
|
||||
}
|
||||
if m.InviteUserName != "" {
|
||||
qs = qs.Where("B1.Shop_assistant_name=?", m.InviteUserName)
|
||||
countQuery = countQuery.Where("B1.Shop_assistant_name=?", m.InviteUserName)
|
||||
qs = qs.Where("B1.nick_name=?", m.InviteUserName)
|
||||
countQuery = countQuery.Where("B1.nick_name=?", m.InviteUserName)
|
||||
}
|
||||
if m.FromUid != 0 {
|
||||
qs = qs.Where("from_uid=?", m.FromUid)
|
||||
|
@ -1516,88 +1518,7 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
qs = qs.Where("B2.created_at < ?", m.CreateEndTime)
|
||||
countQuery = countQuery.Where("B2.created_at < ?", m.CreateEndTime)
|
||||
}
|
||||
//if len(m.RecordType) != 0 {
|
||||
// for _, recordType := range m.RecordType {
|
||||
// switch recordType {
|
||||
// case 1: // 首次邀请
|
||||
// qs = qs.Where("first=1").Where("spend_type=1")
|
||||
// countQuery = countQuery.Where("first=1").Where("spend_type=1")
|
||||
// case 2: // 开通年费黄金
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=2")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=2")
|
||||
// case 3: // 开通季度黄金
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=2").Where("user_invite_record.member_genre=201")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=2").Where("user_invite_record.member_genre=201")
|
||||
// case 4: // 开通半年黄金
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=2").Where("user_invite_record.member_genre=202")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=2").Where("user_invite_record.member_genre=202")
|
||||
// case 5: // 开通年费白金
|
||||
// qs = qs.Where("user_invite_record.member_level=4").Where("spend_type=2")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=4").Where("spend_type=2")
|
||||
// case 6: // 开通年费黑金
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=2")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=2")
|
||||
//
|
||||
// case 7: // 续费年费黄金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=0")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=0")
|
||||
// case 8: // 续费年费白金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=4").Where("spend_type=3").Where("renew_hide=0")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=4").Where("spend_type=3").Where("renew_hide=0")
|
||||
// case 9: // 续费年费黑金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=3").Where("renew_hide=0")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=3").Where("renew_hide=0")
|
||||
//
|
||||
// case 10: // 续费年费黄金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1")
|
||||
// case 11: // 续费季度黄金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre=201")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre=201")
|
||||
// case 12: // 续费半年黄金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre=202")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=2").Where("spend_type=3").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre=202")
|
||||
// case 13: // 续费年费白金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=4").Where("spend_type=3").Where("renew_hide=1")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=4").Where("spend_type=3").Where("renew_hide=1")
|
||||
// case 14: // 续费年费黑金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=3").Where("renew_hide=1")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=3").Where("renew_hide=1")
|
||||
//
|
||||
// case 15: //黄金→白金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=4").Where("spend_type=4").Where("renew_hide=0")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=4").Where("spend_type=4").Where("renew_hide=0")
|
||||
// case 16: //黄金→黑金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=0").
|
||||
// Where("user_invite_record.member_genre in (200,201,202)")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=0").
|
||||
// Where("user_invite_record.member_genre in (200,201,202)")
|
||||
// case 17: //白金→黑金(干预)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=0").
|
||||
// Where("user_invite_record.member_genre not in (200,201,202)")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=0").
|
||||
// Where("user_invite_record.member_genre not in (200,201,202)")
|
||||
//
|
||||
// case 18: //黄金→白金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=4").Where("spend_type=4").Where("renew_hide=1")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=4").Where("spend_type=4").Where("renew_hide=1")
|
||||
// case 19: //黄金→黑金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre in (200,201,202)")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre in (200,201,202)")
|
||||
// case 20: //白金→黑金(自动)
|
||||
// qs = qs.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre not in (200,201,202)")
|
||||
// countQuery = countQuery.Where("user_invite_record.member_level=5").Where("spend_type=4").Where("renew_hide=1").
|
||||
// Where("user_invite_record.member_genre not in (200,201,202)")
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
if len(m.RecordType) != 0 {
|
||||
var recordTypeConditions []string
|
||||
for _, t := range m.RecordType {
|
||||
|
@ -1682,7 +1603,8 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid").
|
||||
Order("action_time DESC").
|
||||
Group("user_invite_record.id").
|
||||
Order("MAX(user_invite_record.action_time) DESC").
|
||||
Find(&records).Error
|
||||
if err != nil && err != RecordNotFound {
|
||||
logger.Errorf("err:", logger.Field("err", err))
|
||||
|
@ -1693,7 +1615,8 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid").
|
||||
Order("action_time DESC").
|
||||
Group("user_invite_record.id").
|
||||
Order("MAX(user_invite_record.action_time) DESC").
|
||||
Offset(page * pageSize).
|
||||
Limit(pageSize).
|
||||
Find(&records).Error
|
||||
|
@ -1718,6 +1641,11 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
MemberLevel: item.UserMemberLevel,
|
||||
MemberExpire: item.MemberExpire,
|
||||
}
|
||||
|
||||
if item.FromUid == 0 {
|
||||
data.InviteUserName = ""
|
||||
}
|
||||
|
||||
listData = append(listData, data)
|
||||
}
|
||||
|
||||
|
@ -1887,6 +1815,14 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32)
|
|||
switch {
|
||||
case spendType == 1:
|
||||
return FirstInvite
|
||||
case spendType == 2 && memberLevel == 2 && memberGenre == 201:
|
||||
return OpenQuarterGold
|
||||
case spendType == 2 && memberLevel == 2 && memberGenre == 202:
|
||||
return OpenHalfYearGold
|
||||
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 201:
|
||||
return RenewQuarterGoldAuto
|
||||
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 202:
|
||||
return RenewHalfYearGoldAuto
|
||||
case spendType == 2:
|
||||
switch memberLevel {
|
||||
case 2:
|
||||
|
@ -1934,14 +1870,6 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32)
|
|||
}
|
||||
return UpgradePlatinumToBlackAuto
|
||||
}
|
||||
case spendType == 2 && memberLevel == 2 && memberGenre == 201:
|
||||
return OpenQuarterGold
|
||||
case spendType == 2 && memberLevel == 2 && memberGenre == 202:
|
||||
return OpenHalfYearGold
|
||||
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 201:
|
||||
return RenewQuarterGoldAuto
|
||||
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 202:
|
||||
return RenewHalfYearGoldAuto
|
||||
}
|
||||
return Unknown
|
||||
}
|
||||
|
@ -2753,10 +2681,12 @@ func (m *CooperativeBusiness) InviteMemberReport() {
|
|||
}
|
||||
}
|
||||
|
||||
// UserInviteReport
|
||||
// 每个月1号统计上个月的数据
|
||||
func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
|
||||
//end := InDayZero(1)
|
||||
//start := end.AddDate(0, -1, 0)
|
||||
reportTime := time.Now().AddDate(0, 0, 1).Format("2006-01")
|
||||
reportTime := time.Now().AddDate(0, -1, 0).Format("2006-01")
|
||||
//var userInvites []UserInvite
|
||||
//qs := orm.Eloquent.Table("user_invite").Where("from_uid=?", userInfo.Uid).
|
||||
// Where("member_status=?", 2).Where("user_type=?", 2).
|
||||
|
@ -2775,8 +2705,8 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
|
|||
return
|
||||
}
|
||||
exist, err := QueryRecordExist(fmt.Sprintf(
|
||||
"SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d AND uid=%d",
|
||||
userInfo.CooperativeBusinessId, reportTime, userInfo.StoreId, userInfo.Uid))
|
||||
"SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND uid=%d",
|
||||
userInfo.CooperativeBusinessId, reportTime, userInfo.Uid))
|
||||
if err != nil {
|
||||
logger.Error("cooperative member promotion record exist err:", logger.Field("err", err))
|
||||
return
|
||||
|
@ -2791,9 +2721,9 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
|
|||
DeductAmount: 0,
|
||||
CooperativeBusinessId: userInfo.CooperativeBusinessId,
|
||||
CooperativeName: userInfo.CooperativeName,
|
||||
GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct,
|
||||
PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct,
|
||||
BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct,
|
||||
//GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct,
|
||||
//PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct,
|
||||
//BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct,
|
||||
}
|
||||
|
||||
//for i, _ := range userInvites {
|
||||
|
@ -2873,11 +2803,18 @@ func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportLis
|
|||
if len(m.RoleId) != 0 {
|
||||
us = us.Where("role_id in (?)", m.RoleId)
|
||||
}
|
||||
if m.StoreId != 0 {
|
||||
us = us.Where("JSON_CONTAINS(store_data, ?)", fmt.Sprintf(`{"storeId":%d}`, m.StoreId))
|
||||
}
|
||||
err := us.Find(&users).Error
|
||||
if err != nil {
|
||||
logger.Error("err:", logger.Field("err", err))
|
||||
return nil, err
|
||||
}
|
||||
if len(users) == 0 {
|
||||
return &AssistantInviteMemberReportListResp{}, nil
|
||||
}
|
||||
|
||||
ids := make(map[string]uint32, 0)
|
||||
sysUserMap := make(map[uint32]*SysUser, 0)
|
||||
var uidList []uint32
|
||||
|
@ -2910,9 +2847,6 @@ func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportLis
|
|||
if m.Uid != 0 {
|
||||
qs = qs.Where("uid=?", m.Uid)
|
||||
}
|
||||
if m.StoreId != 0 {
|
||||
qs = qs.Where("store_id=?", m.StoreId)
|
||||
}
|
||||
if m.Date != "" {
|
||||
qs = qs.Where("date=?", m.Date)
|
||||
}
|
||||
|
|
16
docs/docs.go
16
docs/docs.go
|
@ -9056,6 +9056,10 @@ const docTemplate = `{
|
|||
"description": "商品名称",
|
||||
"type": "string"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -10369,6 +10373,10 @@ const docTemplate = `{
|
|||
"description": "供应商id",
|
||||
"type": "integer"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -11739,6 +11747,10 @@ const docTemplate = `{
|
|||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -12101,6 +12113,10 @@ const docTemplate = `{
|
|||
"description": "结束时间/出库时间",
|
||||
"type": "string"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
|
|
@ -9045,6 +9045,10 @@
|
|||
"description": "商品名称",
|
||||
"type": "string"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -10358,6 +10362,10 @@
|
|||
"description": "供应商id",
|
||||
"type": "integer"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -11728,6 +11736,10 @@
|
|||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
@ -12090,6 +12102,10 @@
|
|||
"description": "结束时间/出库时间",
|
||||
"type": "string"
|
||||
},
|
||||
"imei": {
|
||||
"description": "串码",
|
||||
"type": "string"
|
||||
},
|
||||
"is_export": {
|
||||
"description": "1-导出",
|
||||
"type": "integer"
|
||||
|
|
|
@ -2304,6 +2304,9 @@ definitions:
|
|||
erp_commodity_name:
|
||||
description: 商品名称
|
||||
type: string
|
||||
imei:
|
||||
description: 串码
|
||||
type: string
|
||||
is_export:
|
||||
description: 1-导出
|
||||
type: integer
|
||||
|
@ -3258,6 +3261,9 @@ definitions:
|
|||
erp_supplier_id:
|
||||
description: 供应商id
|
||||
type: integer
|
||||
imei:
|
||||
description: 串码
|
||||
type: string
|
||||
is_export:
|
||||
description: 1-导出
|
||||
type: integer
|
||||
|
@ -4254,6 +4260,9 @@ definitions:
|
|||
items:
|
||||
type: integer
|
||||
type: array
|
||||
imei:
|
||||
description: 串码
|
||||
type: string
|
||||
is_export:
|
||||
description: 1-导出
|
||||
type: integer
|
||||
|
@ -4514,6 +4523,9 @@ definitions:
|
|||
end_time:
|
||||
description: 结束时间/出库时间
|
||||
type: string
|
||||
imei:
|
||||
description: 串码
|
||||
type: string
|
||||
is_export:
|
||||
description: 1-导出
|
||||
type: integer
|
||||
|
|
Loading…
Reference in New Issue
Block a user