作者 陈志颖

fix:合约增加激励类型查询,分红订单增加合约激励类型校验

@@ -17,6 +17,8 @@ type SearchCooperationContractQuery struct { @@ -17,6 +17,8 @@ type SearchCooperationContractQuery struct {
17 CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber,omitempty"` 17 CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber,omitempty"`
18 // 发起人姓名 18 // 发起人姓名
19 SponsorName string `cname:"发起人姓名" json:"sponsorName,omitempty"` 19 SponsorName string `cname:"发起人姓名" json:"sponsorName,omitempty"`
  20 + // 激励类型
  21 + IncentivesType int32 `cname:"激励类型" json:"incentivesType,omitempty"`
20 // 公司ID,通过集成REST上下文获取 22 // 公司ID,通过集成REST上下文获取
21 CompanyId int64 `cname:"公司ID" json:"companyId"` 23 CompanyId int64 `cname:"公司ID" json:"companyId"`
22 // 组织机构ID 24 // 组织机构ID
@@ -30,7 +32,6 @@ type SearchCooperationContractQuery struct { @@ -30,7 +32,6 @@ type SearchCooperationContractQuery struct {
30 } 32 }
31 33
32 func (searchCooperationContractQuery *SearchCooperationContractQuery) Valid(validation *validation.Validation) { 34 func (searchCooperationContractQuery *SearchCooperationContractQuery) Valid(validation *validation.Validation) {
33 - //validation.SetError("CustomValid", "未实现的自定义认证")  
34 } 35 }
35 36
36 func (searchCooperationContractQuery *SearchCooperationContractQuery) ValidateQuery() error { 37 func (searchCooperationContractQuery *SearchCooperationContractQuery) ValidateQuery() error {
@@ -126,7 +126,9 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -126,7 +126,9 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
126 } 126 }
127 127
128 // 生成共创合约编号 128 // 生成共创合约编号
129 - contractNumber, err2 := cooperationContractDao.GenerateContractNumber() 129 + contractNumber, err2 := cooperationContractDao.GenerateContractNumber(map[string]interface{}{
  130 + "companyId": createCooperationContractCommand.CompanyId,
  131 + })
130 if err2 != nil { 132 if err2 != nil {
131 return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error()) 133 return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error())
132 } 134 }
@@ -134,7 +136,6 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -134,7 +136,6 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
134 // 校验共创合约编号是否唯一 136 // 校验共创合约编号是否唯一
135 numberAvailable, _ := cooperationContractDao.CheckContractNumberAvailable(map[string]interface{}{ 137 numberAvailable, _ := cooperationContractDao.CheckContractNumberAvailable(map[string]interface{}{
136 "companyId": createCooperationContractCommand.CompanyId, 138 "companyId": createCooperationContractCommand.CompanyId,
137 - "orgId": createCooperationContractCommand.OrgId,  
138 "cooperationContractNumber": contractNumber, 139 "cooperationContractNumber": contractNumber,
139 }) 140 })
140 if !numberAvailable { 141 if !numberAvailable {
@@ -163,7 +163,9 @@ func (cooperationProjectService *CooperationProjectService) CreateCooperationPro @@ -163,7 +163,9 @@ func (cooperationProjectService *CooperationProjectService) CreateCooperationPro
163 cooperationProjectDao = value 163 cooperationProjectDao = value
164 } 164 }
165 // 生成共创项目编号 165 // 生成共创项目编号
166 - projectNumber, err2 := cooperationProjectDao.GenerateProjectNumber() 166 + projectNumber, err2 := cooperationProjectDao.GenerateProjectNumber(map[string]interface{}{
  167 + "companyId": createCooperationProjectCommand.CompanyId,
  168 + })
167 if err2 != nil { 169 if err2 != nil {
168 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 170 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
169 } 171 }
@@ -158,7 +158,9 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred @@ -158,7 +158,9 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred
158 } 158 }
159 159
160 // 生成账期结算单号 160 // 生成账期结算单号
161 - creditAccountNumber, err12 := creditAccountDao.GenerateCreditAccountNumber() 161 + creditAccountNumber, err12 := creditAccountDao.GenerateCreditAccountNumber(map[string]interface{}{
  162 + "companyId": createCreditAccountCommand.CompanyId,
  163 + })
162 if err12 != nil { 164 if err12 != nil {
163 return nil, application.ThrowError(application.TRANSACTION_ERROR, "生成账期结算单号错误") 165 return nil, application.ThrowError(application.TRANSACTION_ERROR, "生成账期结算单号错误")
164 } 166 }
@@ -625,7 +625,6 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent @@ -625,7 +625,6 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent
625 // 统计当前分红预算单数 625 // 统计当前分红预算单数
626 count, err := dividendsEstimateDao.CountDividendsEstimate(map[string]interface{}{ 626 count, err := dividendsEstimateDao.CountDividendsEstimate(map[string]interface{}{
627 "companyId": confirmDividendsIncentivesEstimateCommand.CompanyId, 627 "companyId": confirmDividendsIncentivesEstimateCommand.CompanyId,
628 - "orgId": confirmDividendsIncentivesEstimateCommand.OrgId,  
629 }) 628 })
630 if err != nil { 629 if err != nil {
631 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 630 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
@@ -697,7 +696,9 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent @@ -697,7 +696,9 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent
697 } else { 696 } else {
698 for _, dividendsReturnedEstimateDetail := range dividendsReturnedEstimateDetails { 697 for _, dividendsReturnedEstimateDetail := range dividendsReturnedEstimateDetails {
699 // 生成分红预算单号 698 // 生成分红预算单号
700 - dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber() 699 + dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber(map[string]interface{}{
  700 + "companyId": confirmDividendsIncentivesEstimateCommand.CompanyId,
  701 + })
701 if err != nil { 702 if err != nil {
702 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 703 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
703 } 704 }
@@ -859,7 +860,9 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives @@ -859,7 +860,9 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives
859 } else { 860 } else {
860 for _, dividendsEstimateDetail := range dividendsEstimateDetails { 861 for _, dividendsEstimateDetail := range dividendsEstimateDetails {
861 // 生成分红预算单号 862 // 生成分红预算单号
862 - dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber() 863 + dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber(map[string]interface{}{
  864 + "companyId": confirmMoneyIncentivesEstimateCommand.CompanyId,
  865 + })
863 if err != nil { 866 if err != nil {
864 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 867 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
865 } 868 }
@@ -100,7 +100,9 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -100,7 +100,9 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
100 } 100 }
101 101
102 // 生成分红订单号 102 // 生成分红订单号
103 - dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber() 103 + dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber(map[string]interface{}{
  104 + "companyId": createDividendsOrderCommand.CompanyId,
  105 + })
104 if err != nil { 106 if err != nil {
105 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 107 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
106 } 108 }
@@ -108,7 +110,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -108,7 +110,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
108 // 校验分红订单编号是否唯一 110 // 校验分红订单编号是否唯一
109 numberAvailable, err := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{ 111 numberAvailable, err := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{
110 "companyId": createDividendsOrderCommand.CompanyId, 112 "companyId": createDividendsOrderCommand.CompanyId,
111 - "orgId": createDividendsOrderCommand.OrgId,  
112 "dividendsOrderNumber": dividendsOrderNumber, 113 "dividendsOrderNumber": dividendsOrderNumber,
113 }) 114 })
114 if err != nil { 115 if err != nil {
@@ -118,11 +119,44 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -118,11 +119,44 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
118 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常") 119 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")
119 } 120 }
120 121
  122 + // 合约仓储初始化
  123 + var cooperationContractRepository domain.CooperationContractRepository
  124 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  125 + "transactionContext": transactionContext,
  126 + }); err != nil {
  127 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  128 + } else {
  129 + cooperationContractRepository = value
  130 + }
  131 +
  132 + // 查找合约
  133 + var cooperationContractsMap map[string]*domain.CooperationContract
  134 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  135 + "companyId": createDividendsOrderCommand.CompanyId,
  136 + "orgId": createDividendsOrderCommand.OrgId,
  137 + }); err != nil {
  138 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  139 + } else {
  140 + if count > 0 {
  141 + for _, cooperationContract := range cooperationContracts {
  142 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  143 + }
  144 + }
  145 + }
  146 +
121 // 新增订单产品 147 // 新增订单产品
122 var orderGoods []*domain.OrderGood 148 var orderGoods []*domain.OrderGood
123 var dividendsOrderAmount float64 149 var dividendsOrderAmount float64
124 for _, orderGood := range createDividendsOrderCommand.OrderGoods { 150 for _, orderGood := range createDividendsOrderCommand.OrderGoods {
125 - orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Float64() 151 + // 计算订单产品金额
  152 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  153 +
  154 + // 校验共创合约
  155 + if orderGood.CooperationContractNumber != "" {
  156 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  157 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单产品不能关联金额激励规则")
  158 + }
  159 + }
126 orderGoods = append(orderGoods, &domain.OrderGood{ 160 orderGoods = append(orderGoods, &domain.OrderGood{
127 OrderGoodId: 0, 161 OrderGoodId: 0,
128 OrderGoodAmount: orderGoodAmount, 162 OrderGoodAmount: orderGoodAmount,
@@ -141,7 +175,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -141,7 +175,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
141 UpdatedAt: time.Time{}, 175 UpdatedAt: time.Time{},
142 }) 176 })
143 // 计算分红订单金额 177 // 计算分红订单金额
144 - dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense))).Float64() 178 + dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense))).Float64()
145 } 179 }
146 180
147 // 订单时间转换 181 // 订单时间转换
@@ -269,13 +303,20 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -269,13 +303,20 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
269 } 303 }
270 304
271 // 查找合约 305 // 查找合约
272 - _, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{ 306 + var cooperationContractsMap map[string]*domain.CooperationContract
  307 + countContracts, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
273 "offsetLimit": false, 308 "offsetLimit": false,
274 "companyId": importDividendsOrderCommand.CompanyId, 309 "companyId": importDividendsOrderCommand.CompanyId,
275 "orgId": importDividendsOrderCommand.OrgId, 310 "orgId": importDividendsOrderCommand.OrgId,
276 }) 311 })
277 if err != nil { 312 if err != nil {
278 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 313 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  314 + } else {
  315 + if countContracts > 0 {
  316 + for _, cooperationContract := range cooperationContracts {
  317 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  318 + }
  319 + }
279 } 320 }
280 321
281 // 分红订单DAO初始化 322 // 分红订单DAO初始化
@@ -673,7 +714,14 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -673,7 +714,14 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
673 } 714 }
674 715
675 // 计算产品金额 716 // 计算产品金额
676 - orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Float64() 717 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  718 +
  719 + // 校验共创合约激励类型是否正确
  720 + if orderGood.CooperationContractNumber != "" {
  721 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  722 + orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  723 + }
  724 + }
677 725
678 orderGoods = append(orderGoods, &domain.OrderGood{ 726 orderGoods = append(orderGoods, &domain.OrderGood{
679 OrderGoodId: 0, 727 OrderGoodId: 0,
@@ -24,6 +24,8 @@ type OrderGoods struct { @@ -24,6 +24,8 @@ type OrderGoods struct {
24 CooperationContractNumber string `cname:"关联的共创合约编号" json:"cooperationContractNumber"` 24 CooperationContractNumber string `cname:"关联的共创合约编号" json:"cooperationContractNumber"`
25 // 订单产品费用 25 // 订单产品费用
26 OrderGoodExpense float64 `cname:"订单产品费用" json:"orderGoodExpense"` 26 OrderGoodExpense float64 `cname:"订单产品费用" json:"orderGoodExpense"`
  27 + //行号-错误信息返回
  28 + LineNumber int `json:"lineNumber"`
27 } 29 }
28 30
29 type CreateDividendsReturnedOrderCommand struct { 31 type CreateDividendsReturnedOrderCommand struct {
@@ -99,7 +99,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -99,7 +99,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
99 } 99 }
100 100
101 // 生成分红订单号 101 // 生成分红订单号
102 - dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber() 102 + dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber(map[string]interface{}{
  103 + "companyId": createDividendsReturnedOrderCommand.CompanyId,
  104 + })
103 if err != nil { 105 if err != nil {
104 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 106 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
105 } 107 }
@@ -121,7 +123,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -121,7 +123,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
121 // 校验分红退货单编号是否唯一 123 // 校验分红退货单编号是否唯一
122 numberAvailable, err := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{ 124 numberAvailable, err := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
123 "companyId": createDividendsReturnedOrderCommand.CompanyId, 125 "companyId": createDividendsReturnedOrderCommand.CompanyId,
124 - "orgId": createDividendsReturnedOrderCommand.OrgId,  
125 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber, 126 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber,
126 }) 127 })
127 if err != nil { 128 if err != nil {
@@ -131,13 +132,46 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -131,13 +132,46 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
131 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单号已存在") 132 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单号已存在")
132 } 133 }
133 134
  135 + // 合约仓储初始化
  136 + var cooperationContractRepository domain.CooperationContractRepository
  137 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  138 + "transactionContext": transactionContext,
  139 + }); err != nil {
  140 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  141 + } else {
  142 + cooperationContractRepository = value
  143 + }
  144 +
  145 + // 查找合约
  146 + var cooperationContractsMap map[string]*domain.CooperationContract
  147 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  148 + "companyId": createDividendsReturnedOrderCommand.CompanyId,
  149 + "orgId": createDividendsReturnedOrderCommand.OrgId,
  150 + }); err != nil {
  151 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  152 + } else {
  153 + if count > 0 {
  154 + for _, cooperationContract := range cooperationContracts {
  155 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  156 + }
  157 + }
  158 + }
  159 +
134 // 退货金额 160 // 退货金额
135 var dividendsReturnedOrderRefund float64 161 var dividendsReturnedOrderRefund float64
136 162
137 - // 获取分红退货单产品 163 + // 新增分红退货单产品
138 var orderGoods []*domain.OrderGood 164 var orderGoods []*domain.OrderGood
139 for _, orderGood := range createDividendsReturnedOrderCommand.OrderGoods { 165 for _, orderGood := range createDividendsReturnedOrderCommand.OrderGoods {
140 - orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Float64() 166 + // 退货产品金额计算
  167 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  168 +
  169 + // 校验合约激励类型是否正确
  170 + if orderGood.CooperationContractNumber != "" {
  171 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  172 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  173 + }
  174 + }
141 orderGoods = append(orderGoods, &domain.OrderGood{ 175 orderGoods = append(orderGoods, &domain.OrderGood{
142 OrderGoodId: 0, 176 OrderGoodId: 0,
143 OrderGoodAmount: orderGoodAmount, 177 OrderGoodAmount: orderGoodAmount,
@@ -321,6 +355,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -321,6 +355,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
321 dividendsReturnedOrderRepository = value 355 dividendsReturnedOrderRepository = value
322 } 356 }
323 357
  358 + // 合约仓储初始化
  359 + var cooperationContractRepository domain.CooperationContractRepository
  360 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  361 + "transactionContext": transactionContext,
  362 + }); err != nil {
  363 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  364 + } else {
  365 + cooperationContractRepository = value
  366 + }
  367 +
  368 + // 查找合约
  369 + var cooperationContractsMap map[string]*domain.CooperationContract
  370 + countContracts, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  371 + "offsetLimit": false,
  372 + "companyId": importDividendsReturnedOrderCommand.CompanyId,
  373 + "orgId": importDividendsReturnedOrderCommand.OrgId,
  374 + })
  375 + if err != nil {
  376 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  377 + } else {
  378 + if countContracts > 0 {
  379 + for _, cooperationContract := range cooperationContracts {
  380 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  381 + }
  382 + }
  383 + }
  384 +
324 // 返回信息表头定义 385 // 返回信息表头定义
325 var tableHeader = map[string]interface{}{ 386 var tableHeader = map[string]interface{}{
326 "failReason": "错误详情", 387 "failReason": "错误详情",
@@ -664,7 +725,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -664,7 +725,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
664 // 批量导入创建退货单 725 // 批量导入创建退货单
665 for _, dividendsReturnedOrder := range createDividendsReturnedOrderCommands { 726 for _, dividendsReturnedOrder := range createDividendsReturnedOrderCommands {
666 // 生成退货订单号 727 // 生成退货订单号
667 - dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber() 728 + dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber(map[string]interface{}{
  729 + "companyId": importDividendsReturnedOrderCommand.CompanyId,
  730 + })
668 if err != nil { 731 if err != nil {
669 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 732 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
670 } 733 }
@@ -672,7 +735,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -672,7 +735,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
672 // 校验退货订单编号是否唯一 735 // 校验退货订单编号是否唯一
673 numberAvailable, err3 := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{ 736 numberAvailable, err3 := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
674 "companyId": importDividendsReturnedOrderCommand.CompanyId, 737 "companyId": importDividendsReturnedOrderCommand.CompanyId,
675 - "orgId": importDividendsReturnedOrderCommand.OrgId,  
676 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber, 738 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber,
677 }) 739 })
678 if err3 != nil { 740 if err3 != nil {
@@ -685,10 +747,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -685,10 +747,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
685 // 新增订单产品 747 // 新增订单产品
686 var orderGoods []*domain.OrderGood 748 var orderGoods []*domain.OrderGood
687 var dividendsReturnedOrderAmount float64 749 var dividendsReturnedOrderAmount float64
688 - for _, orderGood := range dividendsReturnedOrder.OrderGoods { 750 + orderGoodErrMap := make(map[int]interface{}, 0)
  751 + for i, orderGood := range dividendsReturnedOrder.OrderGoods {
  752 + // 校验共创合约是否合法
  753 + contractNumberExist := false
  754 + for _, cooperationContract := range cooperationContracts {
  755 + if orderGood.CooperationContractNumber == cooperationContract.CooperationContractNumber {
  756 + contractNumberExist = true
  757 + break
  758 + }
  759 + }
  760 + if !contractNumberExist {
  761 + orderGoodErrMap[dividendsReturnedOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err))
  762 + }
  763 +
  764 + // 计算产品金额
  765 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  766 +
  767 + // 校验合约激励类型是否正确
  768 + if orderGood.CooperationContractNumber != "" {
  769 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  770 + orderGoodErrMap[dividendsReturnedOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  771 + }
  772 + }
689 orderGoods = append(orderGoods, &domain.OrderGood{ 773 orderGoods = append(orderGoods, &domain.OrderGood{
690 OrderGoodId: 0, 774 OrderGoodId: 0,
691 - OrderGoodAmount: orderGood.OrderGoodAmount, 775 + OrderGoodAmount: orderGoodAmount,
692 OrderGoodName: orderGood.OrderGoodName, 776 OrderGoodName: orderGood.OrderGoodName,
693 OrderGoodPrice: orderGood.OrderGoodPrice, 777 OrderGoodPrice: orderGood.OrderGoodPrice,
694 OrderGoodQuantity: orderGood.OrderGoodQuantity, 778 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -13,7 +13,7 @@ type CooperationContractDao struct { @@ -13,7 +13,7 @@ type CooperationContractDao struct {
13 } 13 }
14 14
15 // GenerateContractNumber 生成共创合约编号 15 // GenerateContractNumber 生成共创合约编号
16 -func (dao *CooperationContractDao) GenerateContractNumber() (string, error) { 16 +func (dao *CooperationContractDao) GenerateContractNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var cooperationContractModels []*models.CooperationContract 18 var cooperationContractModels []*models.CooperationContract
19 query := tx.Model(&cooperationContractModels) 19 query := tx.Model(&cooperationContractModels)
@@ -22,16 +22,30 @@ func (dao *CooperationContractDao) GenerateContractNumber() (string, error) { @@ -22,16 +22,30 @@ func (dao *CooperationContractDao) GenerateContractNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("cooperation_contract.created_at >= ?", todayZeroTime) 23 query.Where("cooperation_contract.created_at >= ?", todayZeroTime)
24 query.Where("cooperation_contract.created_at < ?", nextDayZeroTime) 24 query.Where("cooperation_contract.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`cooperation_contract.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - contractNumber := "HY" + timeString + "#" + countStr  
34 - return contractNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + contractNumber := "HY" + timeString + "#" + countStr
  38 + return contractNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + dividendsOrderNumber := "HY" + timeString + "#" + countStr
  46 + return dividendsOrderNumber, nil
  47 + }
  48 +
35 } 49 }
36 } 50 }
37 51
@@ -13,7 +13,7 @@ type CooperationProjectDao struct { @@ -13,7 +13,7 @@ type CooperationProjectDao struct {
13 } 13 }
14 14
15 // GenerateProjectNumber 生成共创项目编码 15 // GenerateProjectNumber 生成共创项目编码
16 -func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) { 16 +func (dao *CooperationProjectDao) GenerateProjectNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var cooperationProjectModels []*models.CooperationProject 18 var cooperationProjectModels []*models.CooperationProject
19 query := tx.Model(&cooperationProjectModels) 19 query := tx.Model(&cooperationProjectModels)
@@ -22,16 +22,29 @@ func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) { @@ -22,16 +22,29 @@ func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("cooperation_project.created_at >= ?", todayZeroTime) 23 query.Where("cooperation_project.created_at >= ?", todayZeroTime)
24 query.Where("cooperation_project.created_at < ?", nextDayZeroTime) 24 query.Where("cooperation_project.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`cooperation_contract.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - contractNumber := "XM" + timeString + "#" + countStr  
34 - return contractNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + contractNumber := "XM" + timeString + "#" + countStr
  38 + return contractNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + contractNumber := "XM" + timeString + "#" + countStr
  46 + return contractNumber, nil
  47 + }
35 } 48 }
36 } 49 }
37 50
@@ -13,7 +13,7 @@ type CreditAccountDao struct { @@ -13,7 +13,7 @@ type CreditAccountDao struct {
13 } 13 }
14 14
15 // GenerateCreditAccountNumber 生成账期结算单号 15 // GenerateCreditAccountNumber 生成账期结算单号
16 -func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) { 16 +func (dao *CreditAccountDao) GenerateCreditAccountNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var creditAccountModels []*models.CreditAccount 18 var creditAccountModels []*models.CreditAccount
19 query := tx.Model(&creditAccountModels) 19 query := tx.Model(&creditAccountModels)
@@ -22,16 +22,29 @@ func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) { @@ -22,16 +22,29 @@ func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("credit_account.created_at >= ?", todayZeroTime) 23 query.Where("credit_account.created_at >= ?", todayZeroTime)
24 query.Where("credit_account.created_at < ?", nextDayZeroTime) 24 query.Where("credit_account.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`credit_account.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - creditAccountNumber := "JS" + timeString + "#" + countStr  
34 - return creditAccountNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + creditAccountNumber := "JS" + timeString + "#" + countStr
  38 + return creditAccountNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + creditAccountNumber := "JS" + timeString + "#" + countStr
  46 + return creditAccountNumber, nil
  47 + }
35 } 48 }
36 } 49 }
37 50
@@ -13,7 +13,7 @@ type DividendsEstimateDao struct { @@ -13,7 +13,7 @@ type DividendsEstimateDao struct {
13 } 13 }
14 14
15 // GenerateDividendsEstimateNumber 生成分红预算单号 15 // GenerateDividendsEstimateNumber 生成分红预算单号
16 -func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, error) { 16 +func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsEstimateModels []*models.DividendsEstimate 18 var dividendsEstimateModels []*models.DividendsEstimate
19 query := tx.Model(&dividendsEstimateModels) 19 query := tx.Model(&dividendsEstimateModels)
@@ -22,16 +22,30 @@ func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, erro @@ -22,16 +22,30 @@ func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, erro
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_estimate.created_at >= ?", todayZeroTime) 23 query.Where("dividends_estimate.created_at >= ?", todayZeroTime)
24 query.Where("dividends_estimate.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_estimate.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_estimate.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - dividendsOrderNumber := "FH" + timeString + "#" + countStr  
34 - return dividendsOrderNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + dividendsOrderNumber := "FH" + timeString + "#" + countStr
  38 + return dividendsOrderNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + dividendsOrderNumber := "FH" + timeString + "#" + countStr
  46 + return dividendsOrderNumber, nil
  47 + }
  48 +
35 } 49 }
36 } 50 }
37 51
@@ -13,7 +13,7 @@ type DividendsOrderDao struct { @@ -13,7 +13,7 @@ type DividendsOrderDao struct {
13 } 13 }
14 14
15 // GenerateDividendsOrderNumber 生成分红订单号 15 // GenerateDividendsOrderNumber 生成分红订单号
16 -func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { 16 +func (dao *DividendsOrderDao) GenerateDividendsOrderNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsOrderModels []*models.DividendsOrder 18 var dividendsOrderModels []*models.DividendsOrder
19 query := tx.Model(&dividendsOrderModels) 19 query := tx.Model(&dividendsOrderModels)
@@ -22,6 +22,9 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { @@ -22,6 +22,9 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_order.created_at >= ?", todayZeroTime) 23 query.Where("dividends_order.created_at >= ?", todayZeroTime)
24 query.Where("dividends_order.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_order.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_order.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
@@ -13,7 +13,7 @@ type DividendsReturnedOrderDao struct { @@ -13,7 +13,7 @@ type DividendsReturnedOrderDao struct {
13 } 13 }
14 14
15 // GenerateDividendsReturnedOrderNumber 生成分红退货单号 15 // GenerateDividendsReturnedOrderNumber 生成分红退货单号
16 -func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (string, error) { 16 +func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder 18 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder
19 query := tx.Model(&dividendsReturnedOrderModels) 19 query := tx.Model(&dividendsReturnedOrderModels)
@@ -22,6 +22,9 @@ func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (st @@ -22,6 +22,9 @@ func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (st
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_returned_order.created_at >= ?", todayZeroTime) 23 query.Where("dividends_returned_order.created_at >= ?", todayZeroTime)
24 query.Where("dividends_returned_order.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_returned_order.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_returned_order.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
@@ -1159,6 +1159,9 @@ func (repository *CooperationContractRepository) Find(queryOptions map[string]in @@ -1159,6 +1159,9 @@ func (repository *CooperationContractRepository) Find(queryOptions map[string]in
1159 if cooperationContractNumbers, ok := queryOptions["cooperationContractNumbers"]; ok && len(cooperationContractNumbers.([]string)) != 0 { 1159 if cooperationContractNumbers, ok := queryOptions["cooperationContractNumbers"]; ok && len(cooperationContractNumbers.([]string)) != 0 {
1160 query.Where("cooperation_contract_number in (?)", pg.In(cooperationContractNumbers)) 1160 query.Where("cooperation_contract_number in (?)", pg.In(cooperationContractNumbers))
1161 } 1161 }
  1162 + if incentivesType, ok := queryOptions["incentivesType"]; ok && incentivesType.(int32) != 0 {
  1163 + query.Where("incentives_type = ?", incentivesType)
  1164 + }
1162 if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 { 1165 if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
1163 query.Where("company->>'companyId' = '?'", companyId) 1166 query.Where("company->>'companyId' = '?'", companyId)
1164 } 1167 }