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,7 +115,16 @@ 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{
Number: supplierInfo.Number,
Name: req.Name, Name: req.Name,
Contact: req.Contact, Contact: req.Contact,
Tel: req.Tel, Tel: req.Tel,
@ -131,6 +140,7 @@ func SupplierUpdate(c *gin.Context) {
City: req.City, City: req.City,
Area: req.Area, Area: req.Area,
AccountHolder: req.AccountHolder, 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,6 +4957,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
} }
begin := orm.Eloquent.Begin() begin := orm.Eloquent.Begin()
if req.Tel != "" {
// 0-创建用户信息 // 0-创建用户信息
userInfo, err := GetUserInfoByTel(req.Tel) userInfo, err := GetUserInfoByTel(req.Tel)
if err != nil { if err != nil {
@ -4977,6 +4982,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
return errors.New("操作失败:" + err.Error()) return errors.New("操作失败:" + err.Error())
} }
} }
}
// 1-创建零售订单 // 1-创建零售订单
err = begin.Create(erpOrder).Error err = begin.Create(erpOrder).Error
@ -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,6 +5192,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
return nil, errors.New("操作失败:" + err.Error()) return nil, errors.New("操作失败:" + err.Error())
} }
var userUid uint32
if req.Tel != "" {
// 通过手机号查询用户id如果没有则新建一个用户id // 通过手机号查询用户id如果没有则新建一个用户id
userInfo, err := GetUserInfoByTel(req.Tel) userInfo, err := GetUserInfoByTel(req.Tel)
if err != nil { if err != nil {
@ -5192,12 +5201,12 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
return nil, errors.New("操作失败:" + err.Error()) return nil, errors.New("操作失败:" + err.Error())
} }
var userUid uint32
if userInfo.Uid == 0 { if userInfo.Uid == 0 {
userUid = CreateUid() // 没有用户则新建 userUid = CreateUid() // 没有用户则新建
} else { } else {
userUid = userInfo.Uid userUid = userInfo.Uid
} }
}
erpOrder := &ErpOrder{ erpOrder := &ErpOrder{
BillSn: NewErpBillSn(), BillSn: NewErpBillSn(),
@ -5277,8 +5286,10 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
} }
// 更新用户信息表,添加首次零售订单时间 // 更新用户信息表,添加首次零售订单时间
if req.Tel != "" {
SetUserInfo(req.Tel) SetUserInfo(req.Tel)
} }
}
//var orderCommodityMap map[uint32]ErpOrderCommodity //var orderCommodityMap map[uint32]ErpOrderCommodity
//if req.RetailType == RetailTypeRejected { // 零售退货订单,查零售商品表 //if req.RetailType == RetailTypeRejected { // 零售退货订单,查零售商品表
@ -5580,7 +5591,9 @@ 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 saleOrderId uint32
if req.Tel != "" { //非串码商品,且手机号不为空才校验
var commodities []ErpOrderCommodity var commodities []ErpOrderCommodity
err := orm.Eloquent.Table("erp_order_commodity"). err := orm.Eloquent.Table("erp_order_commodity").
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id "). Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
@ -5597,8 +5610,13 @@ func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
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))