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

(1)优化库存列表查询sql,解决数据重复问题;
(2)报表查询入参增加串码筛选;
(3)系统管理员登录时返回所有门店列表;
This commit is contained in:
chenlin 2024-05-27 11:08:39 +08:00
parent c2c2782a7b
commit 4d18ca0416
9 changed files with 239 additions and 168 deletions

View File

@ -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

View File

@ -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)

View File

@ -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])
}
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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)
}

View File

@ -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"

View File

@ -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"

View File

@ -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