|
@@ -295,6 +295,20 @@ func (e *Waybill) AppletInsert(c *dto.WaybillInsertReq, p *actions.DataPermissio
|
|
|
return errors.New("获取仓库信息失败")
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ var coolerBox = model.CoolerBox{}
|
|
|
+ if c.DeliveryCondition == "保温箱" {
|
|
|
+ status = model.WaybillStatusWaitVanning
|
|
|
+ // 查询仓库信息
|
|
|
+ err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
+ Where("id = ?", c.CoolerBoxId).
|
|
|
+ First(&coolerBox).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取保温箱信息失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
data.PrintUserId = p.UserId
|
|
|
|
|
|
var no string
|
|
@@ -329,6 +343,7 @@ func (e *Waybill) AppletInsert(c *dto.WaybillInsertReq, p *actions.DataPermissio
|
|
|
Status: data.Status,
|
|
|
CarId: car.Id,
|
|
|
WarehouseId: warehouse.Id,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
UserId: p.UserId,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
CreateBy: p.UserId,
|
|
@@ -393,6 +408,49 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
tx.Commit()
|
|
|
}
|
|
|
}()
|
|
|
+ var car = model.Car{}
|
|
|
+ if c.Type == model.SysUserTypeDriver {
|
|
|
+ // 查询车辆库信息
|
|
|
+ err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
+ Where("user_id = ?", c.PrintUserId).
|
|
|
+ First(&car).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var warehouse = model.Warehouse{}
|
|
|
+ if c.Type == model.SysUserTypeWarehouse {
|
|
|
+ // 查询仓库信息
|
|
|
+ err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
+ Where("user_id = ?", c.PrintUserId).
|
|
|
+ First(&warehouse).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取仓库信息失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var coolerBox = model.CoolerBox{}
|
|
|
+ if c.Type == model.TypeCoolerBox {
|
|
|
+ // 查询保温箱信息
|
|
|
+ err = tx.Scopes(actions.Permission(coolerBox.TableName(), p)).
|
|
|
+ Where("id = ?", c.CoolerBoxId).
|
|
|
+ First(&coolerBox).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取保温箱信息失败")
|
|
|
+ }
|
|
|
+ var user = model.SysUser{}
|
|
|
+ // 查询保温箱信息
|
|
|
+ err = tx.Scopes(actions.Permission(user.TableName(), p)).
|
|
|
+ Where("id = ?", c.PrintUserId).
|
|
|
+ First(&user).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取保温箱配送人失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
for _, id := range c.WaybillIds {
|
|
|
|
|
@@ -407,39 +465,29 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
}
|
|
|
return global.UpdateFailedErr
|
|
|
}
|
|
|
+
|
|
|
+ // 待派单 待装车 待入库 待装箱
|
|
|
if waybillModel.Status != model.WaybillStatusWaitDelivery &&
|
|
|
waybillModel.Status != model.WaybillStatusWaitTruck &&
|
|
|
- waybillModel.Status != model.WaybillStatusWaitStorage {
|
|
|
+ waybillModel.Status != model.WaybillStatusWaitStorage &&
|
|
|
+ waybillModel.Status != model.WaybillStatusWaitVanning {
|
|
|
//err = errors.New(fmt.Sprintf("运单状态为%s,禁止操作!", model.WaybillStatusMap[waybillModel.Status]))
|
|
|
//return err
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- var car = model.Car{}
|
|
|
if c.Type == model.SysUserTypeDriver {
|
|
|
waybillModel.Status = model.WaybillStatusWaitTruck
|
|
|
- // 查询车辆库信息
|
|
|
- err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
- Where("user_id = ?", c.PrintUserId).
|
|
|
- First(&car).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("获取车辆信息失败")
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
- var warehouse = model.Warehouse{}
|
|
|
if c.Type == model.SysUserTypeWarehouse {
|
|
|
waybillModel.Status = model.WaybillStatusWaitStorage
|
|
|
- // 查询仓库信息
|
|
|
- err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
- Where("user_id = ?", c.PrintUserId).
|
|
|
- First(&warehouse).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("获取仓库信息失败")
|
|
|
- }
|
|
|
}
|
|
|
+
|
|
|
+ if c.Type == model.TypeCoolerBox {
|
|
|
+ waybillModel.Status = model.WaybillStatusWaitVanning
|
|
|
+ }
|
|
|
+
|
|
|
waybillModel.PrintUserId = c.PrintUserId
|
|
|
err = tx.Save(&waybillModel).Error
|
|
|
if err != nil {
|
|
@@ -453,6 +501,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
Status: waybillModel.Status,
|
|
|
CarId: car.Id,
|
|
|
WarehouseId: warehouse.Id,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
UserId: c.PrintUserId,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
CreateBy: p.UserId,
|
|
@@ -1071,7 +1120,8 @@ func (e *Waybill) CarOut(c *dto.WaybillInOutReq, p *actions.DataPermission) erro
|
|
|
|
|
|
return nil
|
|
|
}
|
|
|
-func (e *Waybill) Receipt(c *dto.WaybillReceiptReq, p *actions.DataPermission) error {
|
|
|
+
|
|
|
+func (e *Waybill) CoolerBoxIn(c *dto.WaybillInOutReq, p *actions.DataPermission) error {
|
|
|
var err error
|
|
|
|
|
|
tx := e.Orm.Begin()
|
|
@@ -1082,17 +1132,119 @@ func (e *Waybill) Receipt(c *dto.WaybillReceiptReq, p *actions.DataPermission) e
|
|
|
tx.Commit()
|
|
|
}
|
|
|
}()
|
|
|
- // 查询仓库信息
|
|
|
- var car = model.Car{}
|
|
|
- // 查询运单是否存在
|
|
|
- err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
- Where("user_id = ?", p.UserId).
|
|
|
- First(&car).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("获取车辆信息失败")
|
|
|
+
|
|
|
+ for _, waybillNo := range c.WaybillNoList {
|
|
|
+ var waybillModel = model.Waybill{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
+ Where("waybill_no = ?", waybillNo).
|
|
|
+ First(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return errors.New(fmt.Sprintf("运单号%s不存在", waybillNo))
|
|
|
+ }
|
|
|
+ return errors.New(fmt.Sprintf("运单号%s查询失败", waybillNo))
|
|
|
+ }
|
|
|
+ if waybillModel.Status != model.WaybillStatusWaitVanning {
|
|
|
+ err = errors.New(fmt.Sprintf("运单号%s状态为%s,无法装箱!", waybillNo, model.WaybillStatusMap[waybillModel.Status]))
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询保温箱信息
|
|
|
+ var coolerBox = model.CoolerBox{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(coolerBox.TableName(), p)).
|
|
|
+ Where("user_id = ?", p.UserId).
|
|
|
+ First(&coolerBox).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取车辆绑定信息失败")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证时间
|
|
|
+ var logistics model.WaybillLogistics
|
|
|
+ err = e.Orm.Where("waybill_no = ?", waybillNo).Last(&logistics).Error
|
|
|
+ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ e.Log.Errorf("获取运单日志失败: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var lng, lat string
|
|
|
+ lng, lat, err = e.GetSite(p.DeptId, coolerBox.Sn, c.StartTime.String())
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("获取定位信息失败: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ waybillModel.Status = model.WaybillStatusVanning
|
|
|
+ waybillModel.CoolerBoxId = coolerBox.Id
|
|
|
+ waybillModel.DeliveryTime = c.StartTime
|
|
|
+ err = tx.Save(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单信息失败:%s", err))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加物流
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ Status: model.WaybillStatusTruck,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Lng: lng,
|
|
|
+ Lat: lat,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ ModelTime: model2.ModelTime{
|
|
|
+ CreatedAt: c.StartTime,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加任务
|
|
|
+ task := model.WaybillTask{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Sn: coolerBox.Sn,
|
|
|
+ StartTime: c.StartTime,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *Waybill) Receipt(c *dto.WaybillReceiptReq, p *actions.DataPermission) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
var waybillModel = model.Waybill{}
|
|
|
// 查询运单是否存在
|
|
|
err = tx.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
@@ -1109,6 +1261,117 @@ func (e *Waybill) Receipt(c *dto.WaybillReceiptReq, p *actions.DataPermission) e
|
|
|
if waybillModel.Status == model.WaybillStatusReceipt {
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+ // 保温箱配送 不需要中转
|
|
|
+ if waybillModel.CoolerBoxId > 0 {
|
|
|
+ // 查询车辆信息
|
|
|
+ var coolerBox = model.CoolerBox{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(coolerBox.TableName(), p)).
|
|
|
+ Where("id = ?", waybillModel.CoolerBoxId).
|
|
|
+ First(&coolerBox).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取保温箱信息失败")
|
|
|
+ }
|
|
|
+
|
|
|
+ waybillModel.Status = model.WaybillStatusReceipt
|
|
|
+ waybillModel.CoolerBoxId = coolerBox.Id
|
|
|
+ waybillModel.ReceiptTime = c.StartTime
|
|
|
+ waybillModel.ReceiptImg = c.ReceiptImg
|
|
|
+ err = tx.Save(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单信息失败:%s", err))
|
|
|
+ }
|
|
|
+
|
|
|
+ var lng, lat string
|
|
|
+ lng, lat, err = e.GetSite(p.DeptId, coolerBox.Sn, c.StartTime.String())
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("获取定位信息失败: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询任务
|
|
|
+ var task model.WaybillTask
|
|
|
+ err = tx.Model(&task).Where("waybill_no = ? and cooler_box_id = ?", c.WaybillNo, coolerBox.Id).
|
|
|
+ Last(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ // 未出箱 直接点签收
|
|
|
+ if time.Time(task.EndTime).IsZero() {
|
|
|
+ task.EndTime = model2.Time(time.Now())
|
|
|
+ task.UpdateBy = p.UserId
|
|
|
+ err = tx.Save(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ // 添加下车物流记录
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: c.WaybillNo,
|
|
|
+ Status: model.WaybillStatusVanningOut,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Lng: lng,
|
|
|
+ Lat: lat,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ ModelTime: model2.ModelTime{
|
|
|
+ CreatedAt: c.StartTime,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加签收记录
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: c.WaybillNo,
|
|
|
+ Status: model.WaybillStatusReceipt,
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Lng: lng,
|
|
|
+ Lat: lat,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ ModelTime: model2.ModelTime{
|
|
|
+ CreatedAt: c.StartTime,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询车辆信息
|
|
|
+ var car = model.Car{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
+ Where("user_id = ?", p.UserId).
|
|
|
+ First(&car).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
|
+ }
|
|
|
+
|
|
|
waybillModel.Status = model.WaybillStatusReceipt
|
|
|
waybillModel.CarId = car.Id
|
|
|
waybillModel.ReceiptTime = c.StartTime
|
|
@@ -1356,6 +1619,12 @@ func (e *Waybill) GetAllData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.Dev
|
|
|
return dataList, waybillPDF, err
|
|
|
}
|
|
|
|
|
|
+ // 创建名称到权重的映射
|
|
|
+ orderMap := make(map[string]int)
|
|
|
+ for i, v := range taskList {
|
|
|
+ orderMap[v.Sn] = i
|
|
|
+ }
|
|
|
+
|
|
|
for i := 0; i < len(taskList); i++ {
|
|
|
// 获取传感器信息
|
|
|
deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey(taskList[i].Sn, company.ColdKey)
|
|
@@ -1390,7 +1659,7 @@ func (e *Waybill) GetAllData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.Dev
|
|
|
if waybill.Status == model.WaybillStatusReceipt {
|
|
|
for k := len(list) - 1; k >= 0; k-- {
|
|
|
if v.T_id == list[k].T_id {
|
|
|
- if taskList[k].Id == lastWaybillTask.Id && list[k].T_time != taskList[i].EndTime.String() && !time.Time(taskList[i].EndTime).IsZero() {
|
|
|
+ if taskList[i].Id == lastWaybillTask.Id && list[k].T_time != taskList[i].EndTime.String() && !time.Time(taskList[i].EndTime).IsZero() {
|
|
|
lastData := list[k]
|
|
|
lastData.T_time = taskList[i].EndTime.String()
|
|
|
lastMap[v.T_id] = lastData
|
|
@@ -1410,6 +1679,13 @@ func (e *Waybill) GetAllData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.Dev
|
|
|
for _, v := range lastMap {
|
|
|
list = append(list, v)
|
|
|
}
|
|
|
+ sort.Slice(list, func(x, y int) bool {
|
|
|
+ if list[x].T_time == list[y].T_time {
|
|
|
+ // 如果时间相同,则按预设顺序排序
|
|
|
+ return orderMap[list[x].T_sn] < orderMap[list[y].T_sn]
|
|
|
+ }
|
|
|
+ return list[x].T_time > list[y].T_time
|
|
|
+ })
|
|
|
|
|
|
dataList = append(dataList, list...)
|
|
|
waybillPDF = append(waybillPDF, WaybillPDF{
|
|
@@ -1418,11 +1694,142 @@ func (e *Waybill) GetAllData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.Dev
|
|
|
Task: taskList[i],
|
|
|
})
|
|
|
}
|
|
|
+
|
|
|
+ sort.Slice(dataList, func(i, j int) bool {
|
|
|
+ if dataList[i].T_time == dataList[j].T_time {
|
|
|
+ // 如果时间相同,则按预设顺序排序
|
|
|
+ return orderMap[dataList[i].T_sn] < orderMap[dataList[j].T_sn]
|
|
|
+ }
|
|
|
+ return dataList[i].T_time < dataList[j].T_time
|
|
|
+ })
|
|
|
+
|
|
|
+ return dataList, waybillPDF, nil
|
|
|
+}
|
|
|
+
|
|
|
+// 获取前两个探头数据
|
|
|
+func (e *Waybill) GetTwoDeviceSensorData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.DeviceData_R, []DeviceDataPdf, []WaybillPDF, error) {
|
|
|
+ var err error
|
|
|
+ var data model.WaybillTask
|
|
|
+ var waybill model.Waybill
|
|
|
+ var taskList []model.WaybillTask
|
|
|
+ var deviceDataPdf []DeviceDataPdf
|
|
|
+ var waybillPDF []WaybillPDF
|
|
|
+ dataList := make([]nats_server.DeviceData_R, 0)
|
|
|
+
|
|
|
+ err = e.Orm.Model(&waybill).Where("waybill_no = ?", c.WaybillNo).First(&waybill).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, errors.New("获取运单信息失败")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 未签收,不返回数据
|
|
|
+ if waybill.Status != model.WaybillStatusReceipt {
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取公司秘钥
|
|
|
+ var company model.SysDept
|
|
|
+ company, err = model.GetCompanyById(waybill.DeptId)
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, model.GetCompanyKeyErr
|
|
|
+ }
|
|
|
+
|
|
|
+ err = e.Orm.Model(&data).
|
|
|
+ Where("waybill_no = ?", c.WaybillNo).
|
|
|
+ Order("id desc").
|
|
|
+ Find(&taskList).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, global.GetFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取最后一个任务id
|
|
|
+ var lastWaybillTask model.WaybillTask
|
|
|
+ err = e.Orm.Model(&lastWaybillTask).Where("waybill_no = ?", c.WaybillNo).Last(&lastWaybillTask).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ err = errors.New("获取运单信息错误!")
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, err
|
|
|
+ }
|
|
|
+
|
|
|
// 创建名称到权重的映射
|
|
|
orderMap := make(map[string]int)
|
|
|
for i, v := range taskList {
|
|
|
orderMap[v.Sn] = i
|
|
|
}
|
|
|
+
|
|
|
+ for i := 0; i < len(taskList); i++ {
|
|
|
+ // 获取传感器信息
|
|
|
+ deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey(taskList[i].Sn, company.ColdKey)
|
|
|
+ var T_snid string
|
|
|
+ var list []nats_server.DeviceData_R
|
|
|
+ t_id_list := [2]int{-1, -2}
|
|
|
+ for j, r := range deviceSensorList {
|
|
|
+ if j >= 2 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ T_snid += fmt.Sprintf("%s,%d|", r.T_sn, r.T_id)
|
|
|
+ t_id_list[j] = r.T_id
|
|
|
+ }
|
|
|
+
|
|
|
+ var count int64
|
|
|
+ list, count, err = nats_server.Cold_ReadDeviceDataListBy_T_snid(T_snid, taskList[i].StartTime.String(), taskList[i].EndTime.String(), 0, 9999)
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("nats 获取温湿度信息失败: %s", err)
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, global.GetFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ firstMap := map[int]nats_server.DeviceData_R{}
|
|
|
+ lastMap := map[int]nats_server.DeviceData_R{}
|
|
|
+ if count > 0 {
|
|
|
+ for _, v := range deviceSensorList {
|
|
|
+ for j := 0; j < len(list); j++ {
|
|
|
+ if v.T_id == list[j].T_id {
|
|
|
+ if list[j].T_time != taskList[i].StartTime.String() {
|
|
|
+ if i < len(taskList)-2 && list[j].T_time != taskList[i+1].EndTime.String() {
|
|
|
+ firstData := list[j]
|
|
|
+ firstData.T_time = taskList[i].StartTime.String()
|
|
|
+ firstMap[v.T_id] = firstData
|
|
|
+ count += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if waybill.Status == model.WaybillStatusReceipt {
|
|
|
+ for k := len(list) - 1; k >= 0; k-- {
|
|
|
+ if v.T_id == list[k].T_id {
|
|
|
+ if taskList[i].Id == lastWaybillTask.Id && list[k].T_time != taskList[i].EndTime.String() && !time.Time(taskList[i].EndTime).IsZero() {
|
|
|
+ lastData := list[k]
|
|
|
+ lastData.T_time = taskList[i].EndTime.String()
|
|
|
+ lastMap[v.T_id] = lastData
|
|
|
+ count += 1
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, v := range firstMap {
|
|
|
+ list = append(list, v)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range lastMap {
|
|
|
+ list = append(list, v)
|
|
|
+ }
|
|
|
+ deviceDataPdfList := DeviceSensorDataListToDeviceDataPdfList(list, t_id_list[0], t_id_list[1])
|
|
|
+ deviceDataPdf = append(deviceDataPdf, deviceDataPdfList...)
|
|
|
+ dataList = append(dataList, list...)
|
|
|
+ waybillPDF = append(waybillPDF, WaybillPDF{
|
|
|
+ Data: list,
|
|
|
+ DeviceSensorList: deviceSensorList,
|
|
|
+ Task: taskList[i],
|
|
|
+ DeviceDataPdf: deviceDataPdfList,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
sort.Slice(dataList, func(i, j int) bool {
|
|
|
if dataList[i].T_time == dataList[j].T_time {
|
|
|
// 如果时间相同,则按预设顺序排序
|
|
@@ -1431,11 +1838,50 @@ func (e *Waybill) GetAllData(c *dto.WaybillGetByWaybillNoReq) ([]nats_server.Dev
|
|
|
return dataList[i].T_time < dataList[j].T_time
|
|
|
})
|
|
|
|
|
|
- return dataList, waybillPDF, nil
|
|
|
+ sort.Slice(deviceDataPdf, func(i, j int) bool {
|
|
|
+ return deviceDataPdf[i].T_time < deviceDataPdf[j].T_time
|
|
|
+ })
|
|
|
+
|
|
|
+ return dataList, deviceDataPdf, waybillPDF, nil
|
|
|
}
|
|
|
|
|
|
type WaybillPDF struct {
|
|
|
- Data []nats_server.DeviceData_R `json:"data"`
|
|
|
- DeviceSensorList []nats_server.DeviceSensor_R `json:"deviceSensorList"`
|
|
|
- Task model.WaybillTask `json:"task"`
|
|
|
+ Data []nats_server.DeviceData_R
|
|
|
+ DeviceSensorList []nats_server.DeviceSensor_R
|
|
|
+ Task model.WaybillTask
|
|
|
+ DeviceDataPdf []DeviceDataPdf
|
|
|
+}
|
|
|
+
|
|
|
+type DeviceDataPdf struct {
|
|
|
+ T_time string // sn
|
|
|
+ T_id1 float32 // 传感器id1温度
|
|
|
+ T_id2 float32 // 传感器id2温度
|
|
|
+}
|
|
|
+
|
|
|
+func DeviceSensorDataListToDeviceDataPdfList(list []nats_server.DeviceData_R, T_id1 int, T_id2 int) []DeviceDataPdf {
|
|
|
+ // 创建一个 map 用于存储 DeviceData_Pdf 结果
|
|
|
+ resultMap := make(map[string]DeviceDataPdf)
|
|
|
+
|
|
|
+ // 遍历第一个列表,将数据存入 resultMap
|
|
|
+ for _, item := range list {
|
|
|
+ key := item.T_time
|
|
|
+ if _, ok := resultMap[key]; !ok {
|
|
|
+ resultMap[key] = DeviceDataPdf{T_time: item.T_time}
|
|
|
+ }
|
|
|
+ data := resultMap[key]
|
|
|
+ if item.T_id == T_id1 {
|
|
|
+ data.T_id1 = item.T_t
|
|
|
+ } else if item.T_id == T_id2 {
|
|
|
+ data.T_id2 = item.T_t
|
|
|
+ }
|
|
|
+ resultMap[key] = data
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将 resultMap 转换为 DeviceData_Pdf 列表
|
|
|
+ var finalList []DeviceDataPdf
|
|
|
+ for _, v := range resultMap {
|
|
|
+ finalList = append(finalList, v)
|
|
|
+ }
|
|
|
+ return finalList
|
|
|
+
|
|
|
}
|