|
@@ -4,13 +4,10 @@ import (
|
|
"fmt"
|
|
"fmt"
|
|
"kpt-pasture/model"
|
|
"kpt-pasture/model"
|
|
"kpt-pasture/util"
|
|
"kpt-pasture/util"
|
|
- "sort"
|
|
|
|
"strconv"
|
|
"strconv"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
- "gorm.io/gorm"
|
|
|
|
-
|
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap"
|
|
)
|
|
)
|
|
@@ -93,14 +90,19 @@ func (e *Entry) ProcessMilkOriginal(pastureId int64) {
|
|
zaplog.Error("DeleteRepeatMilkData", zap.Any("pastureId", pastureId), zap.Any("err", err))
|
|
zaplog.Error("DeleteRepeatMilkData", zap.Any("pastureId", pastureId), zap.Any("err", err))
|
|
return
|
|
return
|
|
}
|
|
}
|
|
-
|
|
|
|
- milkHallList := e.FindMilkHallList(pastureId)
|
|
|
|
e.DeleteRepeatMilkData(pastureId, deleteModel, milkClassConfig, milkOriginalList)
|
|
e.DeleteRepeatMilkData(pastureId, deleteModel, milkClassConfig, milkOriginalList)
|
|
- e.UpdateRecognitionTime(pastureId, milkHallList)
|
|
|
|
- e.UpdateRepeatCupSet1(milkOriginalList)
|
|
|
|
- e.UpdateMilkOriginCowInfo(milkOriginalList, milkHallList)
|
|
|
|
- e.UpdateRepeatCupSet2(milkOriginalList)
|
|
|
|
- e.UpdateMilkOriginalInitialTimesAndAttachAdjustTime(shifts, milkOriginalList)
|
|
|
|
|
|
+ milkHallList := e.FindMilkHallList(pastureId)
|
|
|
|
+ for _, hall := range milkHallList {
|
|
|
|
+ e.UpdateRecognitionTime(pastureId, hall)
|
|
|
|
+ e.UpdateRepeatCupSet1(milkOriginalList)
|
|
|
|
+ e.UpdateMilkOriginCowInfo(milkOriginalList, hall)
|
|
|
|
+ e.UpdateRepeatCupSet2(milkOriginalList)
|
|
|
|
+ e.UpdateMilkOriginalInitialTimesAndAttachAdjustTime(shifts, milkOriginalList)
|
|
|
|
+ e.UpdateMilkNattach(pastureId, milkClassConfig, hall)
|
|
|
|
+ e.UpdateMilkNoCowId(pastureId, milkClassConfig, hall)
|
|
|
|
+ e.UpdateMilkLoad(pastureId, milkClassConfig, hall)
|
|
|
|
+ e.UpdateMilkLoad2(pastureId, milkClassConfig, hall)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// UpdateShifts 更新班次
|
|
// UpdateShifts 更新班次
|
|
@@ -114,8 +116,8 @@ func (e *Entry) UpdateShifts(pastureId int64, xBeg1, xBeg2, xBeg3, xBeg4 int) {
|
|
}
|
|
}
|
|
|
|
|
|
for _, v := range milkOriginalList {
|
|
for _, v := range milkOriginalList {
|
|
- subDetachTime1 := util.Substr(v.DetacherTime, 11, 2)
|
|
|
|
- subDetachTime2 := util.Substr(v.DetacherTime, 14, 2)
|
|
|
|
|
|
+ subDetachTime1 := util.Substr(v.DetachedTime, 11, 2)
|
|
|
|
+ subDetachTime2 := util.Substr(v.DetachedTime, 14, 2)
|
|
|
|
|
|
subDetachTime1Int, _ := strconv.ParseInt(subDetachTime1, 10, 64)
|
|
subDetachTime1Int, _ := strconv.ParseInt(subDetachTime1, 10, 64)
|
|
subDetachTime2Int, _ := strconv.ParseInt(subDetachTime2, 10, 64)
|
|
subDetachTime2Int, _ := strconv.ParseInt(subDetachTime2, 10, 64)
|
|
@@ -189,9 +191,9 @@ func (e *Entry) UpdateMilkDate(pastureId int64, xDBeg int) {
|
|
}
|
|
}
|
|
|
|
|
|
// 比较挤奶时间和结束时间,取较晚的时间
|
|
// 比较挤奶时间和结束时间,取较晚的时间
|
|
- detacherTime, _ := util.TimeParseLocal(model.LayoutTime, v.DetacherTime)
|
|
|
|
- latestTime := detacherTime
|
|
|
|
- if endTime.After(detacherTime) {
|
|
|
|
|
|
+ detachedTime, _ := util.TimeParseLocal(model.LayoutTime, v.DetachedTime)
|
|
|
|
+ latestTime := detachedTime
|
|
|
|
+ if endTime.After(detachedTime) {
|
|
latestTime = endTime
|
|
latestTime = endTime
|
|
}
|
|
}
|
|
|
|
|
|
@@ -225,298 +227,24 @@ func (e *Entry) DeleteRepeatMilkData(pastureId int64, deleteModel *DeleteMilkOri
|
|
e.delete1(v, deleteModel.XMind, cfg)
|
|
e.delete1(v, deleteModel.XMind, cfg)
|
|
e.delete2(v, deleteModel.XMind, cfg)
|
|
e.delete2(v, deleteModel.XMind, cfg)
|
|
e.delete3(v, deleteModel.XMind, cfg)
|
|
e.delete3(v, deleteModel.XMind, cfg)
|
|
- e.delete4(v, deleteModel.XMind, cfg)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// UpdateRecognitionTime 识别时间超过40分钟未套杯牛只,识别改为未识别
|
|
|
|
-func (e *Entry) UpdateRecognitionTime(pastureId int64, milkHallList []*model.MilkHall) {
|
|
|
|
- if len(milkHallList) == 0 {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- for _, hall := range milkHallList {
|
|
|
|
- milkOriginalList := make([]*model.MilkOriginal, 0)
|
|
|
|
- if err := e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Where("pasture_id = ?", pastureId).
|
|
|
|
- Where("milk_hall_number = ?", hall.Name).
|
|
|
|
- Where("milk_hall_brand = ?", hall.Brand).
|
|
|
|
- Where("load = ?", 0).
|
|
|
|
- Find(&milkOriginalList).Error; err != nil {
|
|
|
|
- zaplog.Error("MilkHallData", zap.Any("err", err))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, v := range milkOriginalList {
|
|
|
|
- t1, _ := util.TimeParseLocal(model.LayoutTime, v.AttachTime)
|
|
|
|
- t2, _ := util.TimeParseLocal(model.LayoutTime, v.RecognitionTime)
|
|
|
|
- diff := t1.Sub(t2)
|
|
|
|
- minute := int(diff.Minutes())
|
|
|
|
-
|
|
|
|
- if util.Substr(v.RecognitionTime, -1, 8) != "00:00:00" && minute > 40 {
|
|
|
|
- if err := e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Where("id = ?", v.Id).
|
|
|
|
- Updates(map[string]interface{}{
|
|
|
|
- "cow_id": 0,
|
|
|
|
- "ele_ear_number": "",
|
|
|
|
- "recognition_time": fmt.Sprintf("%s 00:00:00", util.Substr(v.RecognitionTime, 0, 10)),
|
|
|
|
- }).Error; err != nil {
|
|
|
|
- zaplog.Error("MilkHallData", zap.Any("err", err))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// UpdateRepeatCupSet1 更新重复套杯1, 识别时间相同,且不为0为重复套杯
|
|
|
|
-func (e *Entry) UpdateRepeatCupSet1(milkOriginalList []*model.MilkOriginal) {
|
|
|
|
- if len(milkOriginalList) == 0 {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- milkOriginalMap := make(map[string][]*model.MilkOriginal)
|
|
|
|
- for _, v := range milkOriginalList {
|
|
|
|
- if strings.HasSuffix(v.RecognitionTime, "00:00:00") {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- key := fmt.Sprintf("%s_%d_%d_%s", v.MilkDate, v.Shifts, v.DetacherAddress, v.RecognitionTime)
|
|
|
|
- milkOriginalMap[key] = append(milkOriginalMap[key], v)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, originalList := range milkOriginalMap {
|
|
|
|
- if len(originalList) >= 2 {
|
|
|
|
- // 按照Id升序排序(保留第一条)
|
|
|
|
- sort.Slice(originalList, func(i, j int) bool {
|
|
|
|
- return originalList[i].Id < originalList[j].Id
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- for i, v := range originalList {
|
|
|
|
- if i == 0 {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- if err := e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Select("").Where("id = ?", v.Id).
|
|
|
|
- Update("nattach", 2).Error; err != nil {
|
|
|
|
- zaplog.Error("UpdateRepeatCupSet1", zap.Any("err", err))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// UpdateMilkOriginCowInfo 更新牛只信息
|
|
|
|
-func (e *Entry) UpdateMilkOriginCowInfo(milkOriginalList []*model.MilkOriginal, milkHallList []*model.MilkHall) {
|
|
|
|
- milkHallMap := make(map[string][]*model.MilkOriginal)
|
|
|
|
- for _, v := range milkOriginalList {
|
|
|
|
- key := fmt.Sprintf("%s", v.MilkHallNumber)
|
|
|
|
- milkHallMap[key] = append(milkHallMap[key], v)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, v := range milkHallList {
|
|
|
|
- dataList, ok := milkHallMap[v.Name]
|
|
|
|
- if !ok {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- switch v.IsExtraUpdate {
|
|
|
|
- case model.IsExtra0:
|
|
|
|
-
|
|
|
|
- case model.IsExtra1, model.IsExtra3:
|
|
|
|
- for _, d := range dataList {
|
|
|
|
- if d.EarNumber == "" {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- cowInfo, err := e.GetCowByEarNumber(d.PastureId, d.EarNumber)
|
|
|
|
- if err != nil {
|
|
|
|
- zaplog.Error("UpdateMilkOriginCowInfo", zap.Any("err", err), zap.Any("data", d))
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- // 更新牛只信息
|
|
|
|
- d.UpdateCowInfo(cowInfo)
|
|
|
|
- if err = e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Select("cow_id", "pen_id", "pen_name").
|
|
|
|
- Where("id = ?", d.Id).Updates(d).Error; err != nil {
|
|
|
|
- zaplog.Error("UpdateMilkOriginCowInfo", zap.Any("err", err), zap.Any("data", d))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- case model.IsExtra2:
|
|
|
|
- default:
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (e *Entry) UpdateMilkOriginalInitialTimesAndAttachAdjustTime(shifts []int32, milkOriginalList []*model.MilkOriginal) {
|
|
|
|
- for _, shift := range shifts {
|
|
|
|
- shiftMinDetachTimes := ""
|
|
|
|
- // 按脱杯地址分组处理
|
|
|
|
- addressMap := make(map[int64][]*model.MilkOriginal)
|
|
|
|
- for _, m := range milkOriginalList {
|
|
|
|
- if m.Shifts != shift || m.DetacherTime == "" {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- if shiftMinDetachTimes == "" {
|
|
|
|
- shiftMinDetachTimes = m.DetacherTime
|
|
|
|
- } else {
|
|
|
|
- t1, _ := util.TimeParseLocal(model.LayoutTime, m.DetacherTime)
|
|
|
|
- t2, _ := util.TimeParseLocal(model.LayoutTime, shiftMinDetachTimes)
|
|
|
|
- if t2.Before(t1) {
|
|
|
|
- shiftMinDetachTimes = m.DetacherTime
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- addressMap[m.DetacherAddress] = append(addressMap[m.DetacherAddress], m)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if shiftMinDetachTimes == "" {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- bt, _ := util.TimeParseLocal(model.LayoutTime, shiftMinDetachTimes)
|
|
|
|
- b5 := bt.Add(-5*time.Minute).Format(model.LayoutHour) + "00:00"
|
|
|
|
-
|
|
|
|
- for _, list := range addressMap {
|
|
|
|
- // 对当前地址的记录按时间排序
|
|
|
|
- sort.Slice(list, func(i, j int) bool {
|
|
|
|
- if list[i].MilkDate != list[j].MilkDate {
|
|
|
|
- return list[i].MilkDate < list[j].MilkDate
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if list[i].Shifts != list[j].Shifts {
|
|
|
|
- return list[i].Shifts < list[j].Shifts
|
|
|
|
- }
|
|
|
|
- if list[i].DetacherAddress != list[j].DetacherAddress {
|
|
|
|
- return list[i].DetacherAddress < list[j].DetacherAddress
|
|
|
|
- }
|
|
|
|
- return list[i].Id < list[j].Id
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- // 初始化变量,模拟SQL中的@address和@det
|
|
|
|
- var lastAddress int64 = 0
|
|
|
|
- var lastDetachTime string = "2001-01-01 06:00:00" // 默认初始值
|
|
|
|
- // 批量更新参数
|
|
|
|
- var updateParams []struct {
|
|
|
|
- ID int64
|
|
|
|
- InitialTimes string
|
|
|
|
- AttachAdjust string
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, m := range list {
|
|
|
|
- var initialTimeStr string
|
|
|
|
- var attachAdjust string
|
|
|
|
- // 如果当前记录的脱杯地址与上一条不同,则使用基准时间b5
|
|
|
|
- if m.DetacherAddress != lastAddress {
|
|
|
|
- initialTimeStr = b5
|
|
|
|
- } else {
|
|
|
|
- // 否则使用上一条记录的脱杯时间
|
|
|
|
- initialTimeStr = lastDetachTime
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 更新最后记录的地址和时间
|
|
|
|
- lastAddress = m.DetacherAddress
|
|
|
|
- lastDetachTime = m.DetacherTime
|
|
|
|
-
|
|
|
|
- // 只有当initialTime不为空且与原有值不同时才需要更新
|
|
|
|
- if initialTimeStr != "" {
|
|
|
|
- initialTime, _ := util.TimeParseLocal(model.LayoutTime, initialTimeStr)
|
|
|
|
- attachTime, _ := util.TimeParseLocal(model.LayoutTime, m.AttachTime)
|
|
|
|
- detachTime, _ := util.TimeParseLocal(model.LayoutTime, m.DetacherTime)
|
|
|
|
-
|
|
|
|
- // 条件1:attachtimes以'00:00:00'结尾或attachtimes <= initialtimes
|
|
|
|
- if strings.HasSuffix(m.AttachTime, "00:00:00") || attachTime.Before(initialTime) || attachTime.Equal(initialTime) {
|
|
|
|
- // 计算 detachtimes - (1.5 + duration)*60 秒
|
|
|
|
- adjustTime1 := detachTime.Add(-time.Duration((90 + m.Duration*60)) * time.Second)
|
|
|
|
-
|
|
|
|
- // 取三者中的最大值
|
|
|
|
- maxTime := util.FindMaxTime(attachTime, initialTime, adjustTime1)
|
|
|
|
- attachAdjust = maxTime.Format(model.LayoutTime)
|
|
|
|
- } else {
|
|
|
|
- // 计算 detachtimes - duration*60 秒
|
|
|
|
- adjustTime2 := detachTime.Add(-time.Duration(m.Duration*60) * time.Second)
|
|
|
|
-
|
|
|
|
- // 取 attachtimes 和 adjustTime2 中的较小值
|
|
|
|
- minTime := util.FindMinTime(attachTime, adjustTime2)
|
|
|
|
-
|
|
|
|
- // 再与 initialtimes 取较大值
|
|
|
|
- maxTime := util.FindMaxTime(minTime, initialTime)
|
|
|
|
- attachAdjust = maxTime.Format(model.LayoutTime)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 记录需要更新的字段
|
|
|
|
- updateParams = append(updateParams, struct {
|
|
|
|
- ID int64
|
|
|
|
- InitialTimes string
|
|
|
|
- AttachAdjust string
|
|
|
|
- }{
|
|
|
|
- ID: m.Id,
|
|
|
|
- InitialTimes: initialTimeStr,
|
|
|
|
- AttachAdjust: attachAdjust,
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- /*if err := e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Select("initial_time").
|
|
|
|
- Where("id = ?", m.Id).
|
|
|
|
- Update("initial_time", initialTime).Error; err != nil {
|
|
|
|
- zaplog.Error("UpdateMilkOriginalInitialTimesAndAttachAdjustTime", zap.Any("err", err))
|
|
|
|
- }*/
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if len(updateParams) > 0 {
|
|
|
|
- // 批量更新数据库
|
|
|
|
- if err := e.DB.Transaction(func(tx *gorm.DB) error {
|
|
|
|
- for _, param := range updateParams {
|
|
|
|
- updates := map[string]interface{}{
|
|
|
|
- "initial_times": param.InitialTimes,
|
|
|
|
- "attach_adjust_time": param.AttachAdjust,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if err := tx.Model(new(model.MilkOriginal)).
|
|
|
|
- Select("initial_time", "attach_adjust_time").
|
|
|
|
- Where("id = ? ", param.ID).
|
|
|
|
- Updates(updates).Error; err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return nil
|
|
|
|
- }); err != nil {
|
|
|
|
- zaplog.Error("UpdateMilkOriginalInitialTimesAndAttachAdjustTime", zap.Any("err", err))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// UpdateRepeatCupSet2 非标准重复套杯
|
|
|
|
-func (e *Entry) UpdateRepeatCupSet2(milkOriginalList []*model.MilkOriginal) {
|
|
|
|
- for _, v := range milkOriginalList {
|
|
|
|
- if v.AttachTime == "" || v.InitialTime == "" {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- nattchTime, _ := util.TimeParseLocal(model.LayoutTime, v.AttachTime)
|
|
|
|
- initialTime, _ := util.TimeParseLocal(model.LayoutTime, v.InitialTime)
|
|
|
|
- if util.Substr(v.InitialTime, -1, 5) != "00:00" && v.Nattach == 0 && nattchTime.Sub(initialTime).Minutes() <= 1 {
|
|
|
|
- if err := e.DB.Model(new(model.MilkOriginal)).
|
|
|
|
- Select("nattach").
|
|
|
|
- Where("id = ?", v.Id).
|
|
|
|
- Update("nattach", 2).Error; err != nil {
|
|
|
|
- zaplog.Error("UpdateRepeatCupSet2", zap.Any("err", err))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ e.delete4(v)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
func (e *Entry) delete1(data *model.MilkOriginal, xMinD string, cfg *MilkClassConfig) {
|
|
func (e *Entry) delete1(data *model.MilkOriginal, xMinD string, cfg *MilkClassConfig) {
|
|
// 1. 删除attach_time为00:00:00的记录
|
|
// 1. 删除attach_time为00:00:00的记录
|
|
- acctchStr := util.Substr(data.AttachTime, -1, 8)
|
|
|
|
- if data.MilkDate < xMinD || acctchStr != "00:00:00" {
|
|
|
|
|
|
+ actchStr := util.Substr(data.AttachTime, -1, 8)
|
|
|
|
+ if data.MilkDate < xMinD || actchStr != "00:00:00" {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
// 2. 检查是否存在符合条件的m2记录
|
|
// 2. 检查是否存在符合条件的m2记录
|
|
var count int64
|
|
var count int64
|
|
if err := e.DB.Model(new(model.MilkOriginal)).
|
|
if err := e.DB.Model(new(model.MilkOriginal)).
|
|
- Where("wid BETWEEN ? AND ?", cfg.OldUpdateMaxId+1, cfg.CurrentMaxId).
|
|
|
|
|
|
+ Where("id BETWEEN ? AND ?", cfg.OldUpdateMaxId+1, cfg.CurrentMaxId).
|
|
Where("milk_date = ?", data.MilkDate).
|
|
Where("milk_date = ?", data.MilkDate).
|
|
- Where("detacher_address = ?", data.DetacherAddress).
|
|
|
|
- Where("ABS(TIMESTAMPDIFF(SECOND, detach_time, ?)) < 10", data.DetacherTime).
|
|
|
|
|
|
+ Where("detached_address = ?", data.DetachedAddress).
|
|
|
|
+ Where("ABS(TIMESTAMPDIFF(SECOND, detach_time, ?)) < 10", data.DetachedTime).
|
|
Where("milk_weight = ?", data.MilkWeight).
|
|
Where("milk_weight = ?", data.MilkWeight).
|
|
Where("pasture_id = ?", data.PastureId).
|
|
Where("pasture_id = ?", data.PastureId).
|
|
Where("RIGHT(attach_time, 8) != '00:00:00'").
|
|
Where("RIGHT(attach_time, 8) != '00:00:00'").
|
|
@@ -546,7 +274,7 @@ func (e *Entry) delete2(data *model.MilkOriginal, xMinD string, cfg *MilkClassCo
|
|
Where("id BETWEEN ? AND ?", cfg.OldUpdateMaxId+1, cfg.CurrentMaxId).
|
|
Where("id BETWEEN ? AND ?", cfg.OldUpdateMaxId+1, cfg.CurrentMaxId).
|
|
Where("milk_date = ?", data.MilkDate).
|
|
Where("milk_date = ?", data.MilkDate).
|
|
Where("shifts = ?", data.Shifts).
|
|
Where("shifts = ?", data.Shifts).
|
|
- Where("detacher_address = ?", data.DetacherAddress).
|
|
|
|
|
|
+ Where("detached_address = ?", data.DetachedAddress).
|
|
Where("attach_time = ?", data.AttachTime).
|
|
Where("attach_time = ?", data.AttachTime).
|
|
Where("milk_weight = ?", data.MilkWeight).
|
|
Where("milk_weight = ?", data.MilkWeight).
|
|
Where("pasture_id = ?", data.PastureId).
|
|
Where("pasture_id = ?", data.PastureId).
|
|
@@ -603,7 +331,7 @@ func (e *Entry) delete3(data *model.MilkOriginal, xMinD string, cfg *MilkClassCo
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-func (e *Entry) delete4(data *model.MilkOriginal, xMinD string, cfg *MilkClassConfig) {
|
|
|
|
|
|
+func (e *Entry) delete4(data *model.MilkOriginal) {
|
|
// 1. 检查记录是否在时间范围内
|
|
// 1. 检查记录是否在时间范围内
|
|
if data.MilkDate < "2020-10-01" {
|
|
if data.MilkDate < "2020-10-01" {
|
|
return
|
|
return
|
|
@@ -614,8 +342,8 @@ func (e *Entry) delete4(data *model.MilkOriginal, xMinD string, cfg *MilkClassCo
|
|
if err := e.DB.Model(new(model.MilkOriginal)).
|
|
if err := e.DB.Model(new(model.MilkOriginal)).
|
|
Where("id = ?", data.Id).
|
|
Where("id = ?", data.Id).
|
|
Where("milk_date >= ?", "2020-10-01").
|
|
Where("milk_date >= ?", "2020-10-01").
|
|
- Where("recognition_time > detacher_time").
|
|
|
|
- Where("attach_time > detacher_time").
|
|
|
|
|
|
+ Where("recognition_time > detached_time").
|
|
|
|
+ Where("attach_time > detached_time").
|
|
Where("SUBSTRING(attach_time, 12, 2) = ?", "23").
|
|
Where("SUBSTRING(attach_time, 12, 2) = ?", "23").
|
|
Where("pasture_id = ?", data.PastureId).
|
|
Where("pasture_id = ?", data.PastureId).
|
|
Select("1").
|
|
Select("1").
|