zhangqian
2024-06-14 da3e478917dea118df075357cbd2e6f10833d9c6
商品调整验证后生成入库单和出库单
1个文件已修改
80 ■■■■ 已修改文件
service/operation.go 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/operation.go
@@ -286,21 +286,83 @@
}
// FinishOperationAdjust 完成库存调整
// 验证后生成入库单或出库单(库存减少生成出库单,库存增加生成入库单)
func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
    var inputDetails []*models.OperationDetails
    var outputDetails []*models.OperationDetails
    for _, v := range listDetails {
        if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
            locAmount.Amount = v.Amount
            if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
                return err
            if locAmount.Amount.Equal(v.Amount) {
                continue
            }
            if v.Amount.GreaterThan(locAmount.Amount) {
                inputDetails = append(inputDetails, &models.OperationDetails{
                    ProductId:      v.ProductId,
                    Amount:         v.Amount.Sub(locAmount.Amount),
                    FromLocationID: v.FromLocationID,
                    ToLocationID:   v.ToLocationID,
                })
            } else {
                outputDetails = append(outputDetails, &models.OperationDetails{
                    ProductId:      v.ProductId,
                    Amount:         locAmount.Amount.Sub(v.Amount),
                    FromLocationID: v.ToLocationID,
                    ToLocationID:   v.FromLocationID,
                })
            }
        } else {
            if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
                LocationId:        v.ToLocationID,
                ProductCategoryID: v.Product.CategoryId,
                ProductId:         v.ProductId,
                Amount:            v.Amount,
                CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
            }); err != nil {
            inputDetails = append(inputDetails, &models.OperationDetails{
                ProductId:      v.ProductId,
                Amount:         v.Amount,
                FromLocationID: v.FromLocationID,
                ToLocationID:   v.ToLocationID,
            })
        }
        //if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
        //    locAmount.Amount = v.Amount
        //    if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
        //        return err
        //    }
        //} else {
        //    if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
        //        LocationId:        v.ToLocationID,
        //        ProductCategoryID: v.Product.CategoryId,
        //        ProductId:         v.ProductId,
        //        Amount:            v.Amount,
        //        CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
        //    }); err != nil {
        //        return err
        //    }
        //}
        if len(inputDetails) > 0 {
            operation := &models.Operation{
                Number:            strconv.FormatInt(time.Now().Unix(), 10),
                Status:            constvar.OperationStatus_Ready,
                OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
                Comment:           "库存盘点",
                BaseOperationType: constvar.BaseOperationTypeIncoming,
                Details:           inputDetails,
                LocationID:        inputDetails[0].FromLocationID,
                OperationTypeName: "库存调整",
            }
            if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
                return err
            }
        }
        if len(outputDetails) > 0 {
            operation := &models.Operation{
                Number:            strconv.FormatInt(time.Now().Unix(), 10),
                Status:            constvar.OperationStatus_Ready,
                OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
                Comment:           "库存盘点",
                BaseOperationType: constvar.BaseOperationTypeOutgoing,
                Details:           outputDetails,
                LocationID:        outputDetails[0].FromLocationID,
                OperationTypeName: "库存调整",
            }
            if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
                return err
            }
        }