Browse Source

Merge pull request 'develop' (#213) from develop into master

Reviewed-on: http://101.201.121.115:3000/leo/LAPP_Acura_MES_Backend/pulls/213
feature_specialship V1.17
zhangxin 2 years ago
parent
commit
1c8233d515
10 changed files with 431 additions and 63 deletions
  1. +2
    -0
      dao/base/Snr.dao.go
  2. +329
    -2
      dao/base/implments/Snr.dao.impl.go
  3. +6
    -0
      models/base/Const.go
  4. +1
    -1
      models/pln/pln.go
  5. +15
    -3
      services/jit/implments/ShipOrder.service.impl.go
  6. +1
    -1
      services/om/SerialOrder.service.go
  7. +15
    -12
      services/om/implments/SerialOrder.service.impl.go
  8. +57
    -40
      services/pln/implments/CustOrder.service.impl.go
  9. +2
    -2
      utils/time.go
  10. +3
    -2
      web/controllers/om/SerialOrder.rest.go

+ 2
- 0
dao/base/Snr.dao.go View File

@ -7,6 +7,7 @@ import (
"LAPP_ACURA_MOM_BACKEND/grmi"
model "LAPP_ACURA_MOM_BACKEND/models/base"
"github.com/go-xorm/xorm"
"time"
)
/******************************************************************************
@ -232,6 +233,7 @@ type SnrDAO interface {
*
******************************************************************************/
GetNextSnr(string) (string, error)
GetNextSnrWithTime(snr string, t time.Time) (returnSnr string, err error)
}
/******************************************************************************


+ 329
- 2
dao/base/implments/Snr.dao.impl.go View File

@ -429,7 +429,7 @@ func (impl *SnrDAOImplement) GetNextSnr(snr string) (retsnr string, err error) {
} else {
if snrtab.DateFormat == "Func:GenerateTimeFormatForAcura" {
dateStr, err := utils.GenerateTimeFormatForAcura()
dateStr, err := utils.GenerateTimeFormatForAcura(time.Now())
if err != nil {
return "", err
}
@ -661,7 +661,7 @@ func (impl *SnrDAOImplement) GetSessionNextSnr(user *global.User, session *xorm.
} else {
if snrtab.DateFormat == "Func:GenerateTimeFormatForAcura" {
dateStr, err := utils.GenerateTimeFormatForAcura()
dateStr, err := utils.GenerateTimeFormatForAcura(time.Now())
if err != nil {
return "", err
}
@ -790,3 +790,330 @@ func (impl *SnrDAOImplement) SelectStd(dataMap string) ([]model.Stdef, error) {
}
return data, nil
}
// SelectNexSnrFromCache 从缓存获取下一个序列号
func (impl *SnrDAOImplement) SelectNexSnrFromCache(snrId, date, rule string, startNr, year, month, week int) (int, error) {
var (
where string // 查询条件
parameters []interface{} // 查询参数
)
switch rule {
case model.RESET_RULE_DAYLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrDate.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, date}
case model.RESET_RULE_WEEKLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
meta.SnrCache_SnrWeek.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, year, week}
case model.RESET_RULE_MONTHLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
meta.SnrCache_SnrMonth.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, year, month}
case model.RESET_RULE_YEARLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
)
parameters = []interface{}{impl.plantNr, snrId, year}
default:
return 0, grmi.NewBusinessError("不支持的规则类型")
}
var data model.SnrCache
ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Get(&data)
if err != nil {
return 0, err
}
if !ok {
return startNr, nil
}
return data.NextNr, nil
}
// GetMaxItemNr 获取最大的itemNr
func (impl *SnrDAOImplement) GetMaxItemNr(snrId string) (int, error) {
where := fmt.Sprintf("%s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
)
parameters := []interface{}{impl.plantNr, snrId}
var snrCache model.SnrCache
ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Desc(meta.SnrCache_ItemNr.SortColumnName).Get(&snrCache)
if err != nil {
return 0, err
}
if !ok {
return 0, nil
}
return snrCache.ItemNr, nil
}
// UpdateSnrCache 更新snrCache
func (impl *SnrDAOImplement) UpdateSnrCache(snrId, rule string, year, month, week, nextSnr int, date time.Time) error {
var (
where string // 查询条件
parameters []interface{} // 查询参数
)
switch rule {
case model.RESET_RULE_DAYLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrDate.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, date.Format(grmi.DateOutFormat)}
case model.RESET_RULE_WEEKLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
meta.SnrCache_SnrWeek.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, year, week}
case model.RESET_RULE_MONTHLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
meta.SnrCache_SnrMonth.ColumnName)
parameters = []interface{}{impl.plantNr, snrId, year, month}
case model.RESET_RULE_YEARLY:
where = fmt.Sprintf("%s = ? and %s = ? and %s = ?",
meta.SnrCache_PlantNr.ColumnName,
meta.SnrCache_SnrId.ColumnName,
meta.SnrCache_SnrYear.ColumnName,
)
parameters = []interface{}{impl.plantNr, snrId, year}
default:
return grmi.NewBusinessError("不支持的规则类型")
}
var data model.SnrCache
ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Get(&data)
if err != nil {
return err
}
if !ok {
maxItemNr, err := impl.GetMaxItemNr(snrId)
if err != nil {
return err
}
snrCache := model.SnrCache{
PlantNr: impl.plantNr,
SnrId: snrId,
ItemNr: maxItemNr+1,
SnrDate: grmi.Date(date),
SnrYear: year,
SnrMonth: month,
SnrDay: date.Day(),
SnrWeek: week,
NextNr: nextSnr,
}
_, err = impl.session.Table(meta.SnrCache.TableName).Insert(&snrCache)
if err != nil {
return grmi.NewDataBaseError(err)
}
return nil
} else {
data.SnrDate = grmi.Date(date)
data.LastModify = grmi.DateTime(time.Now())
data.LastUser = impl.userid
data.NextNr = nextSnr
data.SnrYear = year
data.SnrMonth = month
data.SnrDay = date.Day()
data.SnrWeek = week
_, err = impl.session.Table(meta.SnrCache.TableName).Cols(meta.SnrCache.UpdatingMembers...).ID(data.GetKey()).Update(&data)
if err != nil {
return grmi.NewDataBaseError(err)
}
return nil
}
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/dao/base/SnrDAO.GetNextSnrWithTime
*
******************************************************************************/
func (impl *SnrDAOImplement) GetNextSnrWithTime(snr string, t time.Time) (returnSnr string, err error) {
year, month, _ := t.Date()
_, week := t.ISOWeek()
date := t.Format(grmi.DateOutFormat)
snrData, err := impl.SelectOne(snr)
if err != nil {
return
}
if snrData == nil {
return "", grmi.NewBusinessError("未查询到流水号规则")
}
nextSnr, err := impl.SelectNexSnrFromCache(snr, date, snrData.ResetNrRule, snrData.StartNr, year, int(month), week)
if err != nil {
return "", err
}
// 组合返回值
layout := []byte(snrData.Identifierlayout)
for i := 0; i < len(layout); i++ {
switch string(layout[i]) {
case "1": //前缀
//判断是否开通了映射
if snrData.Data1MappingToggle {
//查询对应的key Map
stdData, err := impl.SelectStd(snrData.Data1Mapper)
if err != nil {
return "", err
}
stdMap := make(map[string]string)
for _, v := range stdData {
val := v.StdefTyp
key := v.Bez
stdMap[key] = val
}
value, ok := stdMap[snrData.Prefix]
if ok {
returnSnr = returnSnr + value
} else {
returnSnr = returnSnr + snrData.Prefix
}
} else {
returnSnr = returnSnr + snrData.Prefix
}
case "2": //日期变量
//判断是否开通了映射
if snrData.Data2MappingToggle {
//查询对应的key Map
stdData, err := impl.SelectStd(snrData.Data2Mapper)
if err != nil {
return "", err
}
stdMap := make(map[string]string)
for _, v := range stdData {
val := v.StdefTyp
key := v.Bez
stdMap[key] = val
}
value, ok := stdMap[utils.Date(t.Unix(), snrData.DateFormat)]
if ok {
returnSnr = returnSnr + value
} else {
returnSnr = returnSnr + utils.Date(t.Unix(), snrData.DateFormat)
}
} else {
if snrData.DateFormat == "Func:GenerateTimeFormatForAcura" {
dateStr, err := utils.GenerateTimeFormatForAcura(t)
if err != nil {
return "", err
}
returnSnr = returnSnr + dateStr
} else {
returnSnr = returnSnr + utils.Date(t.Unix(), snrData.DateFormat)
}
}
case "3": //中缀
//判断是否开通了映射
if snrData.Data3MappingToggle {
//查询对应的key Map
stdData, err := impl.SelectStd(snrData.Data3Mapper)
if err != nil {
return "", err
}
stdMap := make(map[string]string)
for _, v := range stdData {
val := v.StdefTyp
key := v.Bez
stdMap[key] = val
}
value, ok := stdMap[snrData.Infix]
if ok {
returnSnr = returnSnr + value
} else {
returnSnr = returnSnr + snrData.Infix
}
} else {
returnSnr = returnSnr + snrData.Infix
}
case "4": //流水号
var nextnum string
if snrData.IdentifierFormat == "CHAR" {
nextnum = utils.ConvInt2FormatString(nextSnr, snrData.Length)
} else {
nextnum = strconv.Itoa(nextSnr)
}
//判断是否开通了映射
if snrData.Data4MappingToggle {
//查询对应的key Map
stdData, err := impl.SelectStd(snrData.Data4Mapper)
if err != nil {
return "", err
}
stdMap := make(map[string]string)
for _, v := range stdData {
val := v.StdefTyp
key := v.Bez
stdMap[key] = val
}
value, ok := stdMap[nextnum]
if ok {
returnSnr = returnSnr + value
} else {
returnSnr = returnSnr + nextnum
}
} else {
returnSnr = returnSnr + nextnum
}
case "5": //后缀
//判断是否开通了映射
if snrData.Data5MappingToggle {
//查询对应的key Map
stdData, err := impl.SelectStd(snrData.Data5Mapper)
if err != nil {
return "", err
}
stdMap := make(map[string]string)
for _, v := range stdData {
val := v.StdefTyp
key := v.Bez
stdMap[key] = val
}
value, ok := stdMap[snrData.Postfix]
if ok {
returnSnr = returnSnr + value
} else {
returnSnr = returnSnr + snrData.Postfix
}
} else {
returnSnr = returnSnr + snrData.Postfix
}
}
}
//更新下一序列值
updateNextSnr := nextSnr + snrData.Step
if updateNextSnr > snrData.EndNr {
switch strings.ToUpper(snrData.OverflowHandling) {
case "NO":
case "RESET":
updateNextSnr = snrData.StartNr
}
}
err = impl.UpdateSnrCache(snr, snrData.ResetNrRule, year, int(month), week, updateNextSnr, t)
return
}

+ 6
- 0
models/base/Const.go View File

@ -6,6 +6,12 @@ const (
PROJECT_ACURA = "ACURA"
PROJECT_NANSHA = "nansha"
// 流水号重置规则
RESET_RULE_DAYLY = "DAILY"
RESET_RULE_WEEKLY = "WEEKLY"
RESET_RULE_MONTHLY = "MONTHLY"
RESET_RULE_YEARLY = "YEARLY"
WORKPLACE_CONIFG_WIRTE_SEAT = "SEAT"
WORKPLACE_CONFIG_WRITE_SIGN = "SIGN"


+ 1
- 1
models/pln/pln.go View File

@ -71,7 +71,7 @@ type HourProductData struct {
//Dashboard数据展示
type DashboardPic struct {
DashboardDataPic1 *CutLine1 //图例1
DashboardDataPic1 CutLine1 //图例1
DashboardDataPic2 []DefectItem //图例2
DashboardDataPic3 PerDashboardData //图例3
DashboardDataPic4 TargetItem //目标数据


+ 15
- 3
services/jit/implments/ShipOrder.service.impl.go View File

@ -18,6 +18,7 @@ import (
model "LAPP_ACURA_MOM_BACKEND/models/jit"
omModel "LAPP_ACURA_MOM_BACKEND/models/om"
"LAPP_ACURA_MOM_BACKEND/utils"
"fmt"
json "github.com/json-iterator/go"
"github.com/kataras/iris/v12"
"strconv"
@ -1351,6 +1352,7 @@ func (impl *ShipOrderServiceImplement) ChangeAdvanceToFormal(user *global.User,
advanceShipOrderDataMap[key] += 1
}
}
fmt.Println("advanceShipOrderDataMap:", advanceShipOrderDataMap)
formalShipOrderItemLi, err := shipOrderLstDao.Select([]grmi.Predicate{meta.ShipOrderItemLst_ShipOrderId.NewPredicate(grmi.Equal, formalShipOrderId)}, []grmi.Field{meta.ShipOrderItemLst_Pos})
if err != nil {
return grmi.NewBusinessError("查询正式发运单子项失败, error:" + err.Error())
@ -1362,9 +1364,9 @@ func (impl *ShipOrderServiceImplement) ChangeAdvanceToFormal(user *global.User,
formalShipOrderCarSetMap[shipOrderItem.PackTemplateId] = 1
} else {
formalShipOrderCarSetMap[shipOrderItem.PackTemplateId] += 1
}
}
formalShipOrderDataMap := make(map[string]int)
for productFamilyId, qty := range formalShipOrderCarSetMap {
productLi, err := productFamilyRelateDao.SelectPackProductByFamilyId(formalShipOrder.ProjectId, productFamilyId)
if err != nil {
@ -1374,12 +1376,22 @@ func (impl *ShipOrderServiceImplement) ChangeAdvanceToFormal(user *global.User,
for _, product := range productLi {
key += product.ProductId
}
_, exist := formalShipOrderDataMap[key]
if !exist {
formalShipOrderDataMap[key] = qty
} else {
formalShipOrderDataMap[key] += qty
}
}
for key, qty := range formalShipOrderDataMap {
advanceQty, exist := advanceShipOrderDataMap[key]
if !exist {
return grmi.NewBusinessError("两个发运单发运子项不匹配, 包装模板不匹配, 包装模板ID:" + productFamilyId)
fmt.Println("key:", key)
return grmi.NewBusinessError("两个发运单发运子项不匹配, 包装模板不匹配")
}
if qty != advanceQty {
return grmi.NewBusinessError("两个发运单发运子项不匹配, 包装模板数量不匹配, 包装模板ID:" + productFamilyId)
return grmi.NewBusinessError("两个发运单发运子项不匹配, 包装模板数量不匹配")
}
}
//advanceShipOrderItemLi, err := shipOrderLstDao.Select([]grmi.Predicate{meta.ShipOrderItemLst_ShipOrderId.NewPredicate(grmi.Equal, advanceShipOrderId), meta.ShipOrderItemLst_Status.NewPredicate(grmi.Equal, model.SHIP_STATUS_CLOSED)}, []grmi.Field{meta.ShipOrderItemLst_Pos})


+ 1
- 1
services/om/SerialOrder.service.go View File

@ -513,7 +513,7 @@ type SerialOrderService interface {
PrintRuleInfo(user *global.User, session *xorm.Session, serialOrderStep *model.SerialOrderStepLst, rule *baseModel.PrintBasicRuleInfo, printTemplate *baseModel.LabelTemplateHead, article *baseModel.Article, bkFlag bool, planDate string) error
ExtractArtId(bomHead *meModel.BomHead) map[string]int
ExtractEOL(session *xorm.Session, user *global.User, serialOrder *model.SerialOrder) (status bool, remark string, recordT time.Time, err error)
CreateBatchSerialOrder(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int) error
CreateBatchSerialOrder(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int, planDate string) error
TraceSubArticleBatch(user *global.User, barcode string, paging *grmi.Paging) (grmi.PagingResult, error)
ExportTraceSubArticleBatch(user *global.User, barcode string) (string, error)
CancelMultiSerialOrder(user *global.User, serialOrderIdLi []string) error


+ 15
- 12
services/om/implments/SerialOrder.service.impl.go View File

@ -18,6 +18,7 @@ import (
eolModel "LAPP_ACURA_MOM_BACKEND/models/eol"
meModel "LAPP_ACURA_MOM_BACKEND/models/me"
model "LAPP_ACURA_MOM_BACKEND/models/om"
"LAPP_ACURA_MOM_BACKEND/utils"
"github.com/go-xorm/xorm"
"strconv"
"strings"
@ -3876,10 +3877,14 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderDetailTrace(user *global.
* @Reference LAPP_ACURA_MOM_BACKEND/services/om/SerialOrderService.CreateBatchSerialOrder
*
******************************************************************************/
func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int) error {
func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int, planDate string) error {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
planDateT, err := time.ParseInLocation(grmi.DateOutFormat, planDate, utils.TimezoneLocation)
if err != nil {
return grmi.NewBusinessError("计划日期格式错误")
}
productDao := meDal.NewProductDAO(session, user.PlantNr, user.UserId)
serialOrderDao := dal.NewSerialOrderDAO(session, user.PlantNr, user.UserId)
serialOrderStatusDao := dal.NewSerialOrderStatusDAO(session, user.PlantNr, user.UserId)
@ -3925,9 +3930,8 @@ func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.Use
return grmi.NewBusinessError("开启事务失败, 错误:" + err.Error())
}
if priority != 0 {
now := time.Now()
for i := 1; i <= qty; i++ {
serialNumber, err := snrDao.GetNextSnr(project.INTSerialOrderSnr)
serialNumber, err := snrDao.GetNextSnrWithTime(project.INTSerialOrderSnr, planDateT)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error())
@ -3945,10 +3949,10 @@ func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.Use
PlanResourceId: workLineId,
UsedResourceId: workLineId,
PlanQty: 1,
PlanStartDate: grmi.Date(now),
PlanEndDate: grmi.Date(now),
PlanStartTime: grmi.DateTime(now),
PlanEndTime: grmi.DateTime(now),
PlanStartDate: grmi.Date(planDateT),
PlanEndDate: grmi.Date(planDateT),
PlanStartTime: grmi.DateTime(planDateT),
PlanEndTime: grmi.DateTime(planDateT),
PickingFlag: product.PickingFlag,
}
err = serialOrderDao.InsertOne(&insertOrder)
@ -3990,7 +3994,6 @@ func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.Use
_ = session.Rollback()
return grmi.NewBusinessError("生成的排序Key已存在工单")
}
now := time.Now()
for i := 1; i <= qty; i++ {
serialNumber, err := snrDao.GetNextSnr(project.INTSerialOrderSnr)
if err != nil {
@ -4013,10 +4016,10 @@ func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.Use
PlanResourceId: workLineId,
UsedResourceId: workLineId,
PlanQty: 1,
PlanStartDate: grmi.Date(now),
PlanEndDate: grmi.Date(now),
PlanStartTime: grmi.DateTime(now),
PlanEndTime: grmi.DateTime(now),
PlanStartDate: grmi.Date(planDateT),
PlanEndDate: grmi.Date(planDateT),
PlanStartTime: grmi.DateTime(planDateT),
PlanEndTime: grmi.DateTime(planDateT),
PickingFlag: product.PickingFlag,
}
err = serialOrderDao.InsertOne(&insertOrder)


+ 57
- 40
services/pln/implments/CustOrder.service.impl.go View File

@ -31,6 +31,8 @@ import (
"strconv"
"strings"
"sync"
//"sync"
"time"
)
@ -871,11 +873,7 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde
// 创建序列工单和工单状态
for i := 0; i < orderData.PlanQty; i++ {
syncKey = custOrderId + "-" + strconv.Itoa(i)
serialNumber, err := snrDao.GetNextSnr(project.SerialOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error())
}
for _, product := range productLi {
// 获取生产使用的产线
var resourceId string
@ -911,12 +909,19 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde
} else {
resourceId = product.DefaultWorkLineId
}
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue
planStartTime := orderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*current) * time.Second)
planEndTime := orderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(current+1)) * time.Second)
current++
planStartDate := grmi.Date(planStartTime)
planEndDate := grmi.Date(planEndTime)
serialNumber, err := snrDao.GetNextSnrWithTime(project.SerialOrderSnr, planStartTime)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error())
}
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue
timeInt, err := strconv.Atoi(planStartTime.Format("060102150405"))
if err != nil {
_ = session.Rollback()
@ -1179,11 +1184,8 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User,
//second := serialNumber % 34
//firstStr := baseModel.NUMBER_MAP[first]
//secondStr := baseModel.NUMBER_MAP[second]
serialNumber, err := snrDao.GetNextSnr(project.SerialOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error())
}
for _, product := range productLi {
workLine, exist := workLineMap[product.DefaultWorkLineId]
if !exist {
@ -1200,7 +1202,6 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User,
}
//machineCode := product.MachineCode
//serialOrderId := machineCode + yearStr + monthStr + dayStr + firstStr + secondStr + "0" + product.ColorValue
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue
schedKeyStr, err := snrDao.GetNextSnr(workLine.SchedKeySnr)
if err != nil {
_ = session.Rollback()
@ -1216,6 +1217,13 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User,
planEndTime := orderData.CustOrder.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(current+1)) * time.Second)
planStartDate := grmi.Date(planStartTime)
planEndDate := grmi.Date(planEndTime)
serialNumber, err := snrDao.GetNextSnrWithTime(project.SerialOrderSnr, planStartTime)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error())
}
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue
if i == 0 {
isFirstPieceToggle = true
}
@ -2343,6 +2351,7 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s
var dayModelEndTime int
nowTime := time.Now()
var WorkShift int
_ = WorkShift
//构建开始时间和结束时间
startDayTime := utils.GetZeroTime(time.Now())
if dayModel.WorkShiftToggle {
@ -2514,39 +2523,39 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s
var wg sync.WaitGroup
wg.Add(6)
//图例001
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.DashboardDataPic1, err1 = impl.SelectPic1(user, dayModel, workLineId)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg )
//图例002
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.DashboardDataPic2, err2 = impl.SelectDefectNumber(user, days, workLineId)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg)
//图例003
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.DashboardDataPic3, err3 = impl.SelectPic3(user, DayModelHours, dayModelStartHour, dayModelEndHour, startDayTime, endDayTime, timeBeat, personNum, workLineId)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg)
//图例004
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.DashboardDataPic4, err4 = impl.CountTarget(user, workLineId)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg)
//计算当前节拍,及其平均
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.TeamTemPo, DashboardData.PerHourTemPo, err5 = impl.SelectTeamTemPo(user, dayModel, personNum, startDayTime, WorkShift, workLineId)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg)
go func() {
go func(wg *sync.WaitGroup) {
DashboardData.DashboardDataStatus, err6 = impl.SelectAndonInfo(user)
wg.Done() // 操作完成,减少一个计数
}()
}(&wg)
wg.Wait()
if err1 != nil {
return nil, err1
@ -2557,12 +2566,15 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s
if err3 != nil {
return nil, err3
}
if err4 != nil {
return nil, err4
}
if err5 != nil {
return nil, err5
}
if err6 != nil {
return nil, err6
}
@ -2571,6 +2583,7 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s
//节拍
DashboardData.CurrentTempo = timeBeat
DashboardData.IppmTarge = ippmTarge
DashboardData.DateTimeNow = utils.TimeFormat(time.Now(), "yyyy-MM-dd HH:00")
return DashboardData, err
@ -3103,7 +3116,7 @@ func (impl *CustOrderServiceImplement) SelectTeamTemPo(user *global.User, dayMod
}
//图例1
func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *baseModel.DayModel, workLineId string) (result *model.CutLine1, err error) {
func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *baseModel.DayModel, workLineId string) (result model.CutLine1, err error) {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
@ -3133,7 +3146,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
custOrderLi, err := custOrderDao.SelectRunningCustOrder(workLineId)
if err != nil {
return nil, grmi.NewBusinessError("查询正在生产的客户订单失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询正在生产的客户订单失败, 错误:" + err.Error())
}
var currentMeter int
@ -3143,23 +3156,23 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
custOrder := custOrderLi[0]
productFamily, err := productFamilyDao.SelectOne(custOrder.ProductFamilyId)
if err != nil {
return nil, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error())
}
if productFamily == nil {
return nil, grmi.NewBusinessError("客户订单派生不存在, 派生ID:" + custOrder.ProductFamilyId)
return result, grmi.NewBusinessError("客户订单派生不存在, 派生ID:" + custOrder.ProductFamilyId)
}
if productFamily.Jph == 0 {
return nil, grmi.NewBusinessError("派生JPH为0 派生ID:" + custOrder.ProductFamilyId)
return result, grmi.NewBusinessError("派生JPH为0 派生ID:" + custOrder.ProductFamilyId)
}
currentMeter = int(float64(3600) / productFamily.Jph)
productFamilyMeterMap[custOrder.ProductFamilyId] = float64(3600) / productFamily.Jph
productFamilyMap[custOrder.ProductFamilyId] = productFamily
productLi, err := productFamilyRelateDao.SelectProductByFamilyId(custOrder.ProjectId, custOrder.ProductFamilyId)
if err != nil {
return nil, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error())
}
if len(productLi) == 0 {
return nil, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + custOrder.ProductFamilyId)
return result, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + custOrder.ProductFamilyId)
}
productFamilyRelateMap[custOrder.ProductFamilyId] = make(map[string]interface{}, len(productLi))
for _, product := range productLi {
@ -3172,7 +3185,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
// 2. 实际结束时间为空 实际开始时间 < 当前时间 状态 > 26 && != 98
custOrderDataLi, err := custOrderDao.SelectProduceOrder(todayStart, endTime, workLineId)
if err != nil {
return nil, grmi.NewBusinessError("查询客户订单失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询客户订单失败, 错误:" + err.Error())
}
productFamilyAccomplishMap := make(map[int]map[string]model.HourProductData)
@ -3182,20 +3195,20 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
if !exist {
productFamily, err = productFamilyDao.SelectOne(productFamilyId)
if err != nil {
return nil, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error())
}
if productFamily == nil {
return nil, grmi.NewBusinessError("客户订单中派生不存在, 派生Id:" + productFamilyId + ", 客户订单Id:" + custOrderData.CustOrder.CustOrderId)
return result, grmi.NewBusinessError("客户订单中派生不存在, 派生Id:" + productFamilyId + ", 客户订单Id:" + custOrderData.CustOrder.CustOrderId)
}
if productFamily.Jph == 0 {
return nil, grmi.NewBusinessError("派生JPH为0 派生ID:" + productFamilyId)
return result, grmi.NewBusinessError("派生JPH为0 派生ID:" + productFamilyId)
}
productLi, err := productFamilyRelateDao.SelectProductByFamilyId(custOrderData.CustOrder.ProjectId, productFamilyId)
if err != nil {
return nil, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error())
}
if len(productLi) == 0 {
return nil, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + productFamilyId)
return result, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + productFamilyId)
}
productFamilyRelateMap[productFamilyId] = make(map[string]interface{}, len(productLi))
for _, product := range productLi {
@ -3207,7 +3220,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
// 查询客户订单下的工单
serialOrderDataLi, err := serialOrderDao.SelectByCustOrderIdForDashboard(custOrderData.CustOrder.CustOrderId, todayStart, endTime)
if err != nil {
return nil, grmi.NewBusinessError("查询客户订单下工单失败, 错误:" + err.Error())
return result, grmi.NewBusinessError("查询客户订单下工单失败, 错误:" + err.Error())
}
// 记录生产每个台套下面的工单数量
syncKeyMap := make(map[string][]omModel.SerialOrder)
@ -3275,7 +3288,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
for hour, _ := range productFamilyAccomplishMap {
displayHourLi = append(displayHourLi, strconv.Itoa(hour)+"时")
}
result = &model.CutLine1{
result = model.CutLine1{
TimeLi: displayHourLi,
Standard: 1.0,
ProductFamilyMeter: currentMeter,
@ -3304,7 +3317,10 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
usedTime := impl.GetUsefulTime(currentTime, productFamilyProductData.LastDoneTime, timeModelList)
currentTime = productFamilyProductData.LastDoneTime
meter := productFamilyMeterMap[productFamilyProductData.ProductFamilyId]
percent := meter / (float64(usedTime) / float64(productFamilyProductData.Qty)) * (float64(usedTime) / float64(hourAllUsedTime))
var percent float64
if productFamilyProductData.Qty != 0 && usedTime != 0 && hourAllUsedTime != 0 {
percent = meter / (float64(usedTime) / float64(productFamilyProductData.Qty)) * (float64(usedTime) / float64(hourAllUsedTime))
}
hourPercent += percent
}
result.ProduceData = append(result.ProduceData, hourPercent)
@ -3312,6 +3328,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b
return result, nil
}
func (impl *CustOrderServiceImplement) GetUsefulTime(start, end time.Time, timeLine *list.List) int {
var duration int
for element := timeLine.Front(); element != nil; element = element.Next() {


+ 2
- 2
utils/time.go View File

@ -365,8 +365,8 @@ func GetDuration(startTime, endTime time.Time, EffFactor float64) (duration time
}
// GenerateTimeFormatForAcura 生成讴歌工单流水号中日期的格式
func GenerateTimeFormatForAcura() (dateStr string, err error) {
year, month, day := time.Now().Date()
func GenerateTimeFormatForAcura(t time.Time) (dateStr string, err error) {
year, month, day := t.Date()
YearStr, exist := YEAR_MAP[year]
if !exist {
err = errors.New("年份映射值不存在")


+ 3
- 2
web/controllers/om/SerialOrder.rest.go View File

@ -1130,7 +1130,7 @@ func RegisterDisplaySerialOrderTrace(party router.Party, path string, method fun
* @Date : 2022-01-11
*
******************************************************************************/
func RegisterCreateBatchSerialOrder(party router.Party, path string, method func(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int) error) {
func RegisterCreateBatchSerialOrder(party router.Party, path string, method func(user *global.User, productId string, projectId string, workLineId string, qty int, preSchKey int, priority int, planDate string) error) {
party.Post(path, func(ctx iris.Context) {
user, ok := jwts.ParseToken(ctx)
@ -1144,13 +1144,14 @@ func RegisterCreateBatchSerialOrder(party router.Party, path string, method func
Qty int `json:"OM_SerialOrder-Qty"`
PreSchedKey int `json:"OM_SerialOrder-PreSchedKey"`
Priority int `json:"OM_SerialOrder-Priority"`
PlanDate string `json:"OM_SerialOrder-PlanDate"`
}
var data Req
if err := ctx.ReadJSON(&data); err != nil {
supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil)
return
}
err := method(user, data.ProductId, data.ProjectId, data.WorkLineId, data.Qty, data.PreSchedKey, data.Priority)
err := method(user, data.ProductId, data.ProjectId, data.WorkLineId, data.Qty, data.PreSchedKey, data.Priority, data.PlanDate)
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil)
return


Loading…
Cancel
Save