Merge remote-tracking branch 'origin/dev_1.4.1'

# Conflicts:
#	config/settings.yml
This commit is contained in:
chenlin 2024-07-12 09:40:25 +08:00
commit 5abaddf3fd
15 changed files with 532 additions and 270 deletions

View File

@ -308,7 +308,7 @@ func QueryName(c *gin.Context) {
}
var detailReq models.ErpStockCommodityListReq
detailReq.CommodityName = req.CommodityName
detailReq.CommodityName = append(detailReq.CommodityName, req.CommodityName)
detailReq.PageIndex = req.PageIndex
detailReq.PageSize = req.PageSize
detailReq.StoreId = req.StoreId

View File

@ -699,7 +699,7 @@ type HmPayUnifiedOrderRsp struct {
}
func ParsePrivateKeyDeovo() (*rsa.PrivateKey, error) {
//fp := "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/private_key.pem"
//fp := "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/deovo_private_key.pem"
fp := "./config/hm_pay/deovo_private_key.pem"
privateKey, err := os.ReadFile(fp)
if err != nil {
@ -1063,7 +1063,7 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
if config.ApplicationConfig.Mode == "dev" {
biz.CreateIp = clientIpDev
publicPara.AppId = HmPayMerchantId
biz.TerminalId = "test999" // 测试终端
}
unifiedOrderReq.HmPayPublicPara = publicPara
@ -1080,21 +1080,12 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
return nil, err
}
if config.ApplicationConfig.Mode == "dev" {
sign, err := GenHmPaySign(m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
}
unifiedOrderReq.Sign = sign
} else {
sign, err := GenHmPaySignDeovo(m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
}
unifiedOrderReq.Sign = sign
sign, err := GenHmPaySignDeovo(m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
}
unifiedOrderReq.Sign = sign
unifiedOrderResp, err := HmPayUnifiedOrder(unifiedOrderReq)
if err != nil {
@ -1108,18 +1099,10 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
return nil, err
}
if config.ApplicationConfig.Mode == "dev" {
err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
}
} else {
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
}
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
}
//fmt.Println("unifiedOrderResp:", unifiedOrderResp.Data)
@ -1141,7 +1124,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantId,
AppId: HmPayMerchantIdDeovo,
Method: "trade.query",
SignType: "RSA",
Sign: "",
@ -1166,7 +1149,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
return nil, err
}
sign, err := GenHmPaySign(m)
sign, err := GenHmPaySignDeovo(m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
@ -1184,7 +1167,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
logger.Errorf("ToSignContent err:", err)
return nil, err
}
err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign)
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
@ -1210,7 +1193,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantId,
AppId: HmPayMerchantIdDeovo,
Method: "trade.cancel",
SignType: "RSA",
Sign: "",
@ -1235,7 +1218,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
return nil, err
}
sign, err := GenHmPaySign(m)
sign, err := GenHmPaySignDeovo(m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
@ -1253,7 +1236,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
logger.Errorf("ToSignContent err:", err)
return nil, err
}
err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign)
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err

View File

@ -31,7 +31,7 @@ func TestHmJsPayBToCOrder(t *testing.T) {
authCode := "6264900646139788518"
notifyUrl := "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice"
order, err := HmJsPayBToCOrder(orderId, totalFee, authCode, notifyUrl)
order, err := HmJsPayBToCOrder(13, orderId, totalFee, authCode, notifyUrl)
if err != nil {
fmt.Println("err:", err)
}
@ -41,7 +41,7 @@ func TestHmJsPayBToCOrder(t *testing.T) {
// 查询
func TestHmQueryOrder(t *testing.T) {
orderId := "sale2023122225067733"
orderId := "sale2024070569804727"
order, err := HmQueryOrder(orderId)
if err != nil {

View File

@ -2261,7 +2261,7 @@ type ErpStockCommodityListReq struct {
ErpStockId uint32 `json:"erp_stock_id"` // 库存id
ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id
SerialNumber string `json:"serial_number"` // 商品编号
CommodityName string `json:"commodity_name"` // 商品名称
CommodityName []string `json:"commodity_name"` // 商品名称
ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类Id
IsIMEI uint32 `json:"is_imei"` // 是否串码0-查全部 1-查串码类 2-查非串码
IMEI string `json:"imei"` // 串码
@ -2277,6 +2277,7 @@ type ErpStockCommodityListReq struct {
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 每页展示数据条数
IsExport uint32 `json:"is_export"` // 是否导出excel1-导出
StockSortFlag uint32 `json:"stock_sort_flag"` // 排序方式0-按入库时间降序排列默认1-按入库时间升序排列
//Sn string `json:"sn"` // 首次入库订单编号
}
@ -2362,7 +2363,7 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context, nType uint32) (
//获取库存商品列表
var commodities []ErpStockCommodity
if m.IsExport == 1 {
err := qs.Find(&commodities).Order("id DESC").Error
err := qs.Find(&commodities).Order("stock_time DESC,id DESC").Error
if err != nil && !errors.Is(err, RecordNotFound) {
//logger.Error("dailys err:", err)
return resp, err
@ -2374,7 +2375,11 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context, nType uint32) (
}
resp.ExportUrl = listExport
} else {
err := qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time DESC,id DESC").Find(&commodities).Error
if m.StockSortFlag == 1 {
err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time ASC,id ASC").Find(&commodities).Error
} else {
err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time DESC,id DESC").Find(&commodities).Error
}
if err != nil && !errors.Is(err, RecordNotFound) {
//logger.Error("erp commodity list err:", err)
return resp, err
@ -2537,11 +2542,11 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB, nType uint3
qs = qs.Where("commodity_serial_number=?", m.SerialNumber)
}
if m.CommodityName != "" { //商品名称
if len(m.CommodityName) != 0 { //商品名称
if nType == 1 {
qs = qs.Where("erp_commodity_name = ?", m.CommodityName)
qs = qs.Where("erp_commodity_name IN (?)", m.CommodityName)
} else {
qs = qs.Where("erp_commodity_name like ?", "%"+m.CommodityName+"%")
qs = qs.Where("erp_commodity_name like ?", "%"+m.CommodityName[0]+"%")
}
}

View File

@ -83,6 +83,7 @@ type ErpOrder struct {
RejectedTotalCount uint32 `json:"rejected_total_count" gorm:"-"` // 订单总退货数量
StorePer float64 `json:"store_per"` // 门店提成订单总员工毛利X该门店设置好的提成比例保留到小数后两位多余舍去
TotalDiscount float64 `json:"total_discount"` // 订单总优惠:订单所有商品零售优惠+会员优惠+会员积分抵扣之和
BankTrxNo string `json:"bank_trx_no" gorm:"-"` // 银行流水号
Commodities []ErpOrderCommodity `json:"commodities" gorm:"-"` // 零售订单商品信息
Cashiers []ErpOrderCashier `json:"cashiers" gorm:"-"` // 收付款方式
Salesman []ErpOrderSales `json:"salesman" gorm:"-"` // 销售员信息
@ -162,6 +163,7 @@ type ErpOrderRecord struct {
OutOrderNo string `json:"out_order_no"` // 商户订单号
PlatTrxNo string `json:"plat_trx_no"` // 平台交易流水号
BankOrderNo string `json:"bank_order_no"` // 银行订单号
BankTrxNo string `json:"bank_trx_no"` // 银行流水号
TotalAmount float64 `json:"total_amount"` // 订单总金额
PayWay string `json:"pay_way"` // 支付方式
Status string `json:"status"` // 支付状态
@ -331,6 +333,8 @@ type ErpOrderRetailDetailReq struct {
IMEI string `json:"imei"` // 串码
StartTime string `json:"start_time"` // 开始时间
EndTime string `json:"end_time"` // 结束时间
BankTrxNo string `json:"bank_trx_no"` // 银联流水号
CashierId uint32 `json:"cashier_id"` // 收付款方式id
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
IsExport uint32 `json:"is_export"` // 1-导出
@ -594,6 +598,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) {
erpOrderListSetCommodity(orders)
erpOrderListSetCashier(orders)
erpOrderListSetSalesman(orders)
erpOrderSetBankTrxNo(orders)
resp.List = orders
@ -802,7 +807,8 @@ func stringToIntArray(str string) ([]uint32, error) {
}
// 更新零售订单商品表的库存商品表主键id字段
func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error {
func updateErpStockCommodityID(gdb *gorm.DB, commodity ErpOrderCommodity, nIdList []uint32) error {
fmt.Println("nIdList is:", nIdList)
strId := intArrayToString(nIdList)
// 查找在库的非串码商品
@ -813,12 +819,14 @@ func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error
return err
}
err = gdb.Table("erp_order_commodity").Where("id = ?", id).
err = gdb.Table("erp_order_commodity").Where("id = ?", commodity.ID).
Updates(map[string]interface{}{
"erp_stock_commodity_id": strId,
"retail_price": stockCommodity.RetailPrice,
"wholesale_price": stockCommodity.WholesalePrice,
"staff_cost_price": stockCommodity.StaffCostPrice,
"sales_profit": commodity.SalePrice - stockCommodity.WholesalePrice,
"staff_profit": commodity.SalePrice - stockCommodity.WholesalePrice - stockCommodity.StaffCostPrice,
}).Error
//Update("erp_stock_commodity_id", strId).Error
if err != nil {
@ -829,8 +837,8 @@ func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error
return nil
}
// 找一个可用的库存商品表主键ID
func findRightErpStockCommodityId(idList map[uint32][]uint32, commodityId uint32, stockCommodity []ErpStockCommodity) (uint32, error) {
// FindRightErpStockCommodityId 找一个可用的库存商品表主键ID
func FindRightErpStockCommodityId(idList map[uint32][]uint32, commodityId uint32, stockCommodity []ErpStockCommodity) (uint32, error) {
// 获取给定商品ID对应的ID列表
existingIds, ok := idList[commodityId]
if !ok || len(existingIds) == 0 {
@ -967,12 +975,18 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
}
// 找一个可用的库存商品表主键ID使用零售商品表的主键ID作为key
rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList,
rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList,
commodities[i].ErpCommodityId, stockCommodity)
if err != nil {
return err
}
logger.Info("rightId is:", logger.Field("rightId", rightId))
if rightId == 0 {
logger.Error("rightId is 0")
return errors.New("查询商品库存出错")
}
// 优先出库库存时间最长的数据
err = gdb.Table("erp_stock_commodity").Where("id = ?", rightId).
Updates(map[string]interface{}{"state": state}).Error // 状态更新为销售锁定中;反审核则更新为在库
@ -993,7 +1007,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
stockCommodityIdList = append(stockCommodityIdList, rightId)
usedStockCommodityIdList[commodities[i].ErpCommodityId] = append(usedStockCommodityIdList[commodities[i].ErpCommodityId], rightId)
err = updateErpStockCommodityID(gdb, commodities[i].ID, stockCommodityIdList)
err = updateErpStockCommodityID(gdb, commodities[i], stockCommodityIdList)
if err != nil {
return err
}
@ -1026,7 +1040,8 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
var stockCommodity []ErpStockCommodity
var stockCommodityIdList []uint32
if commodities[i].ErpStockCommodityID != "" {
stockCommodityID, _ := tools.StringToInt(commodities[i].ErpStockCommodityID)
if stockCommodityID > 0 {
err = gdb.Table("erp_stock_commodity").Where("id = ?", commodities[i].ErpStockCommodityID).
Updates(map[string]interface{}{"state": InStock}).Error // 状态更新为在库
if err != nil {
@ -1057,7 +1072,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
}
// 找一个可用的库存商品表主键ID
rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList,
rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList,
commodities[i].ErpCommodityId, stockCommodity)
if err != nil {
return err
@ -1080,7 +1095,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
stockCommodityIdList = append(stockCommodityIdList, rightId)
usedStockCommodityIdList[commodities[i].ID] = append(usedStockCommodityIdList[commodities[i].ID], rightId)
}
err = updateErpStockCommodityID(gdb, commodities[i].ID, stockCommodityIdList)
err = updateErpStockCommodityID(gdb, commodities[i], stockCommodityIdList)
if err != nil {
return err
}
@ -1176,6 +1191,23 @@ func NewErpBillSn() string {
}
}
// 添加零售订单的银行流水号
func erpOrderSetBankTrxNo(list []ErpOrder) {
for i, _ := range list {
list[i].SetBankTrxNo()
}
}
func (m *ErpOrder) SetBankTrxNo() {
var orderPayWay ErpOrderRecord
err := orm.Eloquent.Table("erp_order_record").Where("bill_sn = ? and status = ?", m.BillSn, PayOk).Find(&orderPayWay).Error
if err != nil {
logger.Error("SetBankTrxNo query erp_order_record err:", logger.Field("err", err))
}
m.BankTrxNo = orderPayWay.BankTrxNo
}
// ErpOrderRetailDetailSetCommodity 添加零售明细中订单的商品信息
func ErpOrderRetailDetailSetCommodity(list []ErpOrder) {
for i, _ := range list {
@ -1317,7 +1349,10 @@ func mergeOrderCommodities(orderCommodities []ErpOrderCommodity) []ErpOrderCommo
existingCommodity.SaleDiscount += commodity.SaleDiscount
existingCommodity.MemberDiscount += commodity.MemberDiscount
existingCommodity.ReceivedAmount += commodity.ReceivedAmount
existingCommodity.ErpStockCommodityID = strings.Join([]string{existingCommodity.ErpStockCommodityID, commodity.ErpStockCommodityID}, ",")
stockCommodityID, _ := tools.StringToInt(commodity.ErpStockCommodityID)
if stockCommodityID > 0 {
existingCommodity.ErpStockCommodityID = strings.Join([]string{existingCommodity.ErpStockCommodityID, commodity.ErpStockCommodityID}, ",")
}
} else {
// 使用commodity的副本避免对原始数据的修改
commodityCopy := commodity
@ -1926,6 +1961,7 @@ func ErpOrderPay(req *ErpOrderPayReq, c *gin.Context) (*ErpOrderPayResp, error)
updateInfo := map[string]interface{}{
"bank_order_no": hmPayResp.BankOrderNo,
"plat_trx_no": hmPayResp.PlatTrxNo,
"bank_trx_no": hmPayResp.BankTrxNo,
"total_amount": hmPayResp.TotalAmount,
"pay_way": hmPayResp.PayWay,
"status": payStatus,
@ -2017,6 +2053,7 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) {
updateInfo := map[string]interface{}{
"bank_order_no": hmQueryResp.BankOrderNo,
"plat_trx_no": hmQueryResp.PlatTrxNo,
"bank_trx_no": hmQueryResp.BankTrxNo,
"total_amount": hmQueryResp.TotalAmount,
"pay_way": hmQueryResp.PayWayCode,
"status": payStatus,
@ -2724,6 +2761,18 @@ func float64ToPercentage(value float64) string {
func QueryRetailDetail(req *ErpOrderRetailDetailReq, c *gin.Context) (*ErpOrderRetailDetailResp, error) {
resp := &ErpOrderRetailDetailResp{}
// 通过银行流水号查询
if req.BankTrxNo != "" {
var orderPayWay ErpOrderRecord
err := orm.Eloquent.Table("erp_order_record").Where("bank_trx_no = ? and status = ?",
req.BankTrxNo, PayOk).Find(&orderPayWay).Error
if err != nil {
logger.Error("query erp_order_record err:", logger.Field("err", err))
return nil, err
}
req.BillSn = orderPayWay.BillSn
}
var err error
if (req.ErpCategoryId != 0 || req.ErpCommodityName != "" || req.IMEI != "") && req.BillSn == "" { // 商品分类or商品名称不为空且订单编号为空
// 联表查询
@ -3014,7 +3063,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
fileName := time.Now().Format(TimeFormat) + "零售明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
title := []interface{}{"订单编号", "订单类型", "用户ID", "客户手机号", "审核时间", "店铺", "销售员", "商品分类", "商品名称",
title := []interface{}{"订单编号", "订单类型", "用户ID", "客户手机号", "审核时间", "店铺", "银联流水号", "销售员", "商品分类", "商品名称",
"供应商", "是否串码", "商品串码", "是否赠送", "销售数量", "指导零售价", "零售价", "零售优惠", "会员优惠", "实际零售价/退货价",
"采购单价", "员工成本价", "销售毛利", "员工毛利", "订单总指导零售价", "订单总优惠", "订单实收", "【扫码付", "现金收款", "pos机收款",
"商场积分抵扣", "其他付款方式】", "订单总销售毛利", "订单总员工毛利", "销售毛利提成", "员工毛利提成", "销售员提成", "门店提成", "备注"}
@ -3040,7 +3089,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
return "", errors.New("RetailMarginDataExport, 订单类型异常:" + list[i].RetailType)
}
commodityIdMap := make(map[uint32]bool)
orderFlag := false
// 先判断商品数量,确定要写几行数据
for rowId := 0; rowId < len(list[i].Commodities); rowId++ {
if list[i].RetailType == RetailTypeSale {
@ -3083,8 +3132,8 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
}
// 单个订单的汇总数据只记录一次
if !commodityIdMap[list[i].Commodities[rowId].ErpCommodityId] {
commodityIdMap[list[i].Commodities[rowId].ErpCommodityId] = true
if !orderFlag {
orderFlag = true
salesMan := ""
nSalesProfitPer := 0.0
nStaffProfitPer := 0.0
@ -3102,6 +3151,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
list[i].Tel,
list[i].AuditTime,
list[i].StoreName,
list[i].BankTrxNo,
salesMan, //销售员
list[i].Commodities[rowId].ErpCategoryName,
list[i].Commodities[rowId].ErpCommodityName,
@ -3144,6 +3194,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
"",
"",
"",
"",
list[i].Salesman[1].Name, //销售员
list[i].Commodities[rowId].ErpCategoryName,
list[i].Commodities[rowId].ErpCommodityName,
@ -3185,6 +3236,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
"",
"",
"",
"",
"", //销售员
list[i].Commodities[rowId].ErpCategoryName,
list[i].Commodities[rowId].ErpCommodityName,
@ -3238,6 +3290,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
"",
"",
"",
"",
list[i].Salesman[1].Name, //销售员
"",
"",
@ -3285,7 +3338,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
}
totalData := "订单数:" + strconv.FormatInt(int64(len(list)), 10)
end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "", "", "",
end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "", "", "", "",
sumData.Count,
sumData.RetailPrice,
sumData.SalePrice,
@ -3330,15 +3383,15 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string,
_ = file.SetCellStyle("Sheet1", "A1", endRow, style)
//需要自动换行的列
endRow1 := fmt.Sprintf("G%d", nExcelStartRow+2)
endRow2 := fmt.Sprintf("AH%d", nExcelStartRow+2)
endRow3 := fmt.Sprintf("AI%d", nExcelStartRow+2)
endRow4 := fmt.Sprintf("AJ%d", nExcelStartRow+2)
_ = file.SetCellStyle("Sheet1", "A1", "AL1", style1)
_ = file.SetCellStyle("Sheet1", "G2", endRow1, style1)
_ = file.SetCellStyle("Sheet1", "AH2", endRow2, style1)
_ = file.SetCellStyle("Sheet1", "AI2", endRow3, style1)
_ = file.SetCellStyle("Sheet1", "AJ2", endRow4, style1)
endRow1 := fmt.Sprintf("H%d", nExcelStartRow+2)
endRow2 := fmt.Sprintf("AI%d", nExcelStartRow+2)
endRow3 := fmt.Sprintf("AJ%d", nExcelStartRow+2)
endRow4 := fmt.Sprintf("AK%d", nExcelStartRow+2)
_ = file.SetCellStyle("Sheet1", "A1", "AM1", style1)
_ = file.SetCellStyle("Sheet1", "H2", endRow1, style1)
_ = file.SetCellStyle("Sheet1", "AI2", endRow2, style1)
_ = file.SetCellStyle("Sheet1", "AJ2", endRow3, style1)
_ = file.SetCellStyle("Sheet1", "AK2", endRow4, style1)
fmt.Println("save fileName:", config.ExportConfig.Path+fileName)
if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil {
@ -3541,6 +3594,25 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
logger.Error("query erp_order_pay_way sum data err:", logger.Field("err", err))
return resp, err
}
// 支付方式筛选
if req.CashierId != 0 {
var tempCashier TotalCashierData
switch req.CashierId {
case 1:
tempCashier.ScanAmount = cashier.ScanAmount
case 2:
tempCashier.CashAmount = cashier.CashAmount
case 3:
tempCashier.PosAmount = cashier.PosAmount
case 4:
tempCashier.StoreVmAmount = cashier.StoreVmAmount
default:
tempCashier = cashier
}
cashier = tempCashier
}
// 退货订单支付汇总:目前零售退货订单暂时不展示各个方式的付款金额
var rejectedCashier TotalCashierData
//rejectedCashierQs := qs
@ -3562,11 +3634,17 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
sumData.TotalAmount = 0 // 订单实收金额
sumData.StorePer = 0 // 门店提成
sumData.ScanAmount = cashier.ScanAmount
sumData.CashAmount = cashier.CashAmount
sumData.PosAmount = cashier.PosAmount
sumData.StoreVmAmount = cashier.StoreVmAmount
sumData.OtherAmount = cashier.OtherAmount
//sumData.ScanAmount = cashier.ScanAmount
//sumData.CashAmount = cashier.CashAmount
//sumData.PosAmount = cashier.PosAmount
//sumData.StoreVmAmount = cashier.StoreVmAmount
//sumData.OtherAmount = cashier.OtherAmount
sumData.ScanAmount = 0
sumData.CashAmount = 0
sumData.PosAmount = 0
sumData.StoreVmAmount = 0
sumData.OtherAmount = 0
var result []RetailDetailByJoin
@ -3585,6 +3663,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
}
orders := packData(result)
erpOrderSetBankTrxNo(orders)
fileUrl, err := retailDetailExport(orders, sumData)
if err != nil {
logger.Error("retailDetailExport err:", logger.Field("err", err))
@ -3609,6 +3688,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
orders := packData(result)
erpOrderListSetCashier(orders)
erpOrderListSetSalesman(orders)
erpOrderSetBankTrxNo(orders)
pagedOrders := paginate(orders, page, req.PageSize)
resp.List = pagedOrders
@ -3751,6 +3831,11 @@ func packData(result []RetailDetailByJoin) []ErpOrder {
orders = append(orders, item)
}
// 根据AuditTime进行降序排序
sort.SliceStable(orders, func(i, j int) bool {
return orders[i].AuditTime.After(*orders[j].AuditTime)
})
return orders
}
@ -3826,6 +3911,10 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman))
totalPerQs = totalPerQs.Where("erp_order_sales.uid = ?", req.Salesman)
}
if req.CashierId != 0 { // 支付方式
qs = qs.Where("JSON_CONTAINS(cashier_list, ?)", fmt.Sprintf(`{"cashier_id":%d}`, req.CashierId))
//totalPerQs = totalPerQs.Where("erp_order_pay_way.cashier_id = ?", req.CashierId)
}
if req.StartTime != "" { // 审核开始时间
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
if err != nil {
@ -3895,6 +3984,25 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
logger.Error("query erp_order_pay_way sum data err:", logger.Field("err", err))
return resp, err
}
// 支付方式筛选
if req.CashierId != 0 {
var tempCashier TotalCashierData
switch req.CashierId {
case 1:
tempCashier.ScanAmount = cashier.ScanAmount
case 2:
tempCashier.CashAmount = cashier.CashAmount
case 3:
tempCashier.PosAmount = cashier.PosAmount
case 4:
tempCashier.StoreVmAmount = cashier.StoreVmAmount
default:
tempCashier = cashier
}
cashier = tempCashier
}
// 退货订单支付汇总:目前零售退货订单暂时不展示各个方式的付款金额
var rejectedCashier TotalCashierData
//rejectedCashierQs := qs
@ -3926,6 +4034,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
}
ErpOrderRetailDetailSetCommodity(orders)
erpOrderListSetSalesman(orders)
erpOrderSetBankTrxNo(orders)
fileUrl, err := retailDetailExport(orders, sumData)
if err != nil {
@ -3952,6 +4061,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
ErpOrderRetailDetailSetCommodity(orders)
erpOrderListSetSalesman(orders)
erpOrderListSetCashier(orders)
erpOrderSetBankTrxNo(orders)
//erpOrderListSetSalesmanByRetailDetail(req.Salesman, orders)
resp.List = orders
@ -4608,7 +4718,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
// 串码商品直接查询;非串码商品查询库存时间最久的商品
var commodities []ErpStockCommodity
if len(imeiList) != 0 {
err := orm.Eloquent.Table("erp_stock_commodity").Where("imei IN (?)", imeiList).
err := orm.Eloquent.Table("erp_stock_commodity").Where("imei IN (?) and state = ? "+
"and store_id = ?", imeiList, InStock, req.StoreId).
Find(&commodities).Error
if err != nil {
logger.Error("get commodities err:", logger.Field("err", err))
@ -4622,7 +4733,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if len(commodityIds) != 0 {
commodities = nil
err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id IN (?)", commodityIds).
err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id IN (?) and state = ? "+
"and store_id = ?", commodityIds, InStock, req.StoreId).
Find(&commodities).Error
if err != nil {
logger.Error("get commodities err:", logger.Field("err", err))
@ -5071,50 +5183,22 @@ func updateSalesData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) error
return errors.New("操作失败:" + err.Error())
}
var newOrderSales []ErpOrderSales
var deletedOrderSales []ErpOrderSales
var matchingOrderSales []ErpOrderSales
// 找到新增的商品
for _, reqSales := range req.Salesman {
var found bool
for _, dbSales := range orderSales {
if reqSales.Uid == dbSales.Uid {
found = true
break
}
}
if !found {
reqSales.ID = 0
reqSales.CreatedAt = Now()
newOrderSales = append(newOrderSales, reqSales)
}
}
// 找到删除的商品
for _, dbSales := range orderSales {
var found bool
for _, reqSales := range req.Salesman {
if reqSales.Uid == dbSales.Uid {
found = true
// 找到匹配的商品,加入匹配列表
matchingOrderSales = append(matchingOrderSales, dbSales)
break
}
}
if !found {
deletedOrderSales = append(deletedOrderSales, dbSales)
}
}
// 更新
for _, orderSaleInfo := range matchingOrderSales {
if err = gdb.Model(&ErpOrderSales{}).Where("id = ?", orderSaleInfo.ID).Updates(orderSaleInfo).Error; err != nil {
logger.Error("更新订单销售员信息-更新 error")
// 1-删除所有的零售订单支付方式
if len(orderSales) != 0 {
err = gdb.Delete(&orderSales).Error
if err != nil {
logger.Error("更新订单销售员信息-删除 error")
return errors.New("操作失败:" + err.Error())
}
}
// 新增
var newOrderSales []ErpOrderSales
for _, reqSales := range req.Salesman {
reqSales.ID = 0
newOrderSales = append(newOrderSales, reqSales)
}
// 2-新增所有的零售订单支付方式
if len(newOrderSales) != 0 {
err = gdb.Create(&newOrderSales).Error
if err != nil {
@ -5123,15 +5207,6 @@ func updateSalesData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) error
}
}
// 删除
if len(deletedOrderSales) != 0 {
err = gdb.Delete(&deletedOrderSales).Error
if err != nil {
logger.Error("更新订单销售员信息-删除 error")
return errors.New("操作失败:" + err.Error())
}
}
return nil
}
@ -5145,54 +5220,27 @@ func updatePayWayData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) erro
return errors.New("操作失败:" + err.Error())
}
var newOrderPayWay []ErpOrderPayWay
var deletedOrderPayWay []ErpOrderPayWay
var matchingOrderPayWay []ErpOrderPayWay
// 找到新增的商品
for _, reqPayWay := range req.Cashiers {
var found bool
for _, dbPayWay := range orderPayWay {
if reqPayWay.CashierId == dbPayWay.CashierId {
found = true
break
}
}
if !found {
payWay := ErpOrderPayWay{
ErpOrderId: orderId,
CashierId: reqPayWay.CashierId,
Name: reqPayWay.Name,
Amount: reqPayWay.Amount,
}
newOrderPayWay = append(newOrderPayWay, payWay)
}
}
// 找到删除的商品
for _, dbPayWay := range orderPayWay {
var found bool
for _, reqPayWay := range req.Cashiers {
if reqPayWay.CashierId == dbPayWay.CashierId {
found = true
// 找到匹配的商品,加入匹配列表
matchingOrderPayWay = append(matchingOrderPayWay, dbPayWay)
break
}
}
if !found {
deletedOrderPayWay = append(deletedOrderPayWay, dbPayWay)
}
}
// 更新
for _, orderPayWayInfo := range matchingOrderPayWay {
if err = gdb.Model(&ErpOrderPayWay{}).Where("id = ?", orderPayWayInfo.ID).Updates(orderPayWayInfo).Error; err != nil {
logger.Error("更新零售订单支付方式-更新 error")
// 1-删除所有的零售订单支付方式
if len(orderPayWay) != 0 {
err = gdb.Delete(&orderPayWay).Error
if err != nil {
logger.Error("更新零售订单支付方式-删除 error")
return errors.New("操作失败:" + err.Error())
}
}
// 新增
var newOrderPayWay []ErpOrderPayWay
for _, reqPayWay := range req.Cashiers {
payWay := ErpOrderPayWay{
ErpOrderId: orderId,
CashierId: reqPayWay.CashierId,
Name: reqPayWay.Name,
Amount: reqPayWay.Amount,
}
newOrderPayWay = append(newOrderPayWay, payWay)
}
// 2-新增所有的零售订单支付方式
if len(newOrderPayWay) != 0 {
err = gdb.Create(&newOrderPayWay).Error
if err != nil {
@ -5201,14 +5249,5 @@ func updatePayWayData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) erro
}
}
// 删除
if len(deletedOrderPayWay) != 0 {
err = gdb.Delete(&deletedOrderPayWay).Error
if err != nil {
logger.Error("更新零售订单支付方式-删除 error")
return errors.New("操作失败:" + err.Error())
}
}
return nil
}

View File

@ -531,11 +531,11 @@ func checkStockExcel(sheetCols [][]string) error {
// }
//}
if i < len(sheetCols[5]) {
if employeeCost, err := strconv.ParseFloat(sheetCols[5][i], 64); err != nil || employeeCost <= 0 {
return errors.New("第" + strconv.Itoa(i+1) + "行员工成本价必须是大于0的数字")
}
}
//if i < len(sheetCols[5]) {
// if employeeCost, err := strconv.ParseFloat(sheetCols[5][i], 64); err != nil || employeeCost <= 0 {
// return errors.New("第" + strconv.Itoa(i+1) + "行员工成本价必须是大于0的数字")
// }
//}
// 供应商不能为空
if i < len(sheetCols[6]) {

View File

@ -1534,6 +1534,7 @@ func MemberExpirationReminderDay(days int64) {
}
}
// ExpireMemberSMSSend 用户过期如果一直不还卡最多会收到12条短信过期超过3个月就不会发送了
func ExpireMemberSMSSend() {
nowTime := time.Now()
days := []uint32{1, 2, 3, 4, 5, 6, 7, 14, 21, 28, 60, 90}

View File

@ -818,7 +818,7 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er
}
// 找一个可用的库存商品表主键ID
rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList,
rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList,
trimCommodities[i].CommodityId, stockCommodity)
if err != nil {
return err
@ -1008,7 +1008,7 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd
}
// 找一个可用的库存商品表主键ID
rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList,
rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList,
trimCommodities[i].CommodityId, stockCommodity)
if err != nil {
return err

View File

@ -18,7 +18,6 @@ import (
"go-admin/tools"
"go-admin/tools/config"
"golang.org/x/sync/errgroup"
"gorm.io/gorm"
"time"
)
@ -232,6 +231,7 @@ func (m *OrderListReq) List(exportFlag int, c *gin.Context) ([]Order, int64, str
func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([]Order, int64, error) {
var orderCards []OrderCard
orders := make([]Order, 0)
qs := orm.Eloquent.Table("order_card").Where("card_status=?", m.CardStatus)
// 非管理员才判断所属门店
@ -250,9 +250,9 @@ func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([
} else {
if len(storeList) > 0 {
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
qs = qs.Where("store_id = ? OR revert_store_id = ?", storeList[0], storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
qs = qs.Where("store_id IN (?) OR revert_store_id IN (?)", storeList, storeList)
}
} else {
return nil, 0, errors.New("用户未绑定门店")
@ -276,7 +276,7 @@ func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([
}
if m.StoreId != 0 { // 门店id共有
qs = qs.Where("store_id", m.StoreId)
qs = qs.Where("store_id = ? OR revert_store_id = ?", m.StoreId, m.StoreId)
}
if !m.StartTime.IsZero() { // 共有
fmt.Println("起始时间:", m.StartTime.Unix())
@ -365,8 +365,13 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord
if m.PageSize == 0 {
m.PageSize = 10
}
var qs *gorm.DB
qs = orm.Eloquent.Table("order").Where("pay_status", 2)
qs := orm.Eloquent.Table("order").Select("DISTINCT `order`.*").Joins("JOIN order_card ON order.id = order_card.order_id").
Where("order.pay_status = ?", 2)
orderQs := orm.Eloquent.Table("(?) as unique_orders", qs).Order("unique_orders.created_at DESC")
//qs = orm.Eloquent.Table("order").Where("pay_status", 2)
// 非管理员才判断所属门店
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
@ -384,9 +389,9 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord
} else {
if len(storeList) > 0 {
if len(storeList) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
qs = qs.Where("order.store_id = ? OR order_card.revert_store_id = ?", storeList[0], storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
qs = qs.Where("order.store_id IN (?) OR order_card.revert_store_id IN (?)", storeList, storeList)
}
} else {
return nil, 0, errors.New("用户未绑定门店")
@ -410,46 +415,46 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord
orderIds = append(orderIds, orderCards[i].OrderId)
}
qs = qs.Where("id in (?)", orderIds)
qs = qs.Where("order.id in (?)", orderIds)
}
if m.PickupCode != "" {
isDeliver = false
qs = qs.Where("pickup_code", m.PickupCode)
qs = qs.Where("order.pickup_code", m.PickupCode)
}
if m.PayStatus != 0 {
qs = qs.Where("pay_status", m.PayStatus)
qs = qs.Where("order.pay_status", m.PayStatus)
}
if m.DeliveryType != 0 {
qs = qs.Where("delivery_type", m.DeliveryType)
qs = qs.Where("order.delivery_type", m.DeliveryType)
}
if m.OrderId != 0 {
isDeliver = false
qs = qs.Where("id", m.OrderId)
qs = qs.Where("order.id", m.OrderId)
}
if isDeliver {
if m.Uid != 0 {
qs = qs.Where("uid", m.Uid)
qs = qs.Where("order.uid", m.Uid)
}
if m.GameCardId != 0 {
qs = qs.Where("game_card_id", m.GameCardId)
qs = qs.Where("order.game_card_id", m.GameCardId)
}
if m.StoreId != 0 {
qs = qs.Where("store_id", m.StoreId)
qs = qs.Where("order.store_id = ? OR order_card.revert_store_id = ?", m.StoreId, m.StoreId)
}
if !m.StartTime.IsZero() {
fmt.Println("起始时间:", m.StartTime.Unix())
qs = qs.Where("created_at > ?", m.StartTime)
qs = qs.Where("order.created_at > ?", m.StartTime)
}
if !m.EndTime.IsZero() {
fmt.Println("时间:", m.StartTime.Unix())
qs = qs.Where("created_at < ?", m.EndTime)
qs = qs.Where("order.created_at < ?", m.EndTime)
}
}
var count int64
err := qs.Count(&count).Error
err := orderQs.Count(&count).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, 0, err
@ -462,11 +467,11 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord
}
if exportFlag == 1 { //一次性导出excel
qs = qs.Preload("User").Order("created_at DESC")
orderQs = orderQs.Preload("User")
} else {
qs = qs.Preload("User").Order("created_at DESC").Offset(page * pageSize).Limit(pageSize)
orderQs = orderQs.Preload("User").Offset(page * pageSize).Limit(pageSize)
}
err = qs.Find(&orders).Error
err = orderQs.Find(&orders).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, 0, err

View File

@ -183,11 +183,51 @@ func (m *Store) Add() error {
func (m *Store) Modify() error {
para := m.getModifyPara()
if len(para) > 0 {
err := orm.Eloquent.Table(m.TableName()).Unscoped().Where("id", m.ID).Updates(para).Error
// 查询门店信息
oldStoreInfo, err := GetStore(m.ID)
if err != nil {
logger.Errorf("GetStore err:", logger.Field("err", err))
return err
}
begin := orm.Eloquent.Begin()
err = begin.Table(m.TableName()).Unscoped().Where("id", m.ID).Updates(para).Error
if err != nil {
begin.Rollback()
logger.Errorf("err:", logger.Field("err", err))
return err
}
if oldStoreInfo.Name != m.Name {
// 更新库存表
err = begin.Table("erp_stock").Where("store_id=?", m.ID).
Updates(map[string]interface{}{
"store_name": m.Name,
}).Error
if err != nil {
begin.Rollback()
logger.Error("Update erp_stock err:", logger.Field("err", err))
return err
}
// 更新库存详情表
err = begin.Table("erp_stock_commodity").Where("store_id=?", m.ID).
Updates(map[string]interface{}{
"store_name": m.Name,
}).Error
if err != nil {
begin.Rollback()
logger.Error("Update erp_stock_commodity err:", logger.Field("err", err))
return err
}
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", logger.Field("err", err))
return err
}
}
return nil
}

View File

@ -2773,18 +2773,34 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
return
}
report := &InviteMemberReport{
Uid: userInfo.Uid,
StoreId: uint32(userInfo.StoreId),
GoldCount: 0,
PlatinumCount: 0,
BlackGoldCount: 0,
Date: reportTime,
DeductAmount: 0,
CooperativeBusinessId: userInfo.CooperativeBusinessId,
CooperativeName: userInfo.CooperativeName,
//GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct,
//PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct,
//BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct,
Uid: userInfo.Uid,
StoreId: uint32(userInfo.StoreId),
GoldCount: 0,
GoldCountHalf: 0,
GoldCountQuarter: 0,
PlatinumCount: 0,
BlackGoldCount: 0,
Date: reportTime,
DeductAmount: 0,
CooperativeBusinessId: userInfo.CooperativeBusinessId,
CooperativeName: userInfo.CooperativeName,
GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct,
PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct,
BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct,
RenewalGoldCount: 0,
RenewalGoldCountHalf: 0,
RenewalGoldCountQuarter: 0,
RenewalPlatinumCount: 0,
RenewalBlackGoldCount: 0,
UpgradeGoldToPlatinumCount: 0,
UpgradeGoldToBlackCount: 0,
UpgradePlatinumToBlackCount: 0,
InviteRenewalGoldCount: 0,
InviteRenewalPlatinumCount: 0,
InviteRenewalBlackGoldCount: 0,
InviteUpgradeGoldToPlatinumCount: 0,
InviteUpgradeGoldToBlackCount: 0,
InviteUpgradePlatinumToBlackCount: 0,
}
//for i, _ := range userInvites {
@ -2928,13 +2944,13 @@ func (m *AssistantInviteMemberReportReq) List(c *gin.Context) (*AssistantInviteM
//totalPage := int(count)/m.PageSize + 1
if m.IsExport == 1 { // 导出excel
err = qs.Order("store_id DESC,id DESC").Find(&memberReport).Error
err = qs.Order("STR_TO_DATE(date, '%Y-%m-%d') DESC, store_id ASC").Find(&memberReport).Error
if err != nil && err != RecordNotFound {
logger.Error("err:", logger.Field("err", err))
return nil, err
}
} else {
err = qs.Order("store_id DESC,id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error
err = qs.Order("STR_TO_DATE(date, '%Y-%m-%d') DESC, store_id ASC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error
if err != nil && err != RecordNotFound {
logger.Error("err:", logger.Field("err", err))
return nil, err

View File

@ -5374,7 +5374,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/basic.SupplierListRequest"
"$ref": "#/definitions/models.GetSupplierRequest"
}
}
],
@ -5384,7 +5384,7 @@ const docTemplate = `{
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Supplier"
"$ref": "#/definitions/models.GetSupplierResp"
}
}
}
@ -6374,19 +6374,6 @@ const docTemplate = `{
}
}
},
"basic.SupplierListRequest": {
"type": "object",
"properties": {
"name": {
"description": "供应商名称",
"type": "string"
},
"number": {
"description": "供应商编号",
"type": "string"
}
}
},
"basic.SupplierUpdateRequest": {
"type": "object",
"required": [
@ -8802,6 +8789,10 @@ const docTemplate = `{
"description": "审核人姓名",
"type": "string"
},
"bank_trx_no": {
"description": "银行流水号",
"type": "string"
},
"bill_sn": {
"description": "单据编号",
"type": "string"
@ -9449,10 +9440,18 @@ const docTemplate = `{
"models.ErpOrderRetailDetailReq": {
"type": "object",
"properties": {
"bank_trx_no": {
"description": "银行流水号",
"type": "string"
},
"bill_sn": {
"description": "单据编号",
"type": "string"
},
"cashier_id": {
"description": "收付款方式id",
"type": "integer"
},
"end_time": {
"description": "结束时间",
"type": "string"
@ -11123,7 +11122,10 @@ const docTemplate = `{
},
"commodity_name": {
"description": "商品名称",
"type": "string"
"type": "array",
"items": {
"type": "string"
}
},
"erp_category_id": {
"description": "商品分类Id",
@ -11171,6 +11173,13 @@ const docTemplate = `{
},
"state": {
"description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库前端只看14",
"type": "array",
"items": {
"type": "integer"
}
},
"stock_sort_flag": {
"description": "排序方式0-按入库时间降序排列默认1-按入库时间升序排列",
"type": "integer"
},
"stock_time_end": {
@ -11759,6 +11768,54 @@ const docTemplate = `{
}
}
},
"models.GetSupplierRequest": {
"type": "object",
"properties": {
"cooperativeBusinessId": {
"description": "合作商id",
"type": "integer"
},
"name": {
"description": "供应商名称",
"type": "string"
},
"number": {
"description": "供应商编号",
"type": "string"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "每页展示数据条数",
"type": "integer"
}
}
},
"models.GetSupplierResp": {
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Supplier"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "每页展示条数",
"type": "integer"
},
"total": {
"description": "数据总条数",
"type": "integer"
}
}
},
"models.GoodsOrderListReq": {
"type": "object",
"properties": {
@ -16183,11 +16240,11 @@ const docTemplate = `{
"properties": {
"DJ": {
"description": "商品指导零售价",
"type": "integer"
"type": "number"
},
"JE": {
"description": "商品指导零售价乘以销售数量",
"type": "integer"
"type": "number"
},
"SL": {
"description": "销售数量",

View File

@ -5363,7 +5363,7 @@
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/basic.SupplierListRequest"
"$ref": "#/definitions/models.GetSupplierRequest"
}
}
],
@ -5373,7 +5373,7 @@
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Supplier"
"$ref": "#/definitions/models.GetSupplierResp"
}
}
}
@ -6363,19 +6363,6 @@
}
}
},
"basic.SupplierListRequest": {
"type": "object",
"properties": {
"name": {
"description": "供应商名称",
"type": "string"
},
"number": {
"description": "供应商编号",
"type": "string"
}
}
},
"basic.SupplierUpdateRequest": {
"type": "object",
"required": [
@ -8791,6 +8778,10 @@
"description": "审核人姓名",
"type": "string"
},
"bank_trx_no": {
"description": "银行流水号",
"type": "string"
},
"bill_sn": {
"description": "单据编号",
"type": "string"
@ -9438,10 +9429,18 @@
"models.ErpOrderRetailDetailReq": {
"type": "object",
"properties": {
"bank_trx_no": {
"description": "银行流水号",
"type": "string"
},
"bill_sn": {
"description": "单据编号",
"type": "string"
},
"cashier_id": {
"description": "收付款方式id",
"type": "integer"
},
"end_time": {
"description": "结束时间",
"type": "string"
@ -11112,7 +11111,10 @@
},
"commodity_name": {
"description": "商品名称",
"type": "string"
"type": "array",
"items": {
"type": "string"
}
},
"erp_category_id": {
"description": "商品分类Id",
@ -11160,6 +11162,13 @@
},
"state": {
"description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库前端只看14",
"type": "array",
"items": {
"type": "integer"
}
},
"stock_sort_flag": {
"description": "排序方式0-按入库时间降序排列默认1-按入库时间升序排列",
"type": "integer"
},
"stock_time_end": {
@ -11748,6 +11757,54 @@
}
}
},
"models.GetSupplierRequest": {
"type": "object",
"properties": {
"cooperativeBusinessId": {
"description": "合作商id",
"type": "integer"
},
"name": {
"description": "供应商名称",
"type": "string"
},
"number": {
"description": "供应商编号",
"type": "string"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "每页展示数据条数",
"type": "integer"
}
}
},
"models.GetSupplierResp": {
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Supplier"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "每页展示条数",
"type": "integer"
},
"total": {
"description": "数据总条数",
"type": "integer"
}
}
},
"models.GoodsOrderListReq": {
"type": "object",
"properties": {
@ -16172,11 +16229,11 @@
"properties": {
"DJ": {
"description": "商品指导零售价",
"type": "integer"
"type": "number"
},
"JE": {
"description": "商品指导零售价乘以销售数量",
"type": "integer"
"type": "number"
},
"SL": {
"description": "销售数量",

View File

@ -177,15 +177,6 @@ definitions:
- bank_list
- name
type: object
basic.SupplierListRequest:
properties:
name:
description: 供应商名称
type: string
number:
description: 供应商编号
type: string
type: object
basic.SupplierUpdateRequest:
properties:
account_holder:
@ -1943,6 +1934,9 @@ definitions:
auditor_name:
description: 审核人姓名
type: string
bank_trx_no:
description: 银行流水号
type: string
bill_sn:
description: 单据编号
type: string
@ -2418,9 +2412,15 @@ definitions:
type: object
models.ErpOrderRetailDetailReq:
properties:
bank_trx_no:
description: 银行流水号
type: string
bill_sn:
description: 单据编号
type: string
cashier_id:
description: 收付款方式id
type: integer
end_time:
description: 结束时间
type: string
@ -3638,7 +3638,9 @@ definitions:
type: integer
commodity_name:
description: 商品名称
type: string
items:
type: string
type: array
erp_category_id:
description: 商品分类Id
type: integer
@ -3674,6 +3676,11 @@ definitions:
type: string
state:
description: 库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库前端只看14
items:
type: integer
type: array
stock_sort_flag:
description: 排序方式0-按入库时间降序排列默认1-按入库时间升序排列
type: integer
stock_time_end:
description: 最近入库结束时间
@ -4091,6 +4098,40 @@ definitions:
total_page:
type: integer
type: object
models.GetSupplierRequest:
properties:
cooperativeBusinessId:
description: 合作商id
type: integer
name:
description: 供应商名称
type: string
number:
description: 供应商编号
type: string
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页展示数据条数
type: integer
type: object
models.GetSupplierResp:
properties:
list:
items:
$ref: '#/definitions/models.Supplier'
type: array
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页展示条数
type: integer
total:
description: 数据总条数
type: integer
type: object
models.GoodsOrderListReq:
properties:
goods_id:
@ -7282,10 +7323,10 @@ definitions:
properties:
DJ:
description: 商品指导零售价
type: integer
type: number
JE:
description: 商品指导零售价乘以销售数量
type: integer
type: number
SL:
description: 销售数量
type: integer
@ -11290,7 +11331,7 @@ paths:
name: request
required: true
schema:
$ref: '#/definitions/basic.SupplierListRequest'
$ref: '#/definitions/models.GetSupplierRequest'
produces:
- application/json
responses:
@ -11298,7 +11339,7 @@ paths:
description: OK
schema:
items:
$ref: '#/definitions/models.Supplier'
$ref: '#/definitions/models.GetSupplierResp'
type: array
summary: 供应商列表
tags:

View File

@ -52,6 +52,24 @@ func TestStock(t *testing.T) {
}
func TestFindRightErpStockCommodityId(t *testing.T) {
usedStockCommodityIdList := make(map[uint32][]uint32)
commodityId := 23
var stockCommodity []models.ErpStockCommodity
//stockCommodity1 := models.ErpStockCommodity{}
//stockCommodity1.ID = 4350
//
//stockCommodity2 := models.ErpStockCommodity{}
//stockCommodity2.ID = 4351
//
//stockCommodity = append(stockCommodity, stockCommodity1)
//stockCommodity = append(stockCommodity, stockCommodity2)
rightId, _ := models.FindRightErpStockCommodityId(usedStockCommodityIdList, uint32(commodityId), stockCommodity)
fmt.Println("rightId is:", rightId)
}
func TestSetGameCardStock(t *testing.T) {
SetGameCardStock()
}