|
@@ -11,11 +11,16 @@ import (
|
|
|
"baliance.com/gooxml/document"
|
|
|
"baliance.com/gooxml/measurement"
|
|
|
"baliance.com/gooxml/schema/soo/wml"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
+ "github.com/boombuler/barcode"
|
|
|
+ "github.com/boombuler/barcode/code128"
|
|
|
"github.com/jung-kurt/gofpdf"
|
|
|
+ "github.com/ser163/png2j"
|
|
|
"github.com/signintech/gopdf"
|
|
|
"github.com/xuri/excelize/v2"
|
|
|
"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/beegouser"
|
|
|
+ "image/png"
|
|
|
"os"
|
|
|
"time"
|
|
|
)
|
|
@@ -369,11 +374,6 @@ func (c StockTemplateController) StockTemplateInventoryList() {
|
|
|
// @Security Bearer
|
|
|
func (c StockTemplateController) StockTemplateInventoryExcel(reqData dto.StockTemplateInventoryExcelReq) {
|
|
|
s := services.StockTemplate{}
|
|
|
- //reqData := dto.StockTemplateInventoryExcelReq{}
|
|
|
- //if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
|
|
|
- // c.Error(global.ParseFormErr, err, err.Error())
|
|
|
- // return
|
|
|
- //}
|
|
|
deptId := beegouser.GetDeptId(c.Ctx)
|
|
|
models.InitBasicData(deptId)
|
|
|
medicineInfo, err := s.GetMedicineInfo(deptId, map[string]interface{}{
|
|
@@ -469,7 +469,8 @@ func (c StockTemplateController) StockTemplateInventoryExcel(reqData dto.StockTe
|
|
|
|
|
|
// 设置列宽
|
|
|
f.SetColWidth("Sheet1", "A", "B", 10)
|
|
|
- f.SetColWidth("Sheet1", "B", "F", 12)
|
|
|
+ f.SetColWidth("Sheet1", "B", "C", 14)
|
|
|
+ f.SetColWidth("Sheet1", "C", "F", 12)
|
|
|
f.SetColWidth("Sheet1", "F", "G", 8)
|
|
|
f.SetColWidth("Sheet1", "G", "I", 12)
|
|
|
f.SetColWidth("Sheet1", "I", "J", 8)
|
|
@@ -593,8 +594,16 @@ func (c StockTemplateController) StockTemplateInventoryPdf1(reqData dto.StockTem
|
|
|
temp = append(temp, fmt.Sprintf("%s", row["receiving_unit"]))
|
|
|
}
|
|
|
temp = append(temp, fmt.Sprintf("%s", row[models.FieldEnterpriseName]))
|
|
|
- temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
- temp = append(temp, fmt.Sprintf("%s", row[models.FieldQualificationNumber]))
|
|
|
+ if row[models.FieldApprovalNumber] == nil {
|
|
|
+ temp = append(temp, "")
|
|
|
+ } else {
|
|
|
+ temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
+ }
|
|
|
+ if row[models.FieldQualificationNumber] == nil {
|
|
|
+ temp = append(temp, "")
|
|
|
+ } else {
|
|
|
+ temp = append(temp, fmt.Sprintf("%s", row[models.FieldQualificationNumber]))
|
|
|
+ }
|
|
|
|
|
|
if utils.ToInt(row["stock_in_id"]) > 0 {
|
|
|
temp = append(temp, fmt.Sprintf("%d", row["total_in"]))
|
|
@@ -813,7 +822,11 @@ func (c StockTemplateController) StockTemplateInventoryPdf(reqData dto.StockTemp
|
|
|
temp = append(temp, fmt.Sprintf("%s", row["receiving_unit"]))
|
|
|
}
|
|
|
temp = append(temp, fmt.Sprintf("%s", row[models.FieldEnterpriseName]))
|
|
|
- temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
+ if row[models.FieldApprovalNumber] != nil {
|
|
|
+ temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
+ } else {
|
|
|
+ temp = append(temp, "")
|
|
|
+ }
|
|
|
if row[models.FieldQualificationNumber] != nil {
|
|
|
temp = append(temp, fmt.Sprintf("%s", row[models.FieldQualificationNumber]))
|
|
|
} else {
|
|
@@ -948,7 +961,7 @@ func (c StockTemplateController) StockTemplateInventoryExport() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (c StockTemplateController) TransportRecordWord(reqData dto.TransportRecordWordReq) {
|
|
|
+func (c StockTemplateController) TransportRecordWord(reqData models.TransportRecord) {
|
|
|
s := services.StockTemplate{}
|
|
|
deptId := beegouser.GetDeptId(c.Ctx)
|
|
|
|
|
@@ -1901,7 +1914,7 @@ func (c StockTemplateController) TransportRecordWord(reqData dto.TransportRecord
|
|
|
c.Ctx.Output.Download("ofile/" + filename)
|
|
|
}
|
|
|
|
|
|
-func (c StockTemplateController) TransportRecordPdf1(reqData dto.TransportRecordWordReq) {
|
|
|
+func (c StockTemplateController) TransportRecordPdf1(reqData models.TransportRecord) {
|
|
|
s := services.StockTemplate{}
|
|
|
deptId := beegouser.GetDeptId(c.Ctx)
|
|
|
|
|
@@ -2170,14 +2183,24 @@ func (c StockTemplateController) TransportRecordPdf1(reqData dto.TransportRecord
|
|
|
}
|
|
|
defer func() {
|
|
|
os.Remove("ofile/" + filename)
|
|
|
+ //os.Remove(imgPath)
|
|
|
}()
|
|
|
|
|
|
// 返回生成的 Excel 文件
|
|
|
c.Ctx.Output.Download("ofile/" + filename)
|
|
|
|
|
|
}
|
|
|
-func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordWordReq) {
|
|
|
+
|
|
|
+func getImageBytes(filePath string) []byte {
|
|
|
+ b, err := os.ReadFile(filePath)
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ return b
|
|
|
+}
|
|
|
+func (c StockTemplateController) TransportRecordPdf(reqData models.TransportRecord) {
|
|
|
s := services.StockTemplate{}
|
|
|
+ barcodeServ := services.Barcode{}
|
|
|
deptId := beegouser.GetDeptId(c.Ctx)
|
|
|
|
|
|
list, err := s.StockTemplateTransportRecordWord(&reqData, deptId)
|
|
@@ -2185,6 +2208,26 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
c.Error(500, err, err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ reqData.DeptID = deptId
|
|
|
+ reqData.DeptName = beegouser.GetDeptName(c.Ctx)
|
|
|
+ reqData.SetCreateBy(beegouser.GetUserId(c.Ctx))
|
|
|
+ reqData.SetDeptId(deptId)
|
|
|
+ code, err := barcodeServ.Insert(reqData)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("生成条码失败")
|
|
|
+ c.Error(500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ cs, _ := code128.Encode(code)
|
|
|
+ // 创建一个要输出数据的文件
|
|
|
+ imgPath := "ofile/img/" + code + ".png"
|
|
|
+ file, _ := os.Create(imgPath)
|
|
|
+ //defer file.Close()
|
|
|
+
|
|
|
+ // 设置图片像素大小
|
|
|
+ qrCode, _ := barcode.Scale(cs, 205, 50)
|
|
|
+ // 将code128的条形码编码为png图片
|
|
|
+ png.Encode(file, qrCode)
|
|
|
|
|
|
cols := []float64{83, 50, 55, 72, 72, 50, 66, 50, 27, 30}
|
|
|
|
|
@@ -2194,7 +2237,11 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
temp := []string{}
|
|
|
temp = append(temp, fmt.Sprintf("%s", row[models.FieldProductName]))
|
|
|
temp = append(temp, fmt.Sprintf("%s", row[models.FieldEnterpriseName]))
|
|
|
- temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
+ if row[models.FieldApprovalNumber] == nil {
|
|
|
+ temp = append(temp, "")
|
|
|
+ } else {
|
|
|
+ temp = append(temp, fmt.Sprintf("%s", row[models.FieldApprovalNumber]))
|
|
|
+ }
|
|
|
if row[models.FieldQualificationNumber] == nil {
|
|
|
temp = append(temp, "")
|
|
|
} else {
|
|
@@ -2215,7 +2262,6 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
pdf := &gopdf.GoPdf{}
|
|
|
pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}})
|
|
|
pdf.SetMarginTop(40)
|
|
@@ -2223,11 +2269,22 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
|
|
|
pdf.AddPage()
|
|
|
pdf.AddTTFFont("simsun", "static/fonts/MiSans-Medium.ttf")
|
|
|
- pdf.SetFont("simsun", "", 22)
|
|
|
|
|
|
pdf.SetMargins(2, 5, 5, 5)
|
|
|
+ pdf.SetFont("simsun", "", 10)
|
|
|
+ pdf.SetX(20)
|
|
|
+ pdf.SetY(20)
|
|
|
+ pdf.Text("[扫码入库]")
|
|
|
+ pdf.SetX(20)
|
|
|
+ pdf.SetY(32)
|
|
|
+ pdf.Text("NO:" + code)
|
|
|
+
|
|
|
+ imgPath2 := "ofile/img/" + code + ".jpg"
|
|
|
+ png2j.Con2jpg(imgPath, imgPath2)
|
|
|
+ pdf.Image(imgPath2, 20, 35, nil)
|
|
|
|
|
|
titleStr := "表3-4 运输记录表"
|
|
|
+ pdf.SetFont("simsun", "", 22)
|
|
|
textw, _ := pdf.MeasureTextWidth(titleStr)
|
|
|
pdf.SetX((595 / 2) - (textw / 2))
|
|
|
pdf.SetY(40)
|
|
@@ -2242,7 +2299,7 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
|
|
|
pdf.SetFont("simsun", "", 10)
|
|
|
curx, y := 20., pdf.GetY()
|
|
|
- y += 25
|
|
|
+ y += 35
|
|
|
pdf.SetXY(curx, y)
|
|
|
pdf.Text("运输工具: □冷藏车 □运输车 □普通车辆 □无 □其他")
|
|
|
y += 16
|
|
@@ -2261,7 +2318,7 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
x := curx
|
|
|
pdf.SetFont("simsun", "", 9)
|
|
|
for i := 0; i < len(header); i++ {
|
|
|
- utils.RectFillColor(pdf, header[i], 9, x, y, cols[i], h, 0, 0, 0, gopdf.Center, gopdf.Middle)
|
|
|
+ utils.RectFillColorMultiCell(pdf, header[i], 9, x, y, cols[i], h, 0, 0, 0, gopdf.Center, gopdf.Middle)
|
|
|
x += cols[i]
|
|
|
}
|
|
|
y += h
|
|
@@ -2315,7 +2372,7 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
pdf.SetX(curx)
|
|
|
x = curx
|
|
|
for i := 0; i < len(header2); i++ {
|
|
|
- utils.RectFillColor(pdf, header2[i], 9, x, y, cols2[i], h, 0, 0, 0, gopdf.Center, gopdf.Middle)
|
|
|
+ utils.RectFillColorMultiCell(pdf, header2[i], 9, x, y, cols2[i], h, 0, 0, 0, gopdf.Center, gopdf.Middle)
|
|
|
x += cols2[i]
|
|
|
}
|
|
|
y = pdf.GetY()
|
|
@@ -2373,8 +2430,7 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
x += width
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- pdf.SetNewY(y+height,height)
|
|
|
+ pdf.SetNewY(y+height, height)
|
|
|
|
|
|
if pdf.GetY() < 30 || pdf.GetY() > 810 {
|
|
|
pdf.SetY(30)
|
|
@@ -2452,6 +2508,8 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
}
|
|
|
defer func() {
|
|
|
os.Remove("ofile/" + filename)
|
|
|
+ os.Remove(imgPath)
|
|
|
+ os.Remove(imgPath2)
|
|
|
}()
|
|
|
|
|
|
// 返回生成的 Excel 文件
|
|
@@ -2468,7 +2526,7 @@ func (c StockTemplateController) TransportRecordPdf(reqData dto.TransportRecordW
|
|
|
// @Router /stock-template/inventory/list [post]
|
|
|
// @Security Bearer
|
|
|
func (c StockTemplateController) TransportRecordExport() {
|
|
|
- reqData := dto.TransportRecordWordReq{}
|
|
|
+ reqData := models.TransportRecord{}
|
|
|
if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
|
|
|
c.Error(global.ParseFormErr, err, err.Error())
|
|
|
return
|
|
@@ -2601,18 +2659,18 @@ func (c StockTemplateController) StockInquiryExcel() {
|
|
|
f.SetCellValue("Sheet1", "D2", "剂型")
|
|
|
f.SetCellValue("Sheet1", "E2", "单位")
|
|
|
f.SetCellValue("Sheet1", "F2", "数量")
|
|
|
- f.SetCellValue("Sheet1", "G2", "购进单价")
|
|
|
- f.SetCellValue("Sheet1", "H2", "销售单价")
|
|
|
- f.SetCellValue("Sheet1", "I2", "批号")
|
|
|
- f.SetCellValue("Sheet1", "J2", "失效日期")
|
|
|
- f.SetCellValue("Sheet1", "K2", "批准文号")
|
|
|
- f.SetCellValue("Sheet1", "L2", "批签发编号")
|
|
|
+ f.SetCellValue("Sheet1", "G2", "单价")
|
|
|
+ //f.SetCellValue("Sheet1", "H2", "销售单价")
|
|
|
+ f.SetCellValue("Sheet1", "H2", "批号")
|
|
|
+ f.SetCellValue("Sheet1", "I2", "失效日期")
|
|
|
+ f.SetCellValue("Sheet1", "J2", "批准文号")
|
|
|
+ f.SetCellValue("Sheet1", "K2", "批签发编号")
|
|
|
// 设置列宽
|
|
|
f.SetColWidth("Sheet1", "A", "A", 20)
|
|
|
f.SetColWidth("Sheet1", "B", "C", 15)
|
|
|
f.SetColWidth("Sheet1", "D", "F", 12)
|
|
|
f.SetColWidth("Sheet1", "F", "G", 10)
|
|
|
- f.SetColWidth("Sheet1", "G", "I", 10)
|
|
|
+ f.SetColWidth("Sheet1", "G", "I", 15)
|
|
|
f.SetColWidth("Sheet1", "I", "J", 12)
|
|
|
f.SetColWidth("Sheet1", "J", "L", 15)
|
|
|
|
|
@@ -2628,8 +2686,8 @@ func (c StockTemplateController) StockInquiryExcel() {
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v[models.FieldDosageFormName])
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v[models.FieldUnitName])
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v["balance"])
|
|
|
- f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), utils.ToFloat64(v["purchase_unit_price"]))
|
|
|
- f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), utils.ToFloat64(v["sales_unit_price"]))
|
|
|
+ f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), utils.ToFloat64(v["unit_price"]))
|
|
|
+ //f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), utils.ToFloat64(v["sales_unit_price"]))
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v["batch_number"])
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v[models.FieldExpiryDate])
|
|
|
f.SetCellValue("Sheet1", fmt.Sprintf("K%d", line), v["approval_number"])
|
|
@@ -2917,3 +2975,59 @@ func (c *StockTemplateController) InventoryPdf() {
|
|
|
//return
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+// StockTemplateInScanBarCode 扫条码入库
|
|
|
+// @Summary 扫条码入库
|
|
|
+// @Description 扫条码入库
|
|
|
+// @Tags 库存
|
|
|
+// @Param body body dto.StockTemplateOutInsertReq true "body"
|
|
|
+// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
|
|
|
+// @Router /stock-template/out [post]
|
|
|
+// @Security Bearer
|
|
|
+func (c StockTemplateController) StockTemplateInScanBarCode() {
|
|
|
+ s := services.StockTemplate{}
|
|
|
+ reqData := dto.BatchStockTemplateOutInsertReq{}
|
|
|
+ if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
|
|
|
+ c.Error(global.ParseFormErr, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ reqData.SetCreateBy(beegouser.GetUserId(c.Ctx))
|
|
|
+ reqData.SetDeptId(beegouser.GetDeptId(c.Ctx))
|
|
|
+ err := s.StockTemplateOutScanCode(&reqData)
|
|
|
+ if err != nil {
|
|
|
+ c.Error(500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ c.OK(nil, "扫码出库成功")
|
|
|
+}
|
|
|
+
|
|
|
+func (c StockTemplateController) GetBarCodeInfo() {
|
|
|
+ barcodeSvc := services.Barcode{}
|
|
|
+ s := services.StockTemplate{}
|
|
|
+ //if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
|
|
|
+ // c.Error(global.ParseFormErr, err, err.Error())
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ codeStr := c.GetString("code")
|
|
|
+ reqData := dto.GetBarCodeInfoReq{Code: codeStr}
|
|
|
+
|
|
|
+ var code models.Barcode
|
|
|
+ //数据权限检查
|
|
|
+ err := barcodeSvc.Get(&reqData, &code)
|
|
|
+ if err != nil {
|
|
|
+ c.Error(500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ list, err := s.StockTemplateTransportRecordWord(&code.Data, code.Data.DeptID)
|
|
|
+ if err != nil {
|
|
|
+ c.Error(500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range list {
|
|
|
+ v["forwardingUnit"] = code.Data.DeptName
|
|
|
+ }
|
|
|
+
|
|
|
+ c.OK(list, "查询成功")
|
|
|
+}
|