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()
err = begin.Save(commodity).Error
err = begin.Omit("created_at").Save(commodity).Error
if err != nil {
logger.Error("create commodity err:", logger.Field("err", 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"), "参数错误")
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{
Name: req.Name,
Contact: req.Contact,
Tel: req.Tel,
Address: req.Address,
OpeningBank: req.OpeningBank,
BankAccount: req.BankAccount,
PaymentCycle: req.PaymentCycle,
TaxNumber: req.TaxNumber,
Landline: req.Landline,
Email: req.Email,
CompanyWebsite: req.CompanyWebsite,
Province: req.Province,
City: req.City,
Area: req.Area,
AccountHolder: req.AccountHolder,
Number: supplierInfo.Number,
Name: req.Name,
Contact: req.Contact,
Tel: req.Tel,
Address: req.Address,
OpeningBank: req.OpeningBank,
BankAccount: req.BankAccount,
PaymentCycle: req.PaymentCycle,
TaxNumber: req.TaxNumber,
Landline: req.Landline,
Email: req.Email,
CompanyWebsite: req.CompanyWebsite,
Province: req.Province,
City: req.City,
Area: req.Area,
AccountHolder: req.AccountHolder,
CooperativeBusinessId: middleware.GetCooperativeBusinessId(c),
}
if len(req.BankList) != 0 {
@ -144,7 +154,7 @@ func SupplierUpdate(c *gin.Context) {
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 {
logger.Error("update supplier err :", logger.Field("err", err), logger.Field("s", supplier))
app.Error(c, http.StatusInternalServerError, err, "更新失败")

View File

@ -35,6 +35,11 @@ func ErpOrderCreate(c *gin.Context) {
return
}
// 如果用户是会员,手机号不能为空
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
}
err = model.CreateErpOrder(req, c)
if err != nil {
logger.Error("CreateErpOrder err:", logger.Field("err", err))
@ -68,6 +73,11 @@ func ErpOrderEdit(c *gin.Context) {
return
}
// 如果用户是会员,手机号不能为空
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
}
err = model.EditErpOrder(req, c)
if err != nil {
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)
}
if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0])
qs = qs.Where("store_id = ?", storeIDs[0])
} else {
qs = qs.Where("store_id IN (?)", storeIDs)
}
@ -422,6 +422,7 @@ func calculateInventoryReport(m *ErpDecisionReportReq, item ErpStock) (DecisionR
return reportData, nil
}
// 查询期初库存和金额
func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
var reportData DecisionReportData
@ -1556,9 +1557,9 @@ func getSumStartCount(req *ErpDecisionReportReq) (DecisionReportData, error) {
storeIDs = append(storeIDs, store)
}
if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0])
es = es.Where("store_id IN = ?", storeIDs[0])
ts = ts.Where("store_id IN = ?", storeIDs[0])
qs = qs.Where("store_id = ?", storeIDs[0])
es = es.Where("store_id = ?", storeIDs[0])
ts = ts.Where("store_id = ?", storeIDs[0])
} else {
qs = qs.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)
}
if len(storeIDs) == 1 {
qs = qs.Where("store_id IN = ?", storeIDs[0])
es = es.Where("store_id IN = ?", storeIDs[0])
qs = qs.Where("store_id = ?", storeIDs[0])
es = es.Where("store_id = ?", storeIDs[0])
} else {
qs = qs.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)
}
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 {
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
StoreName string `json:"store_name" binding:"required"` // 门店名称
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 会员
TotalRetailPrice float64 `json:"total_retail_price"` // 订单总指导零售价如果是赠送商品金额可以为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)
}
if req.BillSn != "" {
qs = qs.Where("erp_order.bill_sn=?", req.BillSn)
}
if 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()
// 0-创建用户信息
userInfo, err := GetUserInfoByTel(req.Tel)
if err != nil {
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 req.Tel != "" {
// 0-创建用户信息
userInfo, err := GetUserInfoByTel(req.Tel)
if err != nil {
begin.Rollback()
logger.Error("create user err:", logger.Field("err", err))
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 {
begin.Rollback()
logger.Error("create user err:", logger.Field("err", err))
return errors.New("操作失败:" + err.Error())
}
}
}
// 1-创建零售订单
@ -5063,7 +5069,8 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
erpOrder.BillSn = orderInfo.BillSn // 编辑的订单单据号不能改变
begin := orm.Eloquent.Begin()
// 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 {
begin.Rollback()
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())
}
// 通过手机号查询用户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
if userInfo.Uid == 0 {
userUid = CreateUid() // 没有用户则新建
} else {
userUid = userInfo.Uid
if req.Tel != "" {
// 通过手机号查询用户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())
}
if userInfo.Uid == 0 {
userUid = CreateUid() // 没有用户则新建
} else {
userUid = userInfo.Uid
}
}
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
@ -5580,25 +5591,32 @@ func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
rejectOrderSalesMap := make(map[string]bool)
for _, item := range req.ErpOrderCommodities {
// 查询退货商品之前的销售情况
if item.IMEIType == NoIMEICommodity { //非串码商品
var commodities []ErpOrderCommodity
err := orm.Eloquent.Table("erp_order_commodity").
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
Where("erp_order_commodity.erp_commodity_id = ? and erp_order.store_id = ? "+
"and erp_order.retail_type = ? and erp_order.pay_status = ? and erp_order.tel = ?",
item.ErpCommodityId, req.StoreId, RetailTypeSale, HavePaid, req.Tel).
Find(&commodities).Order("audit_time DESC").Error
if err != nil {
logger.Error("query erp_order_commodity err:", logger.Field("err", err))
return 0, errors.New("操作失败:" + err.Error())
}
if item.IMEIType == NoIMEICommodity {
var saleOrderId uint32
if req.Tel != "" { //非串码商品,且手机号不为空才校验
var commodities []ErpOrderCommodity
err := orm.Eloquent.Table("erp_order_commodity").
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
Where("erp_order_commodity.erp_commodity_id = ? and erp_order.store_id = ? "+
"and erp_order.retail_type = ? and erp_order.pay_status = ? and erp_order.tel = ?",
item.ErpCommodityId, req.StoreId, RetailTypeSale, HavePaid, req.Tel).
Find(&commodities).Order("audit_time DESC").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 {
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName))
if len(commodities) == 0 {
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName))
}
saleOrderId = commodities[0].ErpOrderId
} else {
saleOrderId = item.ErpOrderId
}
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
if err != nil {
logger.Error("query erp_order err:", logger.Field("err", err))
@ -5613,6 +5631,7 @@ func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
return 0, errors.New("只可添加相同零售订单的商品")
}
salesId = orderInfo.ID
} else { // 串码商品
if item.IMEI == "" {
return 0, errors.New("退货商品串码为空")
@ -5683,7 +5702,7 @@ func updateCommodityData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) e
for i, _ := range req.ErpOrderCommodities {
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
}
}

View File

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

View File

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

View File

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