jiangshuai
2023-11-20 10806eefe017093646a671af0b321b9df0a2ebc5
controllers/operation.go
@@ -831,14 +831,14 @@
   util.ResponseFormat(c, code.Success, "操作成功")
}
// inputSelfmade
// outputOperation
//
//   @Tags      入库/出库
//   @Summary   打印-自制-入库
//   @Summary   打印
//   @Produce   application/json
//   @Param      id   path      int         true   "id"
//   @Success   200   {object}   util.Response   "成功"
//   @Router      /api-wms/v1/operation/inputSelfmade/{id} [put]
//   @Router      /api-wms/v1/operation/outputOperation/{id} [put]
func (slf OperationController) InputSelfmade(c *gin.Context) {
   id, err := strconv.Atoi(c.Param("id"))
   if err != nil {
@@ -854,17 +854,45 @@
      util.ResponseFormat(c, code.RequestParamError, "未找到相关出入库信息:"+err.Error())
      return
   }
   readerCloser, err := http.HttpGetWithReadCloser(conf.FileTemplateConf.InputSelfmadeAddr)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "获取模版失败:"+err.Error())
   if len(operation.Details) == 0 {
      util.ResponseFormat(c, code.RequestParamError, "没有相关产品明细的信息")
      return
   }
   var fileUrl string
   if operation.BaseOperationType == constvar.BaseOperationTypeIncoming {
      fileUrl, err = ExportInputSelfmade(constvar.FileTemplateCategory_Selfmade, operation)
      if err != nil {
         util.ResponseFormat(c, code.RequestParamError, err.Error())
         return
      }
   } else if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing {
      fileUrl, err = ExportOutputOperation(constvar.FileTemplateCategory_Output, operation)
      if err != nil {
         util.ResponseFormat(c, code.RequestParamError, err.Error())
         return
      }
   } else {
      util.ResponseFormat(c, code.RequestParamError, "该记录不支持打印")
      return
   }
   util.ResponseFormat(c, code.Success, fileUrl)
}
func ExportInputSelfmade(category constvar.FileTemplateCategory, operation *models.Operation) (string, error) {
   template, err := models.NewFileTemplateAttachmentSearch().SetCategory(category).First()
   if err != nil {
      return "", errors.New("获取模版记录失败:" + err.Error())
   }
   readerCloser, err := http.HttpGetWithReadCloser(template.Attachment.FileUrl)
   if err != nil {
      return "", errors.New("获取模版失败:" + err.Error())
   }
   f, err := excelize.OpenReader(readerCloser)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "读取excel模版失败:"+err.Error())
      return
      return "", errors.New("读取excel模版失败:" + err.Error())
   }
   readerCloser.Close()
@@ -905,8 +933,7 @@
      totalAmount = totalAmount.Add(v.Amount)
   }
   if err := f.MergeCell("Sheet1", "A"+strconv.Itoa(rowIndex), "C"+strconv.Itoa(rowIndex)); err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
      return "", err
   }
   f.SetCellValue("Sheet1", "A"+strconv.Itoa(rowIndex), "合计")
   f.SetCellValue("Sheet1", "E"+strconv.Itoa(rowIndex), totalAmount.String())
@@ -920,16 +947,86 @@
   buf, err := f.WriteToBuffer()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
      return "", err
   }
   fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), "xlsx", buf.Bytes())
   if err != nil {
      logx.Errorf("file upload err: %v", err)
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
      return "", err
   }
   util.ResponseFormat(c, code.Success, fileUrl)
   return fileUrl, nil
}
func ExportOutputOperation(category constvar.FileTemplateCategory, operation *models.Operation) (string, error) {
   template, err := models.NewFileTemplateAttachmentSearch().SetCategory(category).First()
   if err != nil {
      return "", errors.New("获取模版记录失败:" + err.Error())
   }
   readerCloser, err := http.HttpGetWithReadCloser(template.Attachment.FileUrl)
   if err != nil {
      return "", errors.New("获取模版失败:" + err.Error())
   }
   f, err := excelize.OpenReader(readerCloser)
   if err != nil {
      return "", errors.New("读取excel模版失败:" + err.Error())
   }
   readerCloser.Close()
   style, _ := f.NewStyle(&excelize.Style{
      Border: []excelize.Border{
         {Type: "left", Color: "#000000", Style: 1},
         {Type: "top", Color: "#000000", Style: 1},
         {Type: "bottom", Color: "#000000", Style: 1},
         {Type: "right", Color: "#000000", Style: 1},
      },
      Alignment: &excelize.Alignment{
         Horizontal: "center",
         Vertical:   "center",
      },
   })
   f.SetCellValue("Sheet1", "C2", operation.FromLocation.Name)
   f.SetCellValue("Sheet1", "H2", operation.WaybillNumber)
   f.SetCellValue("Sheet1", "H3", operation.SourceNumber)
   f.SetCellValue("Sheet1", "K3", operation.Number)
   f.SetCellValue("Sheet1", "C4", operation.CompanyName)
   rowIndex := 8
   totalAmount := decimal.NewFromInt(0)
   totalWeight := decimal.NewFromInt(0)
   addRows := len(operation.Details) - 1
   if addRows > 0 {
      f.InsertRows("Sheet1", 9, addRows)
      f.SetCellStyle("Sheet1", "A9", "K"+strconv.Itoa(rowIndex+addRows), style)
   }
   for k, v := range operation.Details {
      productTotalWeight := v.Amount.Mul(v.Product.Weight).Div(decimal.NewFromInt(1000))
      f.SetCellValue("Sheet1", "A"+strconv.Itoa(rowIndex), k+1)
      f.SetCellValue("Sheet1", "B"+strconv.Itoa(rowIndex), v.Product.Name)
      f.SetCellValue("Sheet1", "H"+strconv.Itoa(rowIndex), v.Amount)
      f.SetCellValue("Sheet1", "I"+strconv.Itoa(rowIndex), v.Product.Weight)
      f.SetCellValue("Sheet1", "J"+strconv.Itoa(rowIndex), productTotalWeight)
      rowIndex++
      totalAmount = totalAmount.Add(v.Amount)
      totalWeight = totalWeight.Add(productTotalWeight)
   }
   buf, err := f.WriteToBuffer()
   if err != nil {
      return "", err
   }
   fileUrl, err := upload.UploadFileToSeaWeed(string(constvar.FileType_File), "xlsx", buf.Bytes())
   if err != nil {
      logx.Errorf("file upload err: %v", err)
      return "", err
   }
   return fileUrl, nil
}