Browse Source

Merge pull request '调整产品追溯功能为生产监控 新增新的产品追溯功能' (#102) from feature_om into develop

Reviewed-on: http://101.201.121.115:3000/leo/LAPP_LF_MOM_BACKEND/pulls/102
Reviewed-by: 徐腾飞 <tengfei.xue@le-it.com.cn>
develop
徐腾飞 3 years ago
parent
commit
cb06ff3f31
14 changed files with 776 additions and 74 deletions
  1. +10
    -4
      dao/base/implments/PrintDetail.dao.impl.go
  2. +32
    -0
      dao/om/SerialOrder.dao.go
  3. +17
    -0
      dao/om/SerialOrderPOLst.dao.go
  4. +2
    -2
      dao/om/WorkOrder.dao.go
  5. +103
    -0
      dao/om/implments/SerialOrder.dao.impl.go
  6. +98
    -0
      dao/om/implments/SerialOrderPOLst.dao.impl.go
  7. +8
    -3
      dao/om/implments/WorkOrder.dao.impl.go
  8. +13
    -0
      services/om/SerialOrder.service.go
  9. +2
    -2
      services/om/WorkOrder.service.go
  10. +367
    -37
      services/om/implments/SerialOrder.service.impl.go
  11. +52
    -22
      services/om/implments/WorkOrder.service.impl.go
  12. +66
    -0
      web/controllers/om/SerialOrder.rest.go
  13. +4
    -4
      web/controllers/om/WorkOrder.rest.go
  14. +2
    -0
      web/controllers/om/om.go

+ 10
- 4
dao/base/implments/PrintDetail.dao.impl.go View File

@ -317,8 +317,7 @@ func (impl *PrintDetailDAOImplement) SelectAndPagingForHead(artId string, sn str
meta.PrintDetail_PlantNr.ColumnName,
meta.PrintHead_PrintHeadId.ColumnName,
meta.PrintDetail_PrintHeadId.ColumnName)
session := impl.session.Table(impl.meta.TableName).Join("LEFT", meta.PrintHead.TableName, condition)
query := session
query := impl.session.Table(impl.meta.TableName).Join("LEFT", meta.PrintHead.TableName, condition)
query = query.Where(where, parameters...)
if artId != "" {
query = query.Where(fmt.Sprintf("%s = ? and %s = ?",
@ -342,13 +341,20 @@ func (impl *PrintDetailDAOImplement) SelectAndPagingForHead(artId string, sn str
if err != nil {
return grmi.EmptyPagingResult, err
}
orderBy := " order by " + meta.PrintDetail_PlantNr.ColumnName
orderBy := " order by " + meta.PrintHead_PlantNr.ColumnName + " ," + meta.PrintHead_LastModify.ColumnName + " desc , " + meta.PrintDetail_PrintHeadId.ColumnName + " desc"
parameters = append(parameters, pageSize*(pageIndex-1), pageSize)
data := make([]model.PrintHead, 0, 10)
if where != "" {
where = " where " + where
}
err = impl.session.Table(impl.meta.TableName).SQL("select * from "+impl.meta.TableName+where+orderBy+" offset ? row fetch next ? row only", parameters...).Find(&data)
joinCondition := fmt.Sprintf(" left join %s on %s = %s and %s = %s ",
meta.PrintHead.TableName,
meta.PrintHead_PlantNr.ColumnName,
meta.PrintDetail_PlantNr.ColumnName,
meta.PrintHead_PrintHeadId.ColumnName,
meta.PrintDetail_PrintHeadId.ColumnName,
)
err = impl.session.Table(impl.meta.TableName).SQL("select * from "+impl.meta.TableName+joinCondition+where+orderBy+" offset ? row fetch next ? row only", parameters...).Find(&data)
if err != nil {
return grmi.EmptyPagingResult, err
}


+ 32
- 0
dao/om/SerialOrder.dao.go View File

@ -364,6 +364,38 @@ type SerialOrderDAO interface {
*
******************************************************************************/
GetSerialOrderByIDLi(serialOrderIdLi []string) (result *[]model.VOmSerialorder, err error)
/******************************************************************************
*
* @Function Name : GetDefaultDisplay
*-----------------------------------------------------------------------------
*
* @Description : 通过serialOrderIdLi查询serialOrder
*
* @Function Parameters : serialOrderIdLi []string
*
* @Return Value : 查找到的SerialOrder
*
* @Return Value : 执行时发生的错误
*
* @Author : zhangxin
*
* @Date : 2021-09-26
*
******************************************************************************/
GetDefaultDisplay(workLineId string) (serialOrderIdLi []string, err error)
/******************************************************************************
*
* @Function Name : GetDisplaySerialOrder
*-----------------------------------------------------------------------------
*
* @Description : 查询数据追溯展示的serialOrder
*
* @Author : zhangxin
*
* @Date : 2021-09-26
*
******************************************************************************/
GetDisplaySerialOrder(workOrderId string, status int, workLineId string, date string, serialOrderId string, pageSize int64, pageNumber int64) (serialOrderIdLi []string, count int64, err error)
}
/******************************************************************************


+ 17
- 0
dao/om/SerialOrderPOLst.dao.go View File

@ -246,6 +246,23 @@ type SerialOrderPOLstDAO interface {
*
******************************************************************************/
SelectDisplaySerialOrder(workLineId string, workOrderId string, serialOrderId string, date string, status int) ([]model.SerialOrderPOData, error)
/******************************************************************************
*
* @Function Name : SelectDefaultDisplaySerialOrder
*-----------------------------------------------------------------------------
*
* @Description : 查询展示的serialOrder相关数据
*
* @Return Value : 查找到的SerialOrder相关数据
*
* @Return Value : 执行时发生的错误
*
* @Author : zhangxin
*
* @Date : 2021-10-08
*
******************************************************************************/
SelectDefaultDisplaySerialOrder(IdLi []string) ([]model.SerialOrderPOData, error)
/******************************************************************************
*
* @Function Name : GetSerialOrderPOData


+ 2
- 2
dao/om/WorkOrder.dao.go View File

@ -369,7 +369,7 @@ type WorkOrderDAO interface {
SelectByPage(string, string, string, string, string, string, int, int, int, []string) (grmi.PagingResult, error)
/******************************************************************************
*
* @Function Name : SelectByPage
* @Function Name : SelectAndFilter
*-----------------------------------------------------------------------------
*
* @Description : 按条件查询WorkOrderJoin
@ -383,7 +383,7 @@ type WorkOrderDAO interface {
* @Date : 2021-04-27
*
******************************************************************************/
SelectAndFilter(string, string, string, string, string, string, int, int, int, []string) (grmi.PagingResult, error)
SelectAndFilter(string, string, string, string, string, string, int, int, int, []string, string) (grmi.PagingResult, error)
/******************************************************************************
*
* @Function Name : SelectLockWorkOrder


+ 103
- 0
dao/om/implments/SerialOrder.dao.impl.go View File

@ -485,3 +485,106 @@ func (impl *SerialOrderDAOImplement) GetSerialOrderByIDLi(serialOrderIdLi []stri
return &data, nil
}
/******************************************************************************
*
* @Reference LAPP_LF_MOM_BACKEND/dao/om/SerialOrderDAO.GetDefaultDisplay
*
******************************************************************************/
func (impl *SerialOrderDAOImplement) GetDefaultDisplay(workLineId string) (serialOrderIdLi []string, err error) {
li := make([]string, 0)
firstRes := make([]model.VOmSerialorder, 0, 10)
secondRes := make([]model.VOmSerialorder, 0, 40)
condition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderStatus_PlantNr.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName,
meta.SerialOrderStatus_SerialOrderId.ColumnName)
firstWhere := fmt.Sprintf("%s = ? and %s = ? and ( %s = ? or %s = ?)",
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrder_UsedResourceId.ColumnName,
meta.SerialOrderStatus_Status.ColumnName,
meta.SerialOrderStatus_Status.ColumnName)
firstParameters := []interface{}{impl.plantNr, workLineId, common.WO_STATUS_FINISHED, common.WO_STATUS_CANCELED}
err = impl.session.Table(impl.meta.TableName).Join("LEFT", meta.SerialOrderStatus.TableName, condition).Where(firstWhere, firstParameters...).Desc(meta.SerialOrder_CreateTime.ColumnName).Limit(10).Find(&firstRes)
if err != nil {
return nil, err
}
secondWhere := fmt.Sprintf("%s = ? and %s = ? and %s < ?", meta.SerialOrder_PlantNr.ColumnName, meta.SerialOrder_UsedResourceId.ColumnName, meta.SerialOrderStatus_Status.ColumnName)
secondParameters := []interface{}{impl.plantNr, workLineId, common.WO_STATUS_FINISHED}
err = impl.session.Table(impl.meta.TableName).Join("LEFT", meta.SerialOrderStatus.TableName, condition).Where(secondWhere, secondParameters...).Desc(meta.SerialOrder_CreateTime.ColumnName).Limit(40).Find(&secondRes)
if err != nil {
return nil, err
}
for _, data := range firstRes {
li = append(li, data.SerialOrder.SerialOrderId)
}
for _, data := range secondRes {
li = append(li, data.SerialOrder.SerialOrderId)
}
return li, nil
}
/******************************************************************************
*
* @Reference LAPP_LF_MOM_BACKEND/dao/om/SerialOrderDAO.GetDisplaySerialOrder
*
******************************************************************************/
func (impl *SerialOrderDAOImplement) GetDisplaySerialOrder(workOrderId string, status int, workLineId string, date string, serialOrderId string, pageSize int64, pageNumber int64) (serialOrderIdLi []string, count int64, err error) {
data := make([]model.SerialOrder, 0, 10)
condition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderStatus_PlantNr.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName,
meta.SerialOrderStatus_SerialOrderId.ColumnName)
joinCondition := fmt.Sprintf(" left join %s on %s = %s and %s = %s ",
meta.SerialOrderStatus.TableName,
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderStatus_PlantNr.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName,
meta.SerialOrderStatus_SerialOrderId.ColumnName)
query := impl.session.Table(impl.meta.TableName).Join("LEFT", meta.SerialOrderStatus.TableName, condition).Where(fmt.Sprintf(" %s = ? ", meta.SerialOrder_PlantNr.ColumnName), impl.plantNr)
where := fmt.Sprintf(" where %s = ? ",
meta.SerialOrder_PlantNr.ColumnName)
parameters := []interface{}{impl.plantNr}
if workOrderId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_WorkOrderId.ColumnName)
parameters = append(parameters, workOrderId)
query = query.Where(fmt.Sprintf("%s = ?", meta.SerialOrder_WorkOrderId.ColumnName), workOrderId)
}
if status != 0 {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrderStatus_Status.ColumnName)
parameters = append(parameters, status)
query = query.Where(fmt.Sprintf("%s = ?", meta.SerialOrderStatus_Status.ColumnName), status)
}
if workLineId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_UsedResourceId.ColumnName)
parameters = append(parameters, workLineId)
query = query.Where(fmt.Sprintf("%s = ?", meta.SerialOrder_UsedResourceId.ColumnName), workLineId)
}
if date != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_PlanStartDate.ColumnName)
parameters = append(parameters, date)
query = query.Where(fmt.Sprintf("%s = ?", meta.SerialOrder_PlanStartDate.ColumnName), date)
}
if serialOrderId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_SerialOrderId.ColumnName)
parameters = append(parameters, serialOrderId)
query = query.Where(fmt.Sprintf("%s = ?", meta.SerialOrder_SerialOrderId.ColumnName), serialOrderId)
}
count, err = query.Count(impl.meta.Indicator)
if err != nil {
return nil, 0, err
}
parameters = append(parameters, pageSize*(pageNumber-1), pageSize)
orderBy := " order by " + meta.SerialOrder_PlantNr.ColumnName + ", " + meta.SerialOrder_CreateTime.ColumnName + " desc "
err = impl.session.SQL("select * from "+meta.SerialOrder.TableName+joinCondition+where+orderBy+" offset ? row fetch next ? row only ", parameters...).Find(&data)
if err != nil {
return nil, 0, err
}
serialOrderIdLi = make([]string, 0, len(data))
for _, serialOrder := range data {
serialOrderIdLi = append(serialOrderIdLi, serialOrder.SerialOrderId)
}
return serialOrderIdLi, count, nil
}

+ 98
- 0
dao/om/implments/SerialOrderPOLst.dao.impl.go View File

@ -383,4 +383,102 @@ func (impl *SerialOrderPOLstDAOImplement) GetSerialOrderPOData(serialOrderId str
err := session.Where(where, parameters...).Asc(meta.SerialOrderPOLst_PO.ColumnName).Find(&result)
return &result, err
}
/******************************************************************************
*
* @Reference LAPP_LF_MOM_BACKEND/dao/om/SerialOrderDAO.SelectDefaultDisplaySerialOrder
*
******************************************************************************/
func (impl *SerialOrderPOLstDAOImplement) SelectDefaultDisplaySerialOrder(idLi []string) ([]model.SerialOrderPOData, error) {
result := make([]model.SerialOrderPOData, 0, 50)
session := impl.session.Table(impl.meta.TableName)
orderCondition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrderPOLst_PlantNr.ColumnName,
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderPOLst_SerialOrderId.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName)
condition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderStatus_PlantNr.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName,
meta.SerialOrderStatus_SerialOrderId.ColumnName)
processCondition := fmt.Sprintf("%s = %s and %s = %s and %s = %s",
meta.SerialOrderPOLst_PlantNr.ColumnName,
baseMeta.Process_PlantNr.ColumnName,
meta.SerialOrderPOLst_PO.ColumnName,
baseMeta.Process_PO.ColumnName,
meta.SerialOrder_UsedResourceId.ColumnName,
baseMeta.Process_WorkLineId.ColumnName)
where := fmt.Sprintf("%s = ? ", meta.SerialOrder_PlantNr.ColumnName)
inStr := fmt.Sprintf(" and %s in ( ", meta.SerialOrder_SerialOrderId.ColumnName)
for index, serialOrderId := range idLi {
if index != 0 {
inStr += ", "
}
inStr += fmt.Sprintf(`'%s'`, serialOrderId)
}
inStr += ") "
where += inStr
parameters := []interface{}{impl.plantNr}
session = session.Join("LEFT", meta.SerialOrder.TableName, orderCondition).Join("LEFT", meta.SerialOrderStatus.TableName, condition).Join("LEFT", baseMeta.Process.TableName, processCondition)
err := session.Where(where, parameters...).Desc(meta.SerialOrder_CreateTime.ColumnName).Desc(meta.SerialOrder_SerialOrderId.ColumnName).Asc(baseMeta.Process_PO.ColumnName).Find(&result)
return result, err
}
/******************************************************************************
*
* @Reference LAPP_LF_MOM_BACKEND/dao/om/SerialOrderDAO.SelectDisplaySerialOrder
*
******************************************************************************/
func (impl *SerialOrderPOLstDAOImplement) SelectDisplaySerialOrderPage(workLineId string, workOrderId string, serialOrderId string, date string, status int) ([]model.SerialOrderPOData, error) {
result := make([]model.SerialOrderPOData, 0)
session := impl.session.Table(impl.meta.TableName)
orderCondition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrderPOLst_PlantNr.ColumnName,
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderPOLst_SerialOrderId.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName)
condition := fmt.Sprintf("%s = %s and %s = %s",
meta.SerialOrder_PlantNr.ColumnName,
meta.SerialOrderStatus_PlantNr.ColumnName,
meta.SerialOrder_SerialOrderId.ColumnName,
meta.SerialOrderStatus_SerialOrderId.ColumnName)
processCondition := fmt.Sprintf("%s = %s and %s = %s and %s = %s",
meta.SerialOrderPOLst_PlantNr.ColumnName,
baseMeta.Process_PlantNr.ColumnName,
meta.SerialOrderPOLst_PO.ColumnName,
baseMeta.Process_PO.ColumnName,
meta.SerialOrder_UsedResourceId.ColumnName,
baseMeta.Process_WorkLineId.ColumnName)
parameters := []interface{}{impl.plantNr}
where := fmt.Sprintf("%s = ?", meta.SerialOrder_PlantNr.ColumnName)
if workLineId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_UsedResourceId.ColumnName)
parameters = append(parameters, workLineId)
}
if workOrderId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrder_WorkOrderId.ColumnName)
parameters = append(parameters, workOrderId)
}
if serialOrderId != "" {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrderPOLst_SerialOrderId.ColumnName)
parameters = append(parameters, serialOrderId)
}
if status != 0 {
where += fmt.Sprintf(" and %s = ? ", meta.SerialOrderStatus_Status.ColumnName)
parameters = append(parameters, status)
}
if date != "" {
start := date + " 00:00:00"
end := date + " 23:59:59"
where += fmt.Sprintf(" and %s >= ? and %s <= ? ", meta.SerialOrder_ActStartTime.ColumnName, meta.SerialOrder_ActStartTime.ColumnName)
parameters = append(parameters, start, end)
}
err := session.Join("LEFT", meta.SerialOrder.TableName, orderCondition).Join("LEFT", meta.SerialOrderStatus.TableName, condition).Join("LEFT", baseMeta.Process.TableName, processCondition).Where(where, parameters...).Asc(meta.SerialOrder_SerialId.ColumnName).Asc(baseMeta.Process_PO.ColumnName).Find(&result)
return result, err
}

+ 8
- 3
dao/om/implments/WorkOrder.dao.impl.go View File

@ -595,7 +595,7 @@ func (impl *WorkOrderDAOImplement) SelectByPage(projectId, artId, start, end, wo
* @Reference LAPP_LF_MOM_BACKEND/dao/om/WorkOrderDAO.SelectAndFilter
*
******************************************************************************/
func (impl *WorkOrderDAOImplement) SelectAndFilter(projectId, artId, start, end, workOrderId, orderType string, status, pageIndex, pageSize int, workLineIdLi []string) (grmi.PagingResult, error) {
func (impl *WorkOrderDAOImplement) SelectAndFilter(projectId, artId, start, end, workOrderId, orderType string, status, pageIndex, pageSize int, workLineIdLi []string, sort string) (grmi.PagingResult, error) {
data := make([]model.VOmWorkorder, 0, 10)
parameters := []interface{}{impl.plantNr}
session := impl.session.Table(impl.meta.TableName)
@ -652,7 +652,7 @@ func (impl *WorkOrderDAOImplement) SelectAndFilter(projectId, artId, start, end,
where += fmt.Sprintf(" and %s = ? ", meta.WorkOrder_OrderType.ColumnName)
}
today := time.Now().Format(grmi.DateOutFormat)
query = query.Where( fmt.Sprintf(" (%s >= ?) or (%s < ? and %s <= ?) ",
query = query.Where( fmt.Sprintf(" (%s >= ?) or (%s < ? and %s < ?) ",
meta.WorkOrder_PlanStartDate.ColumnName,
meta.WorkOrder_PlanStartDate.ColumnName,
meta.WorkOrderStatus_Status.ColumnName), today, today, common.WO_STATUS_FINISHED)
@ -679,7 +679,12 @@ func (impl *WorkOrderDAOImplement) SelectAndFilter(projectId, artId, start, end,
if err != nil {
return grmi.EmptyPagingResult, err
}
orderBy := " order by " + meta.WorkOrder_PlantNr.ColumnName + ", " + meta.WorkOrder_WorkOrderId.ColumnName
var orderBy string
if sort == "true" {
orderBy = " order by " + meta.WorkOrder_PlantNr.ColumnName + ", " + meta.WorkOrder_CreateTime.ColumnName + " asc "
} else {
orderBy = " order by " + meta.WorkOrder_PlantNr.ColumnName + ", " + meta.WorkOrder_CreateTime.ColumnName + " desc "
}
parameters = append(parameters, (pageIndex-1)*pageSize, pageSize)
err = session.SQL(fmt.Sprintf("select %s.*,%s.*,%s.* from ", meta.WorkOrder.TableName, meta.WorkOrderStatus.TableName, meta.WorkOrderQty.TableName)+impl.meta.TableName+where+orderBy+" offset ? row fetch next ? row only", parameters...).Find(&data)
if err != nil {


+ 13
- 0
services/om/SerialOrder.service.go View File

@ -235,6 +235,19 @@ type SerialOrderService interface {
*
******************************************************************************/
ExportSerialOrderTraceData(user *models.Usertab, workOrderId string, status int, workLineId string, date string, serialOrderId string, NGCode string, repair bool) (filepath string, err error)
/******************************************************************************
*
* @Function Name : GetSerialOrderOPTraceWithDetail
*-----------------------------------------------------------------------------
*
* @Description : 查询数据追溯中展示的数据
*
* @Author : zhangxin
*
* @Date : 2021-09-16
*
******************************************************************************/
GetSerialOrderOPTraceWithDetail(user *models.Usertab, workOrderId string, status int, workLineId string, date string, serialOrderId string, NGCode string, repair bool, pageSize int64, pageNumber int64) (interface{}, error)
}
/******************************************************************************


+ 2
- 2
services/om/WorkOrder.service.go View File

@ -359,7 +359,7 @@ type WorkOrderService interface {
*
* @Function Parameters : 当前访问人员信息
*
* @Function Parameters : serialOrderIdLi
* @Function Parameters : serialOrderMap
*
* @Return Value : 执行时发生的错误
*
@ -368,7 +368,7 @@ type WorkOrderService interface {
* @Date : 2021-09-26
*
******************************************************************************/
CancelUnCompletedSerialOrder(user *models.Usertab, serialOrderIdLi []string) error
CancelUnCompletedSerialOrder(user *models.Usertab, serialOrderMap map[string]int) error
}
/******************************************************************************


+ 367
- 37
services/om/implments/SerialOrder.service.impl.go View File

@ -288,13 +288,13 @@ func (impl *SerialOrderServiceImplement) Select(user *models.Usertab, urlParamet
}
dao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid)
if condition.Fill(urlParameters) {
result, err := dao.SelectAndPaging(condition.Paging, predicates, condition.OrderByFields)
result, err := dao.SelectAndPaging(condition.Paging, predicates, []grmi.Field{meta.SerialOrder_SerialId})
if err != nil {
return nil, err
}
return result, nil
} else {
result, err := dao.Select(predicates, condition.OrderByFields)
result, err := dao.Select(predicates, []grmi.Field{meta.SerialOrder_SerialId})
if err != nil {
return nil, err
}
@ -513,9 +513,11 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderOPTrace(user *models.User
session := engine.NewSession()
defer session.Close()
dao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid)
serialOrderDao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid)
poStatusRecDao := dal.NewSerialOrderPOStatusRecLstDAO(session, user.Pid, user.Userid)
roleRelDao := baseDal.NewRoleRelDAO(session, user.Pid, user.Userid)
ngDao := baseDal.NewPrintInfoCreateRecordDAO(session, user.Pid, user.Userid)
workOrderDao := dal.NewWorkOrderDAO(session, user.Pid, user.Userid)
// 如果查询NG条码 则去NG表中查询serialOrderId
if NGCode != "" {
ngDataLi, err := ngDao.Select([]grmi.Predicate{baseMeta.PrintInfoCreateRecord_CreateId.NewPredicate(grmi.Equal, NGCode)}, nil)
if err != nil {
@ -526,43 +528,79 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderOPTrace(user *models.User
}
serialOrderId = ngDataLi[0].SerialOrderId
}
// 如果查询返修 则查询状态为39的工单
if repair {
status = baseModel.WO_STATUS_INTERRUPT
}
var serialOrderDataLi []model.SerialOrderPOData
var err error
if workOrderId == "" && workLineId == "" && date == "" && serialOrderId == "" && NGCode == "" && status == 0 && !repair {
workOrder, err := workOrderDao.SelectRunningWorkOrder()
relLi, err := roleRelDao.Select([]grmi.Predicate{baseMeta.RoleRel_RoleId.NewPredicate(grmi.Equal, user.RoleId)}, []grmi.Field{baseMeta.RoleRel_WorkLineid})
if err != nil {
return nil, grmi.NewBusinessError("查询默认的workOrder失败, error:" + err.Error())
return nil, grmi.NewBusinessError("查询角色绑定产线失败, error:" + err.Error())
}
if workOrder == nil {
return nil, grmi.NewBusinessError("未查询到有效的批次工单")
if len(relLi) == 0 {
return nil, grmi.NewBusinessError("角色未关联产线, error:" + err.Error())
}
workLineId := relLi[0].WorkLineid
// 如果查询条件都为空 则按CreateTime降序排列 查询10条80 或者98的数据 + 40条80一下的数据
orderIdLi, err := serialOrderDao.GetDefaultDisplay(workLineId)
if err != nil {
return nil, grmi.NewBusinessError("查询默认展示工单数据失败, error:" + err.Error())
}
if len(orderIdLi) == 0 {
return nil, grmi.NewBusinessError("角色关联的产线未查询到工单")
}
serialOrderDataLi, err = dao.SelectDefaultDisplaySerialOrder(orderIdLi)
if err != nil {
return nil, grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
} else {
serialOrderDataLi, err = dao.SelectDisplaySerialOrder(workLineId, workOrderId, serialOrderId, date, status)
if err != nil {
return nil, grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
workOrderId = workOrder.WorkOrder.WorkOrderId
}
serialOrderDataLi, err := dao.SelectDisplaySerialOrder(workLineId, workOrderId, serialOrderId, date, status)
if err != nil {
return nil, grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
// 构建响应数据
// 标题头
titleLi := make([]string, 0)
poTitleLi := make([]int, 0)
type POData struct {
PO int `json:"po"`
StartTime string `json:"startTime"`
Status int `json:"status"`
}
// 临时行行数据
type SerialOrderPOData struct {
SerialOrderId string `json:"serialOrderId"`
POMap map[int]POData `json:"poMap"`
}
type SerialOrderPOLiData struct {
SerialOrderId string `json:"serialOrderId"`
POLi []POData `json:"poLi"`
}
type Result struct {
TitleLi []string `json:"titleLi"`
Data []SerialOrderPOData `json:"data"`
TitleLi []string `json:"titleLi"`
Data []SerialOrderPOLiData `json:"data"`
}
serialOrderLi := make([]SerialOrderPOData, 0)
var currentSerialOrderId string
POMap := make(map[string]interface{})
// 组织工序标题头部数据
for _, serialOrderData := range serialOrderDataLi {
_, exist := POMap[serialOrderData.Process.Name]
if !exist {
POMap[serialOrderData.Process.Name] = nil
titleLi = append(titleLi, serialOrderData.Process.Name)
poTitleLi = append(poTitleLi, serialOrderData.Process.PO)
}
}
//var poStatusRecLi []model.SerialOrderPOStatusRecLst
var poStatusRecMap map[int][]model.SerialOrderPOStatusRecLst
// 遍历工单工序数据
for _, serialOrderData := range serialOrderDataLi {
// 查询serialOrderId下的所有操作数据
if currentSerialOrderId == "" {
currentSerialOrderId = serialOrderData.SerialOrder.SerialOrderId
poStatusRecLi, err := poStatusRecDao.Select([]grmi.Predicate{meta.SerialOrderPOStatusRecLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrderData.SerialOrder.SerialOrderId), meta.SerialOrderPOStatusRecLst_Status.NewPredicate(grmi.Equal, baseModel.ORDER_STATUS_RUNNING)}, []grmi.Field{meta.SerialOrderPOStatusRecLst_Pos})
@ -593,11 +631,12 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderOPTrace(user *models.User
poStatusRecMap[statusRec.PO] = append(poStatusRecMap[statusRec.PO], statusRec)
}
}
_, exist := POMap[serialOrderData.Process.Name]
if !exist {
POMap[serialOrderData.Process.Name] = nil
titleLi = append(titleLi, serialOrderData.Process.Name)
}
//_, exist := POMap[serialOrderData.Process.Name]
//if !exist {
// POMap[serialOrderData.Process.Name] = nil
// titleLi = append(titleLi, serialOrderData.Process.Name)
//}
var startTime string
li, exist := poStatusRecMap[serialOrderData.SerialOrderPOLst.PO]
@ -608,6 +647,7 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderOPTrace(user *models.User
}
poData := POData{
PO: serialOrderData.Process.PO,
StartTime: startTime,
Status: serialOrderData.SerialOrderStatus.Status,
}
@ -615,28 +655,47 @@ func (impl *SerialOrderServiceImplement) GetSerialOrderOPTrace(user *models.User
serialOrderPOData := SerialOrderPOData{
SerialOrderId: serialOrderData.SerialOrder.SerialOrderId,
}
serialOrderPOData.POLi = make([]POData, 0)
serialOrderPOData.POLi = append(serialOrderPOData.POLi, poData)
serialOrderPOData.POMap = make(map[int]POData)
serialOrderPOData.POMap[poData.PO] = poData
serialOrderLi = append(serialOrderLi, serialOrderPOData)
} else {
lastData := serialOrderLi[len(serialOrderLi)-1]
if lastData.SerialOrderId == serialOrderData.SerialOrder.SerialOrderId {
lastData.POLi = append(lastData.POLi, poData)
lastData.POMap[poData.PO] = poData
serialOrderLi[len(serialOrderLi)-1] = lastData
} else {
serialOrderPOData := SerialOrderPOData{
SerialOrderId: serialOrderData.SerialOrder.SerialOrderId,
}
serialOrderPOData.POLi = make([]POData, 0)
serialOrderPOData.POLi = append(serialOrderPOData.POLi, poData)
serialOrderPOData.POMap = make(map[int]POData, 0)
serialOrderPOData.POMap[poData.PO] = poData
serialOrderLi = append(serialOrderLi, serialOrderPOData)
}
}
}
dealLi := make([]SerialOrderPOLiData, 0, len(serialOrderLi))
// 组建最后的响应体 不同产线不同工序的问题
for _, data := range serialOrderLi {
var poData SerialOrderPOLiData
poData.SerialOrderId = data.SerialOrderId
poData.POLi = make([]POData, 0, len(data.POMap))
for _, poTitle := range poTitleLi {
innerPo, exist := data.POMap[poTitle]
if !exist {
innerPo = POData{
PO: poTitle,
Status: 0,
}
}
poData.POLi = append(poData.POLi, innerPo)
}
dealLi = append(dealLi, poData)
}
result := &Result{
TitleLi: titleLi,
Data: serialOrderLi,
Data: dealLi,
}
return result, nil
@ -728,7 +787,7 @@ func (impl SerialOrderServiceImplement) ExportSerialOrderTraceData(user *models.
opTraceTitle := []string{
"工单总成",
"工单批次号",
"工单SerialID",
"序列工单ID",
"工序",
"执行工位",
"数据描述",
@ -740,8 +799,9 @@ func (impl SerialOrderServiceImplement) ExportSerialOrderTraceData(user *models.
dao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid)
ngDao := baseDal.NewPrintInfoCreateRecordDAO(session, user.Pid, user.Userid)
opDao := dal.NewSerialOrderOPDetailRecvDataLstDAO(session, user.Pid, user.Userid)
workOrderDao := dal.NewWorkOrderDAO(session, user.Pid, user.Userid)
serialOrderDao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid)
workPlaceDao := baseDal.NewWorkPlaceDAO(session, user.Pid, user.Userid)
roleRelDao := baseDal.NewRoleRelDAO(session, user.Pid, user.Userid)
if NGCode != "" {
ngDataLi, err := ngDao.Select([]grmi.Predicate{baseMeta.PrintInfoCreateRecord_CreateId.NewPredicate(grmi.Equal, NGCode)}, nil)
if err != nil {
@ -755,19 +815,34 @@ func (impl SerialOrderServiceImplement) ExportSerialOrderTraceData(user *models.
if repair {
status = baseModel.WO_STATUS_INTERRUPT
}
var serialOrderDataLi []model.SerialOrderPOData
if workOrderId == "" && workLineId == "" && date == "" && serialOrderId == "" && NGCode == "" && status == 0 && !repair {
workOrder, err := workOrderDao.SelectRunningWorkOrder()
relLi, err := roleRelDao.Select([]grmi.Predicate{baseMeta.RoleRel_RoleId.NewPredicate(grmi.Equal, user.RoleId)}, []grmi.Field{baseMeta.RoleRel_WorkLineid})
if err != nil {
return "", grmi.NewBusinessError("查询默认的workOrder失败, error:" + err.Error())
return "", grmi.NewBusinessError("查询角色绑定产线失败, error:" + err.Error())
}
if workOrder == nil {
return "", grmi.NewBusinessError("未查询到有效的批次工单")
if len(relLi) == 0 {
return "", grmi.NewBusinessError("角色未关联产线, error:" + err.Error())
}
workLineId := relLi[0].WorkLineid
// 如果查询条件都为空 则按CreateTime降序排列 查询10条80 或者98的数据 + 40条80一下的数据
orderIdLi, err := serialOrderDao.GetDefaultDisplay(workLineId)
if err != nil {
return "", grmi.NewBusinessError("查询默认展示工单数据失败, error:" + err.Error())
}
if len(orderIdLi) == 0 {
return "", grmi.NewBusinessError("角色关联的产线未查询到工单")
}
serialOrderDataLi, err = dao.SelectDefaultDisplaySerialOrder(orderIdLi)
if err != nil {
return "", grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
} else {
serialOrderDataLi, err = dao.SelectDisplaySerialOrder(workLineId, workOrderId, serialOrderId, date, status)
if err != nil {
return "", grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
workOrderId = workOrder.WorkOrder.WorkOrderId
}
serialOrderDataLi, err := dao.SelectDisplaySerialOrder(workLineId, workOrderId, serialOrderId, date, status)
if err != nil {
return "", grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
traceDataLi := make([]interface{}, 0)
serialOrderIdMap := make(map[string]interface{})
@ -840,3 +915,258 @@ func (impl SerialOrderServiceImplement) ExportSerialOrderTraceData(user *models.
}
return grmi.SaveExcelFile(traceDataLi, opTraceTitle, "Sheet1", "数据追溯")
}
/******************************************************************************
*
* @Reference LAPP_LF_MOM_BACKEND/services/om/SerialOrderService.GetSerialOrderOPTraceWithDetail
*
******************************************************************************/
func (impl *SerialOrderServiceImplement) GetSerialOrderOPTraceWithDetail(user *models.Usertab, workOrderId string, status int, workLineId string, date string, serialOrderId string, NGCode string, repair bool, pageSize int64, pageNumber int64) (interface{}, error) {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid)
opDao := dal.NewSerialOrderOPDetailRecvDataLstDAO(session, user.Pid, user.Userid)
workPlaceDao := baseDal.NewWorkPlaceDAO(session, user.Pid, user.Userid)
serialOrderDao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid)
poStatusRecDao := dal.NewSerialOrderPOStatusRecLstDAO(session, user.Pid, user.Userid)
ngDao := baseDal.NewPrintInfoCreateRecordDAO(session, user.Pid, user.Userid)
// 如果查询NG条码 则去NG表中查询serialOrderId
if NGCode != "" {
ngDataLi, err := ngDao.Select([]grmi.Predicate{baseMeta.PrintInfoCreateRecord_CreateId.NewPredicate(grmi.Equal, NGCode)}, nil)
if err != nil {
return nil, grmi.NewBusinessError("查询NG条码失败, error:" + err.Error())
}
if len(ngDataLi) == 0 {
return nil, grmi.NewBusinessError("未查询到该NG条码数据")
}
serialOrderId = ngDataLi[0].SerialOrderId
}
// 如果查询返修 则查询状态为39的工单
if repair {
status = baseModel.WO_STATUS_INTERRUPT
}
serialOrderIdLi, count, err := serialOrderDao.GetDisplaySerialOrder(workOrderId, status, workLineId, date, serialOrderId, pageSize, pageNumber)
if err != nil {
return nil, grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
traceMap := make(map[string][]model.SerialOrderOPTrace)
workPlaceNrMap := make(map[int]interface{})
workPlaceNrLi := make([]interface{}, 0)
workPlaceMap := make(map[int]string)
for _, serialOrderId := range serialOrderIdLi {
traceLi := make([]model.SerialOrderOPTrace, 0)
opLi, err := opDao.SelectOPDetailData(serialOrderId, 0, 0)
if err != nil {
return nil, grmi.NewBusinessError("查询工艺操作数据失败, error:" + err.Error())
}
for _, op := range opLi {
_, exist := workPlaceNrMap[op.SerialOrderOPDetailRecvDataLst.WorkPlaceNr]
if !exist {
workPlaceNrMap[op.SerialOrderOPDetailRecvDataLst.WorkPlaceNr] = nil
workPlaceNrLi = append(workPlaceNrLi, op.SerialOrderOPDetailRecvDataLst.WorkPlaceNr)
}
}
workPlaceLi, err := workPlaceDao.Select([]grmi.Predicate{baseMeta.WorkPlace_WorkPlaceNr.NewPredicate(grmi.Include, workPlaceNrLi...)}, nil)
if err != nil {
return nil, grmi.NewBusinessError("查询工位数据失败, error:" + err.Error())
}
for _, workPlace := range workPlaceLi {
workPlaceMap[workPlace.WorkPlaceNr] = workPlace.WorkPlaceId
}
for _, op := range opLi {
if op.SerialOrderOPDetailRecvDataLst.StepType == baseModel.STEP_GUIDE_RULE {
continue
}
if op.SerialOrderOPDetailRecvDataLst.StepType == baseModel.STEP_OPC_RULE && (op.OPCComRule.ActionType == baseModel.ACTION_TYPE_VERIFY || op.OPCComRule.ActionType == baseModel.ACTION_TYPE_WRITE) {
continue
}
var stepDesc string
if op.SerialOrderOPDetail.StepType == baseModel.STEP_OPC_RULE {
stepDesc = op.OPCComRule.OPCDesc
} else {
stepDesc = op.Operation.StepDesc
}
var status string
if op.SerialOrderOPDetailRecvDataLst.Status == 1 {
status = "是"
} else {
status = "否"
}
workPlaceId := workPlaceMap[op.SerialOrderOPDetailRecvDataLst.WorkPlaceNr]
trace := model.SerialOrderOPTrace{
ArtId: op.SerialOrder.ArtId,
WorkOrderId: op.SerialOrder.WorkOrderId,
SerialOrderId: op.SerialOrderOPDetailRecvDataLst.SerialOrderId,
PO: op.SerialOrderOPDetailRecvDataLst.PO,
WorkPlaceId: workPlaceId,
StepDesc: stepDesc,
RecvData: op.SerialOrderOPDetailRecvDataLst.RecvData,
Status: status,
ExecuteTime: op.SerialOrderOPDetailRecvDataLst.CreateTime.ToString(),
}
if status != "是" {
trace.Remark1 = op.SerialOrderOPDetailRecvDataLst.Remark1
}
traceLi = append(traceLi, trace)
}
traceMap[serialOrderId] = traceLi
}
serialOrderDataLi, err := dao.SelectDefaultDisplaySerialOrder(serialOrderIdLi)
if err != nil {
return nil, grmi.NewBusinessError("查询工单数据失败, error:" + err.Error())
}
// 构建响应数据
// 标题头
titleLi := make([]string, 0)
poTitleLi := make([]int, 0)
type POData struct {
PO int `json:"po"`
StartTime string `json:"startTime"`
Status int `json:"status"`
OPDetailLi []model.SerialOrderOPTrace `json:"oPDetailLi"`
}
// 临时行行数据
type SerialOrderPOData struct {
SerialOrderId string `json:"serialOrderId"`
POMap map[int]POData `json:"poMap"`
}
type SerialOrderPOLiData struct {
SerialOrderId string `json:"serialOrderId"`
POLi []POData `json:"poLi"`
}
type Result struct {
TitleLi []string `json:"titleLi"`
Data []SerialOrderPOLiData `json:"data"`
}
serialOrderLi := make([]SerialOrderPOData, 0)
var currentSerialOrderId string
POMap := make(map[string]interface{})
// 组织工序标题头部数据
for _, serialOrderData := range serialOrderDataLi {
_, exist := POMap[serialOrderData.Process.Name]
if !exist {
POMap[serialOrderData.Process.Name] = nil
titleLi = append(titleLi, serialOrderData.Process.Name)
poTitleLi = append(poTitleLi, serialOrderData.Process.PO)
}
}
var poStatusRecMap map[int][]model.SerialOrderPOStatusRecLst
// 遍历工单工序数据
for _, serialOrderData := range serialOrderDataLi {
// 查询serialOrderId下的所有操作数据
if currentSerialOrderId == "" {
currentSerialOrderId = serialOrderData.SerialOrder.SerialOrderId
poStatusRecLi, err := poStatusRecDao.Select([]grmi.Predicate{meta.SerialOrderPOStatusRecLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrderData.SerialOrder.SerialOrderId), meta.SerialOrderPOStatusRecLst_Status.NewPredicate(grmi.Equal, baseModel.ORDER_STATUS_RUNNING)}, []grmi.Field{meta.SerialOrderPOStatusRecLst_Pos})
if err != nil {
return nil, grmi.NewBusinessError("查询工序开始时间失败, error:" + err.Error())
}
poStatusRecMap = make(map[int][]model.SerialOrderPOStatusRecLst)
for _, statusRec := range poStatusRecLi {
_, exist := poStatusRecMap[statusRec.PO]
if !exist {
poStatusRecMap[statusRec.PO] = make([]model.SerialOrderPOStatusRecLst, 0)
}
poStatusRecMap[statusRec.PO] = append(poStatusRecMap[statusRec.PO], statusRec)
}
}
if currentSerialOrderId != serialOrderData.SerialOrder.SerialOrderId {
currentSerialOrderId = serialOrderData.SerialOrder.SerialOrderId
poStatusRecLi, err := poStatusRecDao.Select([]grmi.Predicate{meta.SerialOrderPOStatusRecLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrderData.SerialOrder.SerialOrderId), meta.SerialOrderPOStatusRecLst_Status.NewPredicate(grmi.Equal, baseModel.ORDER_STATUS_RUNNING)}, []grmi.Field{meta.SerialOrderPOStatusRecLst_Pos})
if err != nil {
return nil, grmi.NewBusinessError("查询工序开始时间失败, error:" + err.Error())
}
poStatusRecMap = make(map[int][]model.SerialOrderPOStatusRecLst)
for _, statusRec := range poStatusRecLi {
_, exist := poStatusRecMap[statusRec.PO]
if !exist {
poStatusRecMap[statusRec.PO] = make([]model.SerialOrderPOStatusRecLst, 0)
}
poStatusRecMap[statusRec.PO] = append(poStatusRecMap[statusRec.PO], statusRec)
}
}
var startTime string
li, exist := poStatusRecMap[serialOrderData.SerialOrderPOLst.PO]
if exist {
if len(li) > 0 {
startTime = li[len(li)-1].CreateTime.ToString()
}
}
poData := POData{
PO: serialOrderData.Process.PO,
StartTime: startTime,
Status: serialOrderData.SerialOrderStatus.Status,
}
if len(serialOrderLi) == 0 {
serialOrderPOData := SerialOrderPOData{
SerialOrderId: serialOrderData.SerialOrder.SerialOrderId,
}
serialOrderPOData.POMap = make(map[int]POData)
serialOrderPOData.POMap[poData.PO] = poData
serialOrderLi = append(serialOrderLi, serialOrderPOData)
} else {
lastData := serialOrderLi[len(serialOrderLi)-1]
if lastData.SerialOrderId == serialOrderData.SerialOrder.SerialOrderId {
lastData.POMap[poData.PO] = poData
serialOrderLi[len(serialOrderLi)-1] = lastData
} else {
serialOrderPOData := SerialOrderPOData{
SerialOrderId: serialOrderData.SerialOrder.SerialOrderId,
}
serialOrderPOData.POMap = make(map[int]POData, 0)
serialOrderPOData.POMap[poData.PO] = poData
serialOrderLi = append(serialOrderLi, serialOrderPOData)
}
}
}
dealLi := make([]SerialOrderPOLiData, 0, len(serialOrderLi))
// 组建最后的响应体 不同产线不同工序的问题
for _, data := range serialOrderLi {
var poData SerialOrderPOLiData
poData.SerialOrderId = data.SerialOrderId
poData.POLi = make([]POData, 0, len(data.POMap))
for _, poTitle := range poTitleLi {
innerPo, exist := data.POMap[poTitle]
if !exist {
innerPo = POData{
PO: poTitle,
Status: 0,
OPDetailLi: make([]model.SerialOrderOPTrace, 0),
}
} else {
traceLi := traceMap[data.SerialOrderId]
innerPo.OPDetailLi = make([]model.SerialOrderOPTrace, 0)
for _, trace := range traceLi {
if trace.PO == poTitle {
innerPo.OPDetailLi = append(innerPo.OPDetailLi, trace)
}
}
}
poData.POLi = append(poData.POLi, innerPo)
}
dealLi = append(dealLi, poData)
}
result := &Result{
TitleLi: titleLi,
Data: dealLi,
}
pageResult := grmi.PagingResult{
Records: result,
Count: count,
PageNumber: pageNumber,
PageSize: pageSize,
}
return pageResult, nil
}

+ 52
- 22
services/om/implments/WorkOrder.service.impl.go View File

@ -686,6 +686,7 @@ func (impl *WorkOrderServiceImplement) SelectAndFilter(user *models.Usertab, url
var statusStr string
var pageNumberStr string
var pageSizeStr string
var sort string
projectId, _ = urlParameters["ProjectId"]
artId, _ = urlParameters["ArtId"]
workOrderId, _ = urlParameters["WorkOrderId"]
@ -695,6 +696,7 @@ func (impl *WorkOrderServiceImplement) SelectAndFilter(user *models.Usertab, url
statusStr, _ = urlParameters["status"]
pageNumberStr, _ = urlParameters["pageNumber"]
pageSizeStr, _ = urlParameters["pageSize"]
sort, _ = urlParameters["sort"]
status, err := strconv.Atoi(statusStr)
if err != nil {
status = 0
@ -729,7 +731,7 @@ func (impl *WorkOrderServiceImplement) SelectAndFilter(user *models.Usertab, url
for _, roleRel := range roleRelLi {
workLineIdLi = append(workLineIdLi, roleRel.WorkLineid)
}
result, err := dao.SelectAndFilter(projectId, artId, timeStart, timeEnd, workOrderId, orderType, status, pageNumber, pageSize, workLineIdLi)
result, err := dao.SelectAndFilter(projectId, artId, timeStart, timeEnd, workOrderId, orderType, status, pageNumber, pageSize, workLineIdLi, sort)
if err != nil {
return nil, err
}
@ -2754,6 +2756,7 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio
}
// 进行批次工单的时间拆解到序列工单的计划时间上
var serialNum string
var serialOrderSnr string
// 生成序列工单
for i := 0; i < productQty; i++ {
var serialOrderId string
@ -2761,6 +2764,7 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio
// 根据虚拟件还是总成件 来获取ArtId
var artId string
if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL {
serialOrderSnr = project.SerialOrderSnr
accomplish := true
for _, artData := range virtualArtMap {
for innerArtId, qty := range artData {
@ -2790,12 +2794,17 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio
}
} else {
artId = article.ArtId
if article.ArtSpec5 != "" {
serialOrderSnr = article.ArtSpec5
} else {
serialOrderSnr = project.SerialOrderSnr
}
}
if workLineId == "X243X247" {
if i%2 == 0 {
snr := new(models.Snrtab)
snr.Finr = user.Pid
serialNum, err = snr.GetNextSnrWithSession(session, project.SerialOrderSnr)
serialNum, err = snr.GetNextSnrWithSession(session, serialOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取序列工单流水号失败, error:" + err.Error())
@ -2804,7 +2813,7 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio
} else {
snr := new(models.Snrtab)
snr.Finr = user.Pid
serialNum, err = snr.GetNextSnrWithSession(session, project.SerialOrderSnr)
serialNum, err = snr.GetNextSnrWithSession(session, serialOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取序列工单流水号失败, error:" + err.Error())
@ -2813,9 +2822,7 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio
sortNum := serialNum
if workLineId == "X243X247" {
custArtId := custArtMap[artId]
if len(custArtId) < 7 {
_ = session.Rollback()
return grmi.NewBusinessError("客户零件号不合规")
}
@ -3132,7 +3139,7 @@ func (impl *WorkOrderServiceImplement) SelectWorkOrderUnCompletedSerialOrder(use
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.CancelUnCompletedSerialOrder
*
******************************************************************************/
func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models.Usertab, serialOrderIdLi []string) error {
func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models.Usertab, serialOrderMap map[string]int) error {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
@ -3149,36 +3156,56 @@ func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models
workOrderQtyDao := dal.NewWorkOrderQtyDAO(session, user.Pid, user.Userid)
workOrderStatusDao := dal.NewWorkOrderStatusDAO(session, user.Pid, user.Userid)
workOrderStatusRecDao := dal.NewWorkOrderStatusRecLstDAO(session, user.Pid, user.Userid)
if len(serialOrderIdLi) == 0 {
if len(serialOrderMap) == 0 {
_ = session.Rollback()
return grmi.NewBusinessError("未获取到工单ID")
return grmi.NewBusinessError("未获取工单数据")
}
serialOrderIdLi := make([]string, 0, len(serialOrderMap))
for serialOrderId := range serialOrderMap {
serialOrderIdLi = append(serialOrderIdLi, serialOrderId)
}
serialOrderLi, err := serialOrderDao.GetSerialOrderByIDLi(serialOrderIdLi)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("查询序列工单失败, error:" + err.Error())
}
// 校验是否所有的serialOrderId都是有效的
if len(*serialOrderLi) != len(serialOrderIdLi) {
_ = session.Rollback()
return grmi.NewBusinessError("部分序列工单ID错误")
}
var workOrderId string
var status int
for index, serialOrder := range *serialOrderLi {
for _, serialOrder := range *serialOrderLi {
// 校验工单状态是否已经发生变更
status = serialOrder.SerialOrderStatus.Status
originStatus := serialOrderMap[serialOrder.SerialOrder.SerialOrderId]
if originStatus != status {
_ = session.Rollback()
return grmi.NewBusinessError("序列工单状态已经发生变更,请重新操作, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
}
// 校验传入的序列工单是否同属于一个批次
if workOrderId == "" {
workOrderId = serialOrder.SerialOrder.WorkOrderId
}
status = serialOrder.SerialOrderStatus.Status
if workOrderId != serialOrder.SerialOrder.WorkOrderId {
_ = session.Rollback()
return grmi.NewBusinessError("序列工单不属于同一个批次工单")
}
if index == 0 {
if serialOrder.SerialOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT {
_ = session.Rollback()
return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
}
// 校验工单的首道序是40其余是26才可以去取消 现在去掉这个限制了
if serialOrder.SerialOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED {
_ = session.Rollback()
return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
}
// 校验工单的首道序是40其余是26才可以去取消 现在去掉这个限制了
//if index == 0 {
// if serialOrder.SerialOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT {
// _ = session.Rollback()
// return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
// }
//else if serialOrder.SerialOrderStatus.Status == baseModel.ORDER_STATUS_RUNNING {
// poDataLi, err := poDao.GetSerialOrderPOData(serialOrder.SerialOrder.SerialOrderId, serialOrder.SerialOrder.UsedResourceId)
// if err != nil {
@ -3199,12 +3226,14 @@ func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models
// }
// }
//}
} else {
if serialOrder.SerialOrderStatus.Status >= baseModel.WO_STATUS_RUNNING || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT {
_ = session.Rollback()
return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
}
}
//} else {
// if serialOrder.SerialOrderStatus.Status >= baseModel.WO_STATUS_RUNNING || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT {
// _ = session.Rollback()
// return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId)
// }
//}
// 进行serialOrder相关数据表的的状态修改 更新
serialOrderStatus := serialOrder.SerialOrderStatus
serialOrderStatus.Status = baseModel.ORDER_STATUS_CANCELED
err = serialOrderStatusDao.UpdateOne(&serialOrderStatus)
@ -3237,6 +3266,7 @@ func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models
return grmi.NewBusinessError("更新工单工步详细操作状态失败")
}
}
// 更新serialOrder所属WorkOrder的状态和数量的更新
workOrder, err := dao.SelectOneJoin(workOrderId)
if workOrder.WorkOrderStatus.Status < baseModel.WO_STATUS_RELEASED || workOrder.WorkOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED {
_ = session.Rollback()


+ 66
- 0
web/controllers/om/SerialOrder.rest.go View File

@ -558,4 +558,70 @@ func RegisterExportSerialOrderOPTraceData(party router.Party, path string, metho
}
supports.Ok(ctx, supports.OptionSuccess, result)
})
}
/******************************************************************************
*
* @Function Name : RegisterExportSerialOrderOPTraceData
*-----------------------------------------------------------------------------
*
* @Description : 为一个查询导出产品追溯数据数据的方法注册路由
*
* @Function Parameters : 路由分组
*
* @Function Parameters : 路径
*
* @Function Parameters : 实际处理请求的方法
*
* @Author : zhangxin
*
* @Date : 2021-09-17
*
******************************************************************************/
func RegisterDisplaySerialOrderTrace(party router.Party, path string, method func(*models.Usertab, string, int, string, string, string, string, bool, int64, int64) (interface{}, error)) {
party.Get(path, func(ctx iris.Context) {
var err error
user, ok := jwts.ParseToken(ctx)
if !ok {
supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil)
return
}
workOrderId := ctx.URLParam("workOrderId")
serialOrderId := ctx.URLParam("serialOrderId")
workLineId := ctx.URLParam("workLineId")
date := ctx.URLParam("date")
statusStr := ctx.URLParam("status")
NGCode := ctx.URLParam("NGCode")
repairStr := ctx.URLParam("repair")
pageNumber, err := ctx.URLParamInt64("pageNumber")
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil)
return
}
pageSize, err := ctx.URLParamInt64("pageSize")
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil)
return
}
var status int
if statusStr != "" {
status, err = strconv.Atoi(statusStr)
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil)
return
}
}
var repair bool
if repairStr == "true" {
repair = true
}
result, err := method(user, workOrderId, status, workLineId, date, serialOrderId, NGCode, repair, pageSize, pageNumber)
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil)
return
}
supports.Ok(ctx, supports.OptionSuccess, result)
})
}

+ 4
- 4
web/controllers/om/WorkOrder.rest.go View File

@ -759,7 +759,7 @@ func RegisterGetUnCompletedSerialOrder(party router.Party, path string, method f
* @Date : 2021-09-26
*
******************************************************************************/
func RegisterCancelUnCompletedSerialOrder(party router.Party, path string, method func(*models.Usertab, []string) error) {
func RegisterCancelUnCompletedSerialOrder(party router.Party, path string, method func(*models.Usertab, map[string]int) error) {
party.Post(path, func(ctx iris.Context) {
user, ok := jwts.ParseToken(ctx)
@ -768,12 +768,12 @@ func RegisterCancelUnCompletedSerialOrder(party router.Party, path string, metho
return
}
var serialOrderIdLi []string
if err := ctx.ReadJSON(&serialOrderIdLi); err != nil {
var serialOrderMap map[string]int
if err := ctx.ReadJSON(&serialOrderMap); err != nil {
supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil)
return
}
err := method(user, serialOrderIdLi)
err := method(user, serialOrderMap)
if err != nil {
supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil)
return


+ 2
- 0
web/controllers/om/om.go View File

@ -326,6 +326,8 @@ func RegisterRoutes() {
RegisterSerialOrderDetailTrace(serialorder, "/detailtrace", serviceOfSerialOrder.GetSerialOrderOperationData)
// SerialOrder 导出产品追溯数据历史记录
RegisterExportSerialOrderOPTraceData(serialorder, "/exporttrace", serviceOfSerialOrder.ExportSerialOrderTraceData)
// SerialOrder 查询产品追溯数据历史记录
RegisterDisplaySerialOrderTrace(serialorder, "/tracewithdetail", serviceOfSerialOrder.GetSerialOrderOPTraceWithDetail)
// SerialOrderStatus的路由组
serialorderstatus := party.Party("/serialorderstatus")


Loading…
Cancel
Save