From 93f46fa4d2936163b842d1518687c4d1024b2cfe Mon Sep 17 00:00:00 2001 From: zhangxin Date: Mon, 11 Oct 2021 15:49:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=A7=E5=93=81=E8=BF=BD?= =?UTF-8?q?=E6=BA=AF=E5=8A=9F=E8=83=BD=E4=B8=BA=E7=94=9F=E4=BA=A7=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=20=E6=96=B0=E5=A2=9E=E6=96=B0=E7=9A=84=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E8=BF=BD=E6=BA=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/base/implments/PrintDetail.dao.impl.go | 14 +- dao/om/SerialOrder.dao.go | 32 ++ dao/om/SerialOrderPOLst.dao.go | 17 + dao/om/WorkOrder.dao.go | 4 +- dao/om/implments/SerialOrder.dao.impl.go | 103 +++++ dao/om/implments/SerialOrderPOLst.dao.impl.go | 98 +++++ dao/om/implments/WorkOrder.dao.impl.go | 11 +- services/om/SerialOrder.service.go | 13 + services/om/WorkOrder.service.go | 4 +- .../om/implments/SerialOrder.service.impl.go | 404 ++++++++++++++++-- .../om/implments/WorkOrder.service.impl.go | 74 +++- web/controllers/om/SerialOrder.rest.go | 66 +++ web/controllers/om/WorkOrder.rest.go | 8 +- web/controllers/om/om.go | 2 + 14 files changed, 776 insertions(+), 74 deletions(-) diff --git a/dao/base/implments/PrintDetail.dao.impl.go b/dao/base/implments/PrintDetail.dao.impl.go index e41ee2a..5943360 100644 --- a/dao/base/implments/PrintDetail.dao.impl.go +++ b/dao/base/implments/PrintDetail.dao.impl.go @@ -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 } diff --git a/dao/om/SerialOrder.dao.go b/dao/om/SerialOrder.dao.go index 07a3195..c5a40b6 100644 --- a/dao/om/SerialOrder.dao.go +++ b/dao/om/SerialOrder.dao.go @@ -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) } /****************************************************************************** diff --git a/dao/om/SerialOrderPOLst.dao.go b/dao/om/SerialOrderPOLst.dao.go index bbdd1f0..d699dcd 100644 --- a/dao/om/SerialOrderPOLst.dao.go +++ b/dao/om/SerialOrderPOLst.dao.go @@ -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 diff --git a/dao/om/WorkOrder.dao.go b/dao/om/WorkOrder.dao.go index 6d7d2d7..44784a0 100644 --- a/dao/om/WorkOrder.dao.go +++ b/dao/om/WorkOrder.dao.go @@ -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 diff --git a/dao/om/implments/SerialOrder.dao.impl.go b/dao/om/implments/SerialOrder.dao.impl.go index 8fadf68..6ab695d 100644 --- a/dao/om/implments/SerialOrder.dao.impl.go +++ b/dao/om/implments/SerialOrder.dao.impl.go @@ -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 +} diff --git a/dao/om/implments/SerialOrderPOLst.dao.impl.go b/dao/om/implments/SerialOrderPOLst.dao.impl.go index fc15a4e..63135f5 100644 --- a/dao/om/implments/SerialOrderPOLst.dao.impl.go +++ b/dao/om/implments/SerialOrderPOLst.dao.impl.go @@ -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 } \ No newline at end of file diff --git a/dao/om/implments/WorkOrder.dao.impl.go b/dao/om/implments/WorkOrder.dao.impl.go index 034a54f..2f33b38 100644 --- a/dao/om/implments/WorkOrder.dao.impl.go +++ b/dao/om/implments/WorkOrder.dao.impl.go @@ -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 { diff --git a/services/om/SerialOrder.service.go b/services/om/SerialOrder.service.go index 4c30c1e..ad799df 100644 --- a/services/om/SerialOrder.service.go +++ b/services/om/SerialOrder.service.go @@ -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) } /****************************************************************************** diff --git a/services/om/WorkOrder.service.go b/services/om/WorkOrder.service.go index 8528ee0..7d7ab1d 100644 --- a/services/om/WorkOrder.service.go +++ b/services/om/WorkOrder.service.go @@ -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 } /****************************************************************************** diff --git a/services/om/implments/SerialOrder.service.impl.go b/services/om/implments/SerialOrder.service.impl.go index 3d22d02..5ec19b4 100644 --- a/services/om/implments/SerialOrder.service.impl.go +++ b/services/om/implments/SerialOrder.service.impl.go @@ -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 + +} diff --git a/services/om/implments/WorkOrder.service.impl.go b/services/om/implments/WorkOrder.service.impl.go index 602ca7e..77364bd 100644 --- a/services/om/implments/WorkOrder.service.impl.go +++ b/services/om/implments/WorkOrder.service.impl.go @@ -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() diff --git a/web/controllers/om/SerialOrder.rest.go b/web/controllers/om/SerialOrder.rest.go index 8a5f0b6..1ebbc80 100644 --- a/web/controllers/om/SerialOrder.rest.go +++ b/web/controllers/om/SerialOrder.rest.go @@ -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) + }) } \ No newline at end of file diff --git a/web/controllers/om/WorkOrder.rest.go b/web/controllers/om/WorkOrder.rest.go index c929638..395c7bc 100644 --- a/web/controllers/om/WorkOrder.rest.go +++ b/web/controllers/om/WorkOrder.rest.go @@ -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 diff --git a/web/controllers/om/om.go b/web/controllers/om/om.go index 021d4e9..a6bea31 100644 --- a/web/controllers/om/om.go +++ b/web/controllers/om/om.go @@ -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")