1.修复编辑商品资料后更新创建时间为空的缺陷;

2.修复进销存报表通过分类、名称查询报错的问题;
3.零售订单开单优化,允许非会员手机号为空的情况;
4.修复库存调拨、库存变动、采购订单、供应商等功能编辑时部分数据不能置为空,且创建时间会更新为空的问题;
This commit is contained in:
chenlin 2024-08-16 17:42:37 +08:00
parent 2033896d43
commit e45772ab7c
9 changed files with 120 additions and 79 deletions

View File

@ -330,7 +330,7 @@ func CommodityEdit(c *gin.Context) {
} }
begin := orm.Eloquent.Begin() begin := orm.Eloquent.Begin()
err = begin.Save(commodity).Error err = begin.Omit("created_at").Save(commodity).Error
if err != nil { if err != nil {
logger.Error("create commodity err:", logger.Field("err", err)) logger.Error("create commodity err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "操作失败") app.Error(c, http.StatusInternalServerError, err, "操作失败")

View File

@ -115,22 +115,32 @@ func SupplierUpdate(c *gin.Context) {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return return
} }
var supplierInfo models.Supplier
err := orm.Eloquent.Model(models.Supplier{}).Where("id", req.Id).Find(&supplierInfo).Error
if err != nil || err == models.RecordNotFound {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
supplier := &models.Supplier{ supplier := &models.Supplier{
Name: req.Name, Number: supplierInfo.Number,
Contact: req.Contact, Name: req.Name,
Tel: req.Tel, Contact: req.Contact,
Address: req.Address, Tel: req.Tel,
OpeningBank: req.OpeningBank, Address: req.Address,
BankAccount: req.BankAccount, OpeningBank: req.OpeningBank,
PaymentCycle: req.PaymentCycle, BankAccount: req.BankAccount,
TaxNumber: req.TaxNumber, PaymentCycle: req.PaymentCycle,
Landline: req.Landline, TaxNumber: req.TaxNumber,
Email: req.Email, Landline: req.Landline,
CompanyWebsite: req.CompanyWebsite, Email: req.Email,
Province: req.Province, CompanyWebsite: req.CompanyWebsite,
City: req.City, Province: req.Province,
Area: req.Area, City: req.City,
AccountHolder: req.AccountHolder, Area: req.Area,
AccountHolder: req.AccountHolder,
CooperativeBusinessId: middleware.GetCooperativeBusinessId(c),
} }
if len(req.BankList) != 0 { if len(req.BankList) != 0 {
@ -144,7 +154,7 @@ func SupplierUpdate(c *gin.Context) {
supplier.BankData = "" supplier.BankData = ""
} }
err := orm.Eloquent.Where("id", req.Id).Updates(supplier).Error err = orm.Eloquent.Where("id", req.Id).Omit("created_at").Save(&supplier).Error
if err != nil { if err != nil {
logger.Error("update supplier err :", logger.Field("err", err), logger.Field("s", supplier)) logger.Error("update supplier err :", logger.Field("err", err), logger.Field("s", supplier))
app.Error(c, http.StatusInternalServerError, err, "更新失败") app.Error(c, http.StatusInternalServerError, err, "更新失败")

View File

@ -35,6 +35,11 @@ func ErpOrderCreate(c *gin.Context) {
return return
} }
// 如果用户是会员,手机号不能为空
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
}
err = model.CreateErpOrder(req, c) err = model.CreateErpOrder(req, c)
if err != nil { if err != nil {
logger.Error("CreateErpOrder err:", logger.Field("err", err)) logger.Error("CreateErpOrder err:", logger.Field("err", err))
@ -68,6 +73,11 @@ func ErpOrderEdit(c *gin.Context) {
return return
} }
// 如果用户是会员,手机号不能为空
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
}
err = model.EditErpOrder(req, c) err = model.EditErpOrder(req, c)
if err != nil { if err != nil {
logger.Error("EditErpOrder err:", logger.Field("err", err)) logger.Error("EditErpOrder err:", logger.Field("err", err))

View File

@ -125,7 +125,7 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
storeIDs = append(storeIDs, store) storeIDs = append(storeIDs, store)
} }
if len(storeIDs) == 1 { if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0]) qs = qs.Where("store_id = ?", storeIDs[0])
} else { } else {
qs = qs.Where("store_id IN (?)", storeIDs) qs = qs.Where("store_id IN (?)", storeIDs)
} }
@ -422,6 +422,7 @@ func calculateInventoryReport(m *ErpDecisionReportReq, item ErpStock) (DecisionR
return reportData, nil return reportData, nil
} }
// 查询期初库存和金额
func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) { func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
var reportData DecisionReportData var reportData DecisionReportData
@ -1556,9 +1557,9 @@ func getSumStartCount(req *ErpDecisionReportReq) (DecisionReportData, error) {
storeIDs = append(storeIDs, store) storeIDs = append(storeIDs, store)
} }
if len(storeIDs) == 1 { if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0]) qs = qs.Where("store_id = ?", storeIDs[0])
es = es.Where("store_id IN = ?", storeIDs[0]) es = es.Where("store_id = ?", storeIDs[0])
ts = ts.Where("store_id IN = ?", storeIDs[0]) ts = ts.Where("store_id = ?", storeIDs[0])
} else { } else {
qs = qs.Where("store_id IN (?)", storeIDs) qs = qs.Where("store_id IN (?)", storeIDs)
es = es.Where("store_id IN (?)", storeIDs) es = es.Where("store_id IN (?)", storeIDs)
@ -1697,8 +1698,8 @@ func getSumEndCount(req *ErpDecisionReportReq) (DecisionReportData, error) {
storeIDs = append(storeIDs, store) storeIDs = append(storeIDs, store)
} }
if len(storeIDs) == 1 { if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0]) qs = qs.Where("store_id = ?", storeIDs[0])
es = es.Where("store_id IN = ?", storeIDs[0]) es = es.Where("store_id = ?", storeIDs[0])
} else { } else {
qs = qs.Where("store_id IN (?)", storeIDs) qs = qs.Where("store_id IN (?)", storeIDs)
es = es.Where("store_id IN (?)", storeIDs) es = es.Where("store_id IN (?)", storeIDs)
@ -2140,9 +2141,9 @@ func getSumAllotData(req *ErpDecisionReportReq) (DecisionReportData, error) {
categoryIDs = append(categoryIDs, category) categoryIDs = append(categoryIDs, category)
} }
if len(categoryIDs) == 1 { if len(categoryIDs) == 1 {
qs = qs.Where("erp_inventory_allot_commodity.erp_category_id = ?", categoryIDs[0]) qs = qs.Where("erp_inventory_allot_commodity.category_id = ?", categoryIDs[0])
} else { } else {
qs = qs.Where("erp_inventory_allot_commodity.erp_category_id IN (?)", categoryIDs) qs = qs.Where("erp_inventory_allot_commodity.category_id IN (?)", categoryIDs)
} }
} }

View File

@ -175,7 +175,7 @@ type ErpOrderCreateReq struct {
StoreId uint32 `json:"store_id" binding:"required"` // 门店id StoreId uint32 `json:"store_id" binding:"required"` // 门店id
StoreName string `json:"store_name" binding:"required"` // 门店名称 StoreName string `json:"store_name" binding:"required"` // 门店名称
RetailType string `json:"retail_type" binding:"required"` // 销售类型sale 零售销售; rejected 零售退货 RetailType string `json:"retail_type" binding:"required"` // 销售类型sale 零售销售; rejected 零售退货
Tel string `json:"tel" binding:"required"` // 会员手机号 Tel string `json:"tel"` // 会员手机号
MemberType string `json:"member_type" binding:"required"` // 会员类型general 普通; member 会员 MemberType string `json:"member_type" binding:"required"` // 会员类型general 普通; member 会员
TotalRetailPrice float64 `json:"total_retail_price"` // 订单总指导零售价如果是赠送商品金额可以为0 TotalRetailPrice float64 `json:"total_retail_price"` // 订单总指导零售价如果是赠送商品金额可以为0
TotalAmount float64 `json:"total_amount"` // 订单实收金额如果只有1个赠送商品金额可以为0 TotalAmount float64 `json:"total_amount"` // 订单实收金额如果只有1个赠送商品金额可以为0
@ -730,6 +730,10 @@ func QueryListByCommodityName(req *ErpOrderListReq, showConfig string, c *gin.Co
qs = qs.Where("invoice_code != ?", 0) qs = qs.Where("invoice_code != ?", 0)
} }
if req.BillSn != "" {
qs = qs.Where("erp_order.bill_sn=?", req.BillSn)
}
if req.Tel != "" { // 用户手机号 if req.Tel != "" { // 用户手机号
qs = qs.Where("erp_order.tel=?", req.Tel) qs = qs.Where("erp_order.tel=?", req.Tel)
} }
@ -4953,29 +4957,31 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
} }
begin := orm.Eloquent.Begin() begin := orm.Eloquent.Begin()
// 0-创建用户信息 if req.Tel != "" {
userInfo, err := GetUserInfoByTel(req.Tel) // 0-创建用户信息
if err != nil { userInfo, err := GetUserInfoByTel(req.Tel)
logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
return errors.New("操作失败:" + err.Error())
}
if userInfo.Uid == 0 {
user := UserInfo{
Uid: uint32(erpOrder.Uid),
Tel: req.Tel,
StoreId: uint64(req.StoreId),
UserType: UserTypeConsumer, // 用户
OpenMemberLevel: MemberLevelConsumer, // 普通用户
MemberLevel: MemberLevelConsumer, // 普通用户
CooperativeBusinessId: 1, // 合作商默认为1
}
err = begin.Create(&user).Error
if err != nil { if err != nil {
begin.Rollback() logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
logger.Error("create user err:", logger.Field("err", err))
return errors.New("操作失败:" + err.Error()) return errors.New("操作失败:" + err.Error())
} }
if userInfo.Uid == 0 {
user := UserInfo{
Uid: uint32(erpOrder.Uid),
Tel: req.Tel,
StoreId: uint64(req.StoreId),
UserType: UserTypeConsumer, // 用户
OpenMemberLevel: MemberLevelConsumer, // 普通用户
MemberLevel: MemberLevelConsumer, // 普通用户
CooperativeBusinessId: 1, // 合作商默认为1
}
err = begin.Create(&user).Error
if err != nil {
begin.Rollback()
logger.Error("create user err:", logger.Field("err", err))
return errors.New("操作失败:" + err.Error())
}
}
} }
// 1-创建零售订单 // 1-创建零售订单
@ -5063,7 +5069,8 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
erpOrder.BillSn = orderInfo.BillSn // 编辑的订单单据号不能改变 erpOrder.BillSn = orderInfo.BillSn // 编辑的订单单据号不能改变
begin := orm.Eloquent.Begin() begin := orm.Eloquent.Begin()
// 1-更新零售订单 // 1-更新零售订单
err = begin.Model(&ErpOrder{}).Where("id = ?", orderInfo.ID).Updates(erpOrder).Error //err = begin.Model(&ErpOrder{}).Where("id = ?", orderInfo.ID).Updates(erpOrder).Error
err = begin.Model(&ErpOrder{}).Where("id = ?", orderInfo.ID).Save(&erpOrder).Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("update erp_order err:", logger.Field("err", err)) logger.Error("update erp_order err:", logger.Field("err", err))
@ -5185,18 +5192,20 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
return nil, errors.New("操作失败:" + err.Error()) return nil, errors.New("操作失败:" + err.Error())
} }
// 通过手机号查询用户id如果没有则新建一个用户id
userInfo, err := GetUserInfoByTel(req.Tel)
if err != nil {
logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
return nil, errors.New("操作失败:" + err.Error())
}
var userUid uint32 var userUid uint32
if userInfo.Uid == 0 { if req.Tel != "" {
userUid = CreateUid() // 没有用户则新建 // 通过手机号查询用户id如果没有则新建一个用户id
} else { userInfo, err := GetUserInfoByTel(req.Tel)
userUid = userInfo.Uid if err != nil {
logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
return nil, errors.New("操作失败:" + err.Error())
}
if userInfo.Uid == 0 {
userUid = CreateUid() // 没有用户则新建
} else {
userUid = userInfo.Uid
}
} }
erpOrder := &ErpOrder{ erpOrder := &ErpOrder{
@ -5277,7 +5286,9 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
} }
// 更新用户信息表,添加首次零售订单时间 // 更新用户信息表,添加首次零售订单时间
SetUserInfo(req.Tel) if req.Tel != "" {
SetUserInfo(req.Tel)
}
} }
//var orderCommodityMap map[uint32]ErpOrderCommodity //var orderCommodityMap map[uint32]ErpOrderCommodity
@ -5580,25 +5591,32 @@ func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
rejectOrderSalesMap := make(map[string]bool) rejectOrderSalesMap := make(map[string]bool)
for _, item := range req.ErpOrderCommodities { for _, item := range req.ErpOrderCommodities {
// 查询退货商品之前的销售情况 // 查询退货商品之前的销售情况
if item.IMEIType == NoIMEICommodity { //非串码商品 if item.IMEIType == NoIMEICommodity {
var commodities []ErpOrderCommodity var saleOrderId uint32
err := orm.Eloquent.Table("erp_order_commodity"). if req.Tel != "" { //非串码商品,且手机号不为空才校验
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id "). var commodities []ErpOrderCommodity
Where("erp_order_commodity.erp_commodity_id = ? and erp_order.store_id = ? "+ err := orm.Eloquent.Table("erp_order_commodity").
"and erp_order.retail_type = ? and erp_order.pay_status = ? and erp_order.tel = ?", Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
item.ErpCommodityId, req.StoreId, RetailTypeSale, HavePaid, req.Tel). Where("erp_order_commodity.erp_commodity_id = ? and erp_order.store_id = ? "+
Find(&commodities).Order("audit_time DESC").Error "and erp_order.retail_type = ? and erp_order.pay_status = ? and erp_order.tel = ?",
if err != nil { item.ErpCommodityId, req.StoreId, RetailTypeSale, HavePaid, req.Tel).
logger.Error("query erp_order_commodity err:", logger.Field("err", err)) Find(&commodities).Order("audit_time DESC").Error
return 0, errors.New("操作失败:" + err.Error()) if err != nil {
} logger.Error("query erp_order_commodity err:", logger.Field("err", err))
return 0, errors.New("操作失败:" + err.Error())
}
if len(commodities) == 0 { if len(commodities) == 0 {
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName)) return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName))
}
saleOrderId = commodities[0].ErpOrderId
} else {
saleOrderId = item.ErpOrderId
} }
var orderInfo ErpOrder var orderInfo ErpOrder
err = orm.Eloquent.Table("erp_order").Where("id = ?", commodities[0].ErpOrderId). err := orm.Eloquent.Table("erp_order").Where("id = ?", saleOrderId).
Find(&orderInfo).Error Find(&orderInfo).Error
if err != nil { if err != nil {
logger.Error("query erp_order err:", logger.Field("err", err)) logger.Error("query erp_order err:", logger.Field("err", err))
@ -5613,6 +5631,7 @@ func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
return 0, errors.New("只可添加相同零售订单的商品") return 0, errors.New("只可添加相同零售订单的商品")
} }
salesId = orderInfo.ID salesId = orderInfo.ID
} else { // 串码商品 } else { // 串码商品
if item.IMEI == "" { if item.IMEI == "" {
return 0, errors.New("退货商品串码为空") return 0, errors.New("退货商品串码为空")
@ -5683,7 +5702,7 @@ func updateCommodityData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) e
for i, _ := range req.ErpOrderCommodities { for i, _ := range req.ErpOrderCommodities {
req.ErpOrderCommodities[i].ID = 0 req.ErpOrderCommodities[i].ID = 0
if req.ErpOrderCommodities[i].ErpOrderId == 0 { //发现前端有时会没传,后端打补丁 if req.ErpOrderCommodities[i].ErpOrderId == 0 || req.ErpOrderCommodities[i].ErpOrderId != orderId { //发现前端有时会没传,后端打补丁
req.ErpOrderCommodities[i].ErpOrderId = orderId req.ErpOrderCommodities[i].ErpOrderId = orderId
} }
} }

View File

@ -351,7 +351,7 @@ func EditAllotInventory(req *InventoryAllotEditReq) (*ErpInventoryAllotOrder, er
inventoryAllotOrder.TotalCount = nTotalCount inventoryAllotOrder.TotalCount = nTotalCount
err = begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID). err = begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID).
Updates(inventoryAllotOrder).Error Omit("created_at").Save(inventoryAllotOrder).Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("update allot order err:", logger.Field("err", err)) logger.Error("update allot order err:", logger.Field("err", err))

View File

@ -356,7 +356,7 @@ func EditChangeInventory(req *InventoryChangeEditReq) (*ErpInventoryChangeOrder,
inventoryChangeOrder.TotalAmount = nTotalAmount inventoryChangeOrder.TotalAmount = nTotalAmount
err = begin.Model(&ErpInventoryChangeOrder{}).Where("id = ?", inventoryChangeOrder.ID). err = begin.Model(&ErpInventoryChangeOrder{}).Where("id = ?", inventoryChangeOrder.ID).
Updates(inventoryChangeOrder).Error Omit("created_at").Save(inventoryChangeOrder).Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("update change order err:", logger.Field("err", err)) logger.Error("update change order err:", logger.Field("err", err))

View File

@ -339,7 +339,7 @@ func EditProductInventory(req *ProductInventoryEditReq) (*ErpInventoryProductOrd
inventoryProductOrder.TotalAmount = nTotalAmount inventoryProductOrder.TotalAmount = nTotalAmount
err = begin.Model(&ErpInventoryProductOrder{}).Where("id = ?", inventoryProductOrder.ID). err = begin.Model(&ErpInventoryProductOrder{}).Where("id = ?", inventoryProductOrder.ID).
Updates(inventoryProductOrder).Error Omit("created_at").Save(inventoryProductOrder).Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("update erp_order err:", logger.Field("err", err)) logger.Error("update erp_order err:", logger.Field("err", err))

View File

@ -1022,7 +1022,8 @@ func EditErpPurchaseOrder(req *ErpPurchaseEditReq, sysUser *SysUser) (*ErpPurcha
return nil, err return nil, err
} }
err = begin.Model(&ErpPurchaseOrder{}).Where("id = ?", req.ErpPurchaseOrderId).Updates(purchaseOrder).Error err = begin.Model(&ErpPurchaseOrder{}).Where("id = ?", req.ErpPurchaseOrderId).
Omit("created_at").Save(purchaseOrder).Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("update erp_order err:", logger.Field("err", err)) logger.Error("update erp_order err:", logger.Field("err", err))