作者 唐旭辉

修改 订单唯一性判定

@@ -225,20 +225,14 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) ( @@ -225,20 +225,14 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (
225 }); err != nil { 225 }); err != nil {
226 return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error()) 226 return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
227 } 227 }
228 - //检查order_code是否重复  
229 - // if ok, err := orderBaseDao.OrderCodeExist(cmd.OrderCode, cmd.PartnerCategory, cmd.PartnerId); err != nil {  
230 - // return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())  
231 - // } else if ok {  
232 - // return nil, lib.ThrowError(lib.BUSINESS_ERROR, "订单号已存在")  
233 - // }  
234 - //检查delivery_code是否重复  
235 - if len(cmd.DeliveryCode) > 0 {  
236 - if ok, err := orderBaseDao.DeliveryCodeExist(cmd.DeliveryCode, cmd.CompanyId); err != nil {  
237 - return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())  
238 - } else if ok {  
239 - return nil, lib.ThrowError(lib.BUSINESS_ERROR, "发货号已存在")  
240 - } 228 +
  229 + if ok, err := orderBaseDao.CheckOrderExist(cmd.CompanyId, cmd.OrderCode, cmd.DeliveryCode,
  230 + cmd.PartnerCategory, cmd.PartnerId, 0); err != nil {
  231 + return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
  232 + } else if ok {
  233 + return nil, lib.ThrowError(lib.BUSINESS_ERROR, "订单已存在")
241 } 234 }
  235 +
242 newOrder := &domain.OrderBase{ 236 newOrder := &domain.OrderBase{
243 OrderType: cmd.OrderType, OrderCode: cmd.OrderCode, 237 OrderType: cmd.OrderType, OrderCode: cmd.OrderCode,
244 DeliveryCode: cmd.DeliveryCode, 238 DeliveryCode: cmd.DeliveryCode,
@@ -436,12 +430,10 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand) @@ -436,12 +430,10 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand)
436 // } 430 // }
437 // } 431 // }
438 //检查delivery_code是否重复 432 //检查delivery_code是否重复
439 - if cmd.DeliveryCode != oldOrderData.DeliveryCode {  
440 - if ok, err := orderBaseDao.DeliveryCodeExist(cmd.DeliveryCode, cmd.CompanyId, cmd.Id); err != nil {  
441 - return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())  
442 - } else if ok {  
443 - return nil, lib.ThrowError(lib.BUSINESS_ERROR, "发货号已存在")  
444 - } 433 + if ok, err := orderBaseDao.CheckOrderExist(cmd.CompanyId, cmd.OrderCode, cmd.DeliveryCode, cmd.PartnerCategory, cmd.PartnerId, cmd.Id); err != nil {
  434 + return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
  435 + } else if ok {
  436 + return nil, lib.ThrowError(lib.BUSINESS_ERROR, "订单已存在")
445 } 437 }
446 //获取旧的订单中的商品 438 //获取旧的订单中的商品
447 oldOrderGoods, _, err = orderGoodRepository.Find(domain.OrderGoodFindQuery{ 439 oldOrderGoods, _, err = orderGoodRepository.Find(domain.OrderGoodFindQuery{
@@ -23,26 +23,20 @@ func NewOrderBaseDao(transactionContext *transaction.TransactionContext) (*Order @@ -23,26 +23,20 @@ func NewOrderBaseDao(transactionContext *transaction.TransactionContext) (*Order
23 } 23 }
24 } 24 }
25 25
26 -//OrderCodeExist 检查order_code是否重复  
27 -//  
28 -func (dao OrderBaseDao) OrderCodeExist(code string, partnerCategory int64, partnerId int64) (bool, error) { 26 +//CheckOrderUnique 检查订单的是否已存在
  27 +//@companyId 公司id
  28 +//@orderCode 订单号
  29 +//@deliveryCode 发货单号
  30 +//@partnerCategoryCode 合伙人类型编号
  31 +func (dao OrderBaseDao) CheckOrderExist(companyId int64, orderCode string,
  32 + deliveryCode string, partnerCategory int64, partnerId int64, notId int64) (bool, error) {
29 tx := dao.transactionContext.GetDB() 33 tx := dao.transactionContext.GetDB()
30 - m := &models.OrderBase{}  
31 - query := tx.Model(m).  
32 - Where("order_code=?", code). 34 + query := tx.Model(&models.OrderBase{}).
  35 + Where("company_id=?", companyId).
  36 + Where("order_code=?", orderCode).
33 Where("partner_id=?", partnerId). 37 Where("partner_id=?", partnerId).
34 - Where(`partner_category @>'{"id":?}'`, partnerCategory)  
35 - ok, err := query.Exists()  
36 - return ok, err  
37 -}  
38 -  
39 -func (dao OrderBaseDao) DeliveryCodeExist(code string, companyId int64, notId ...int64) (bool, error) {  
40 - tx := dao.transactionContext.GetDB()  
41 - m := &models.OrderBase{}  
42 - query := tx.Model(m).Where("delivery_code=?", code).Where("company_id=?", companyId)  
43 - if len(notId) > 0 {  
44 - query = query.WhereIn("id not in(?)", notId)  
45 - } 38 + Where(`partner_category @>'{"id":?}'`, partnerCategory).
  39 + Where("id<>?", notId)
46 ok, err := query.Exists() 40 ok, err := query.Exists()
47 return ok, err 41 return ok, err
48 } 42 }