From a2eff4d6ba58b50e30895c5c69ca594ef320c7f7 Mon Sep 17 00:00:00 2001 From: yehongyang Date: Wed, 27 Oct 2021 18:21:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=AF=BC=E5=85=A5=20?= =?UTF-8?q?=E8=BD=AC=E5=8C=96=E5=AE=A2=E6=88=B7=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/me/ProductFamily.dao.go | 21 + dao/me/implments/ProductFamily.dao.impl.go | 28 ++ dao/pln/HondaDemand.dao.go | 19 + dao/pln/implments/HondaDemand.dao.impl.go | 12 + models/me/ProductFamily.model.go | 43 +- services/pln/HondaDemand.service.go | 17 + services/pln/HondaDemandErrorLst.service.go | 19 + services/pln/HondaDemandItemLst.service.go | 1 + .../pln/implments/HondaDemand.service.impl.go | 448 +++++++++++++----- .../HondaDemandErrorLst.service.impl.go | 21 + .../common/CommonUploadPic.rest.go | 69 +++ web/controllers/pln/HondaDemand.rest.go | 20 + .../pln/HondaDemandErrorLst.rest.go | 25 + web/controllers/pln/pln.go | 2 + 14 files changed, 611 insertions(+), 134 deletions(-) diff --git a/dao/me/ProductFamily.dao.go b/dao/me/ProductFamily.dao.go index 055183a..bdf8e85 100644 --- a/dao/me/ProductFamily.dao.go +++ b/dao/me/ProductFamily.dao.go @@ -162,6 +162,27 @@ type ProductFamilyDAO interface { * ******************************************************************************/ Select([]grmi.Predicate, []grmi.Field) ([]model.ProductFamily, error) + /****************************************************************************** + * + * @Function Name : SelectAndRelate + *----------------------------------------------------------------------------- + * + * @Description : 查询配置 以及关联 + * + * @Function Parameters : 查询条件 + * + * @Function Parameters : 排序字段 + * + * @Return Value : 查询结果 + * + * @Return Value : 执行时发生的错误 + * + * @Author : 代码生成器创建 + * + * @Date : 2021-10-19 14:04:53 + * + ******************************************************************************/ + SelectAndRelate([]string) ([]model.ProductFamily, error) /****************************************************************************** * * @Function Name : SelectAndPaging diff --git a/dao/me/implments/ProductFamily.dao.impl.go b/dao/me/implments/ProductFamily.dao.impl.go index f5cf5de..5b5934c 100644 --- a/dao/me/implments/ProductFamily.dao.impl.go +++ b/dao/me/implments/ProductFamily.dao.impl.go @@ -188,6 +188,34 @@ func (impl *ProductFamilyDAOImplement) DeleteWhere(predicates []grmi.Predicate) return nil } +/****************************************************************************** + * + * @Reference LAPP_ACURA_MOM_BACKEND/dao/me/ProductFamilyDAO.SelectAndRelate + * + ******************************************************************************/ +func (impl *ProductFamilyDAOImplement) SelectAndRelate(predicates []string) ([]model.ProductFamily, error) { + + var data []model.ProductFamily + err := impl.session.Table(impl.meta.TableName).In(meta.ProductFamily_ProductFamilyId.Name, predicates).Find(&data) + if err != nil { + return nil, grmi.NewDataBaseError(err) + } + //查询配置 + var relateList []model.ProductFamilyRelate + err = impl.session.Table(impl.meta.TableName).In(meta.ProductFamilyRelate_ProductFamilyId.Name, predicates).Find(&relateList) + relateMap := make(map[string][]model.ProductFamilyRelate) + for _, v := range relateList { + relateMap[v.ProjectId+"[|]"+v.ProductFamilyId] = append(relateMap[v.ProjectId+"[|]"+v.ProductFamilyId], v) + } + for k, v := range data { + info, ok := relateMap[v.ProjectId+"[|]"+v.ProductFamilyId] + if ok { + data[k].Relate = info + } + } + return data, nil +} + /****************************************************************************** * * @Reference LAPP_ACURA_MOM_BACKEND/dao/me/ProductFamilyDAO.Select diff --git a/dao/pln/HondaDemand.dao.go b/dao/pln/HondaDemand.dao.go index 34fdf2b..c54e6fc 100644 --- a/dao/pln/HondaDemand.dao.go +++ b/dao/pln/HondaDemand.dao.go @@ -75,6 +75,25 @@ type HondaDemandDAO interface { * ******************************************************************************/ SelectOne(string) (*model.HondaDemand, error) + /****************************************************************************** + * + * @Function Name : SelectOneWhere + *----------------------------------------------------------------------------- + * + * @Description : 查找指定代码周期的HondaDemand + * + * @Function Parameters : 主键 + * + * @Return Value : 查找到的HondaDemand + * + * @Return Value : 执行时发生的错误 + * + * @Author : 代码生成器创建 + * + * @Date : 2021-10-20 09:58:33 + * + ******************************************************************************/ + SelectOneWhere(model.HondaDemand) (*model.HondaDemand, error) /****************************************************************************** * * @Function Name : UpdateOne diff --git a/dao/pln/implments/HondaDemand.dao.impl.go b/dao/pln/implments/HondaDemand.dao.impl.go index 97f8cc8..87218ef 100644 --- a/dao/pln/implments/HondaDemand.dao.impl.go +++ b/dao/pln/implments/HondaDemand.dao.impl.go @@ -81,6 +81,18 @@ func (impl *HondaDemandDAOImplement) DeleteOne(demandId string) error { return nil } +func (impl *HondaDemandDAOImplement) SelectOneWhere(entity model.HondaDemand) (*model.HondaDemand, error) { + var data model.HondaDemand + ok, err := impl.session.Table(impl.meta.TableName).Where(meta.HondaDemand_PlanCode.Name+"=? and "+meta.HondaDemand_DemandYear.Name+"=? and "+meta.HondaDemand_DemandWeek.Name+"=?", entity.PlanCode, entity.DemandYear, entity.DemandWeek).Get(&data) + if err != nil { + return nil, grmi.NewDataBaseError(err) + } + if !ok { + return nil, nil + } + return &data, nil +} + /****************************************************************************** * * @Reference LAPP_ACURA_MOM_BACKEND/dao/pln/HondaDemandDAO.SelectOne diff --git a/models/me/ProductFamily.model.go b/models/me/ProductFamily.model.go index 6c83a5e..2dd07bd 100644 --- a/models/me/ProductFamily.model.go +++ b/models/me/ProductFamily.model.go @@ -20,27 +20,28 @@ import ( * ******************************************************************************/ type ProductFamily struct { - PlantNr int `xorm:"pk int 'PlantNr'" json:"ME_ProductFamily-PlantNr"` - ProductFamilyId string `xorm:"pk nvarchar(40) 'ProductFamilyId'" json:"ME_ProductFamily-ProductFamilyId"` - Descr string `xorm:"nvarchar(40) 'Descr' not null" json:"ME_ProductFamily-Descr"` - ProjectId string `xorm:"nvarchar(40) 'ProjectId' not null" json:"ME_ProductFamily-ProjectId"` - ConfigValue string `xorm:"nvarchar(40) 'ConfigValue' not null" json:"ME_ProductFamily-ConfigValue"` - ModelValue string `xorm:"nvarchar(40) 'ModelValue' not null" json:"ME_ProductFamily-ModelValue"` - ColorValue string `xorm:"nvarchar(40) 'ColorValue' not null" json:"ME_ProductFamily-ColorValue"` - BroadcastPoint string `xorm:"nvarchar(40) 'BroadcastPoint' not null" json:"ME_ProductFamily-BroadcastPoint"` - AutoGenPackToggle bool `xorm:"bit 'AutoGenPackToggle' not null" json:"ME_ProductFamily-AutoGenPackToggle"` - Jph float64 `xorm:"float 'Jph' not null" json:"ME_ProductFamily-Jph"` - WorkLineId string `xorm:"nvarchar(40) 'WorkLineId' not null" json:"ME_ProductFamily-WorkLineId"` - CtrlPara1 int `xorm:"int 'CtrlPara1' not null" json:"ME_ProductFamily-CtrlPara1"` - CtrlPara2 int `xorm:"int 'CtrlPara2' not null" json:"ME_ProductFamily-CtrlPara2"` - CtrlStr1 string `xorm:"nvarchar(255) 'CtrlStr1' not null" json:"ME_ProductFamily-CtrlStr1"` - CtrlStr2 string `xorm:"nvarchar(255) 'CtrlStr2' not null" json:"ME_ProductFamily-CtrlStr2"` - CtrlTime1 grmi.DateTime `xorm:"datetime 'CtrlTime1' not null" json:"ME_ProductFamily-CtrlTime1"` - CtrlTime2 grmi.DateTime `xorm:"datetime 'CtrlTime2' not null" json:"ME_ProductFamily-CtrlTime2"` - LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"ME_ProductFamily-LastModify"` - LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"ME_ProductFamily-LastUser"` - CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"ME_ProductFamily-CreateTime"` - Product []Product `xorm:"-" json:"ME_ProductFamily-Product"` + PlantNr int `xorm:"pk int 'PlantNr'" json:"ME_ProductFamily-PlantNr"` + ProductFamilyId string `xorm:"pk nvarchar(40) 'ProductFamilyId'" json:"ME_ProductFamily-ProductFamilyId"` + Descr string `xorm:"nvarchar(40) 'Descr' not null" json:"ME_ProductFamily-Descr"` + ProjectId string `xorm:"nvarchar(40) 'ProjectId' not null" json:"ME_ProductFamily-ProjectId"` + ConfigValue string `xorm:"nvarchar(40) 'ConfigValue' not null" json:"ME_ProductFamily-ConfigValue"` + ModelValue string `xorm:"nvarchar(40) 'ModelValue' not null" json:"ME_ProductFamily-ModelValue"` + ColorValue string `xorm:"nvarchar(40) 'ColorValue' not null" json:"ME_ProductFamily-ColorValue"` + BroadcastPoint string `xorm:"nvarchar(40) 'BroadcastPoint' not null" json:"ME_ProductFamily-BroadcastPoint"` + AutoGenPackToggle bool `xorm:"bit 'AutoGenPackToggle' not null" json:"ME_ProductFamily-AutoGenPackToggle"` + Jph float64 `xorm:"float 'Jph' not null" json:"ME_ProductFamily-Jph"` + WorkLineId string `xorm:"nvarchar(40) 'WorkLineId' not null" json:"ME_ProductFamily-WorkLineId"` + CtrlPara1 int `xorm:"int 'CtrlPara1' not null" json:"ME_ProductFamily-CtrlPara1"` + CtrlPara2 int `xorm:"int 'CtrlPara2' not null" json:"ME_ProductFamily-CtrlPara2"` + CtrlStr1 string `xorm:"nvarchar(255) 'CtrlStr1' not null" json:"ME_ProductFamily-CtrlStr1"` + CtrlStr2 string `xorm:"nvarchar(255) 'CtrlStr2' not null" json:"ME_ProductFamily-CtrlStr2"` + CtrlTime1 grmi.DateTime `xorm:"datetime 'CtrlTime1' not null" json:"ME_ProductFamily-CtrlTime1"` + CtrlTime2 grmi.DateTime `xorm:"datetime 'CtrlTime2' not null" json:"ME_ProductFamily-CtrlTime2"` + LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"ME_ProductFamily-LastModify"` + LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"ME_ProductFamily-LastUser"` + CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"ME_ProductFamily-CreateTime"` + Product []Product `xorm:"-" json:"ME_ProductFamily-Product"` + Relate []ProductFamilyRelate `xorm:"-" json:"-"` } /****************************************************************************** diff --git a/services/pln/HondaDemand.service.go b/services/pln/HondaDemand.service.go index a93adc4..ecf2697 100644 --- a/services/pln/HondaDemand.service.go +++ b/services/pln/HondaDemand.service.go @@ -58,6 +58,23 @@ type HondaDemandService interface { * ******************************************************************************/ DeleteOne(*global.User, string) error + /****************************************************************************** + * + * @Function Name : Analysis + *----------------------------------------------------------------------------- + * + * @Description : 重新解析的HondaDemand + * + * @Function Parameters : 主键 + * + * @Return Value : 执行时发生的错误 + * + * @Author : 代码生成器创建 + * + * @Date : 2021-10-20 09:58:33 + * + ******************************************************************************/ + Analysis(*global.User, string) error /****************************************************************************** * * @Function Name : SelectOne diff --git a/services/pln/HondaDemandErrorLst.service.go b/services/pln/HondaDemandErrorLst.service.go index 647e470..4a96ac4 100644 --- a/services/pln/HondaDemandErrorLst.service.go +++ b/services/pln/HondaDemandErrorLst.service.go @@ -60,6 +60,25 @@ type HondaDemandErrorLstService interface { * ******************************************************************************/ DeleteOne(*global.User, string, int) error + /****************************************************************************** + * + * @Function Name : Repair + *----------------------------------------------------------------------------- + * + * @Description : 修复HondaDemandItemLst + * + * @Function Parameters : 主键 + * + * @Function Parameters : 主键 + * + * @Return Value : 执行时发生的错误 + * + * @Author : 代码生成器创建 + * + * @Date : 2021-10-20 09:58:33 + * + ******************************************************************************/ + Repair(*global.User, string, int) error /****************************************************************************** * * @Function Name : SelectOne diff --git a/services/pln/HondaDemandItemLst.service.go b/services/pln/HondaDemandItemLst.service.go index 762118a..18a0388 100644 --- a/services/pln/HondaDemandItemLst.service.go +++ b/services/pln/HondaDemandItemLst.service.go @@ -60,6 +60,7 @@ type HondaDemandItemLstService interface { * ******************************************************************************/ DeleteOne(*global.User, string, int) error + /****************************************************************************** * * @Function Name : SelectOne diff --git a/services/pln/implments/HondaDemand.service.impl.go b/services/pln/implments/HondaDemand.service.impl.go index a6a4d7d..dacec28 100644 --- a/services/pln/implments/HondaDemand.service.impl.go +++ b/services/pln/implments/HondaDemand.service.impl.go @@ -4,6 +4,7 @@ package implments import ( baseDal "LAPP_ACURA_MOM_BACKEND/dao/base" + dalMe "LAPP_ACURA_MOM_BACKEND/dao/me" dal "LAPP_ACURA_MOM_BACKEND/dao/pln" "LAPP_ACURA_MOM_BACKEND/db" "LAPP_ACURA_MOM_BACKEND/global" @@ -11,6 +12,7 @@ import ( "LAPP_ACURA_MOM_BACKEND/infra/logger" meta "LAPP_ACURA_MOM_BACKEND/meta/pln" baseModel "LAPP_ACURA_MOM_BACKEND/models/base" + modelMe "LAPP_ACURA_MOM_BACKEND/models/me" model "LAPP_ACURA_MOM_BACKEND/models/pln" "LAPP_ACURA_MOM_BACKEND/utils" "bufio" @@ -110,6 +112,54 @@ func NewHondaDemandServiceImplement() *HondaDemandServiceImplement { return hondaDemandServiceImplement } +/****************************************************************************** + * + * @Reference LAPP_ACURA_MOM_BACKEND/services/pln/HondaDemandService.Analysis + * + ******************************************************************************/ +func (impl *HondaDemandServiceImplement) Analysis(user *global.User, demandId string) error { + grmi.Log(user, "/services/pln/implments/HondaDemand.service.impl.go", "Analysis", "重新解析一个HondaDemand") + condition := DefaultConditionOfHondaDemandErrorLstAndPaging + + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + dao := dal.NewHondaDemandDAO(session, user.PlantNr, user.UserId) + record, err := dao.SelectOne(demandId) + if err != nil { + return err + } + if record == nil { + return grmi.NewBusinessError("不存在指定记录!") + } + //判断是否存在未处理错误 + errDao := dal.NewHondaDemandErrorLstDAO(session, user.PlantNr, user.UserId) + urlParameters := make(map[string]string) + urlParameters[meta.HondaDemandErrorLst_ErrorStatus.Name] = "开" + urlParameters[meta.HondaDemandErrorLst_DemandId.Name] = record.DemandId + predicates, err := condition.BuildPredicates(urlParameters) + errList, err := errDao.Select(predicates, condition.OrderByFields) + if err != nil { + return err + } + if len(errList) > 0 { + return grmi.NewBusinessError("请修复错误后解析!") + } + if record.Parsed != 3 { + return grmi.NewBusinessError("记录正在解析或已经解析成功!") + } + record.Parsed = 1 + err = dao.UpdateOne(record) + if err != nil { + return err + } + utils.EmailSendStruct["demandAnalysis"].SeyChannels(utils.ChannelsInfo{ + Key: record.DemandId, + Info: *record, + }) + return nil +} + /****************************************************************************** * * @Reference LAPP_ACURA_MOM_BACKEND/services/pln/HondaDemandService.InsertOne @@ -136,21 +186,55 @@ func (impl *HondaDemandServiceImplement) InsertOne(user *global.User, entity *mo } entity.Parsed = 1 dao := dal.NewHondaDemandDAO(session, user.PlantNr, user.UserId) - record, err := dao.SelectOne(entity.DemandId) + infoDao := dal.NewHondaDemandItemLstDAO(session, user.PlantNr, user.UserId) + errList, infoList := impl.fileUpload(entity) + record, err := dao.SelectOneWhere(*entity) if err != nil { return err } if record != nil { - return grmi.NewBusinessError("已经存在相同主键的记录!") + return grmi.NewBusinessError("需求代码周期不能重复导入!") + } + if errList == nil { + session.Begin() + + if len(infoList) > 100 { + var _infoList []model.HondaDemandItemLst + for k, v := range infoList { + _infoList = append(_infoList, v) + if (k > 0 && k%50 == 0) || k+1 == len(infoList) { + err = infoDao.Insert(&_infoList) + if err != nil { + session.Rollback() + return err + } + _infoList = []model.HondaDemandItemLst{} + } + } + } else { + err = infoDao.Insert(&infoList) + if err != nil { + session.Rollback() + return err + } + } + err = dao.InsertOne(entity) + if err != nil { + session.Rollback() + return err + } + } else { + errStr := "" + for _, v := range errList { + errStr += v.ErrorInfo + ";" + } + return fmt.Errorf(errStr) } - err = dao.InsertOne(entity) utils.EmailSendStruct["demandAnalysis"].SeyChannels(utils.ChannelsInfo{ Key: entity.DemandId, Info: *entity, }) - if err != nil { - return err - } + session.Commit() return nil } @@ -161,53 +245,200 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( entity, ok := info.Info.(model.HondaDemand) engine := db.Eloquent.Master() session := engine.NewSession() + defer func() { //在panic前声明defer,能捕获异常 + if err := recover(); err != nil { + session.Rollback() + innerLog, _ := logger.NewLogger("system", "create_cust_order") + innerLog.Debug("系统异常:", err) + } + }() defer session.Close() + errDao := dal.NewHondaDemandErrorLstDAO(session, baseModel.PlantNr, "system") dao := dal.NewHondaDemandDAO(session, baseModel.PlantNr, "system") infoDao := dal.NewHondaDemandItemLstDAO(session, baseModel.PlantNr, "system") + //配置 + familyDao := dalMe.NewProductFamilyDAO(session, baseModel.PlantNr, "system") + //流水号 + snrDao := baseDal.NewSnrDAO(session, baseModel.PlantNr, "system") + //客户订单 + custDao := dal.NewCustOrderDAO(session, baseModel.PlantNr, "system") + //订单状态 + custStatusDao := dal.NewCustOrderStatusDAO(session, baseModel.PlantNr, "system") if !ok || entity.DemandId == "" { - //写入日志 - fmt.Println("消息体类型错误跳过消息") + panic("消息体类型错误跳过消息") + } + condition := DefaultConditionOfHondaDemandItemLstAndPaging + + //删除错误信息 + urlParameters := make(map[string]string) + urlParameters[meta.HondaDemandErrorLst_DemandId.Name] = entity.DemandId + predicates, err := condition.BuildPredicates(urlParameters) + if err != nil { + errData := model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: -1, + ErrorType: "", + ErrorInfo: "系统解析异常:" + err.Error() + ";", + ErrorStatus: "开", + } + _ = errDao.InsertOne(&errData) return false, info } - _, err := os.Stat("web/public/" + entity.DemandType + "/" + entity.EdiFile) + _ = errDao.DeleteWhere(predicates) + + //查出明细 + urlParameters = make(map[string]string) + urlParameters[meta.HondaDemandErrorLst_DemandId.Name] = entity.DemandId + predicates, err = condition.BuildPredicates(urlParameters) if err != nil { - //插入错误 - errorInfo := model.HondaDemandErrorLst{ + errData := model.HondaDemandErrorLst{ DemandId: entity.DemandId, Pos: -1, ErrorType: "", - ErrorInfo: "文件不存在", + ErrorInfo: "系统解析异常:" + err.Error() + ";", ErrorStatus: "开", } - if entity.Parsed == 1 { - _ = errDao.InsertOne(&errorInfo) - } else { - _ = errDao.UpdateOne(&errorInfo) + _ = errDao.InsertOne(&errData) + return false, info + } + itemInfo, err := infoDao.Select(predicates, condition.OrderByFields) + if err != nil { + errData := model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: -1, + ErrorType: "", + ErrorInfo: "系统解析异常:" + err.Error() + ";", + ErrorStatus: "开", } - //修改主表为带解析 - entity.Parsed = 3 - _ = dao.UpdateOne(&entity) + _ = errDao.InsertOne(&errData) return false, info } - file, err := os.Open("web/public/" + entity.DemandType + "/" + entity.EdiFile) + //根据配置号查询零件配置 以及配置信息 + var familyCode []string + for _, v := range itemInfo { + familyCode = append(familyCode, v.ProductFamilyId) + } + familyData, err := familyDao.SelectAndRelate(familyCode) if err != nil { - errorInfo := model.HondaDemandErrorLst{ + errData := model.HondaDemandErrorLst{ DemandId: entity.DemandId, - Pos: -2, + Pos: -1, ErrorType: "", - ErrorInfo: "文件无法打开", + ErrorInfo: "系统解析异常:" + err.Error() + ";", ErrorStatus: "开", } - if entity.Parsed == 1 { - _ = errDao.InsertOne(&errorInfo) + _ = errDao.InsertOne(&errData) + return false, info + } + familyMap := make(map[string]modelMe.ProductFamily) + for _, v := range familyData { + familyMap[v.ProductFamilyId] = v + } + //客户订单列表 + var custOrder []model.CustOrder + var errList []model.HondaDemandErrorLst + var custOrderStatus []model.CustOrderStatus + //循环详情 + for _, v := range itemInfo { + familyInfo, ok := familyMap[v.ProductFamilyId] + if ok { + for _, val := range familyInfo.Relate { + custOrderId, err := snrDao.GetNextSnr("custOrderID") + if err != nil { + errData := model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: -1, + ErrorType: "", + ErrorInfo: "系统解析异常,流水号生成失败:" + err.Error() + ";", + ErrorStatus: "开", + } + _ = errDao.InsertOne(&errData) + return false, info + } + custOrder = append(custOrder, model.CustOrder{ + CustOrderId: custOrderId, + ProductFamilyId: v.ProductFamilyId, + PartId: val.ProductId, + OrderType: baseModel.ODER_TYPE_SEQ, + OrderInfo: familyInfo.Descr, + ProjectId: familyInfo.ProjectId, + ConfigValue: familyInfo.ConfigValue, + ModelValue: familyInfo.ModelValue, + ColorValue: familyInfo.ColorValue, + PlanQty: v.PlanQty, + }) + custOrderStatus = append(custOrderStatus, model.CustOrderStatus{ + CustOrderId: custOrderId, + Status: baseModel.ORDER_STATUS_UNPLANED, + }) + } } else { - _ = errDao.UpdateOne(&errorInfo) + errList = append(errList, model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: v.Pos, + ErrorType: "", + ErrorInfo: "车型配置未找到:" + v.ProductFamilyId, + ErrorStatus: "开", + }) } - //修改主表为带解析 + } + session.Begin() + if len(errList) > 0 { entity.Parsed = 3 - _ = dao.UpdateOne(&entity) - return false, info + err = dao.UpdateOne(&entity) + if err != nil { + panic("文件解析失败,更新状态异常:" + err.Error()) + } + err = errDao.Insert(&errList) + if err != nil { + panic("文件解析失败,写入错误信息异常:" + err.Error()) + } + } else { + entity.Parsed = 2 + err = dao.UpdateOne(&entity) + if err != nil { + panic("文件解析成功,修改状态异常:" + err.Error()) + } + err = custDao.Insert(&custOrder) + if err != nil { + panic("文件解析成功,写入客户订单异常:" + err.Error()) + } + err = custStatusDao.Insert(&custOrderStatus) + if err != nil { + panic("文件解析成功,写入客户订单状态异常:" + err.Error()) + } + } + _ = session.Commit() + return false, info +} +func (impl *HondaDemandServiceImplement) fileUpload(entity *model.HondaDemand) ([]model.HondaDemandErrorLst, []model.HondaDemandItemLst) { + var errList []model.HondaDemandErrorLst + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + + _, err := os.Stat("web/public/" + entity.DemandType + "/" + entity.EdiFile) + if err != nil { + errList = append(errList, model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: -1, + ErrorType: "", + ErrorInfo: "文件不存在", + ErrorStatus: "开", + }) + return errList, nil + } + file, err := os.Open("web/public/" + entity.DemandType + "/" + entity.EdiFile) + if err != nil { + errList = append(errList, model.HondaDemandErrorLst{ + DemandId: entity.DemandId, + Pos: -1, + ErrorType: "", + ErrorInfo: "文件不存在", + ErrorStatus: "开", + }) + return errList, nil } defer file.Close() reader := bufio.NewReader(file) @@ -217,7 +448,6 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( bodyRow := 0 totalQty := 0 var infoList []model.HondaDemandItemLst - var errList []model.HondaDemandErrorLst _planCode := "" _DemandYear := 0 _analysis := time.Time{} @@ -288,22 +518,14 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( _planCode = planCode } else if _planCode != planCode { //插入错误 - errorInfo := model.HondaDemandErrorLst{ + errList = append(errList, model.HondaDemandErrorLst{ DemandId: entity.DemandId, Pos: -8, ErrorType: "", ErrorInfo: "文件内PlanCode不一致无法解析", ErrorStatus: "开", - } - if entity.Parsed == 1 { - _ = errDao.InsertOne(&errorInfo) - } else { - _ = errDao.UpdateOne(&errorInfo) - } - //修改主表为带解析 - entity.Parsed = 3 - _ = dao.UpdateOne(&entity) - return false, info + }) + return errList, nil } entity.DemandWeek = demandWeek entity.PlanCode = planCode @@ -331,8 +553,10 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( info := &model.HondaDemandItemLst{} info.DemandId = entity.DemandId info.Pos = bodyRow + + _strArr2 := impl.bodyRoArr(str) + //读取body - strArr := strings.Split(str, " ") str := impl.DeleteExtraSpace(str) _strArr := strings.Split(str, " ") if _strArr[1] == "GRAND" { @@ -345,7 +569,8 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( } break } - dateStr, errList = impl.bodyInfo(_strArr, dateStr, info, strArr, errList, totalRow) + // + dateStr, errList = impl.bodyInfo(_strArr2, dateStr, info, errList, totalRow) totalQty += info.PlanQty infoList = append(infoList, *info) } @@ -361,29 +586,7 @@ func (impl *HondaDemandServiceImplement) AnalysisFile(info utils.ChannelsInfo) ( }) } - if len(infoList) > 100 { - var _infoList []model.HondaDemandItemLst - for k, v := range infoList { - _infoList = append(_infoList, v) - if (k > 0 && k%50 == 0) || k+1 == len(infoList) { - _ = infoDao.Insert(&_infoList) - _infoList = []model.HondaDemandItemLst{} - } - } - } else { - _ = infoDao.Insert(&infoList) - } - - if len(errList) > 0 { - entity.Parsed = 3 - _ = dao.UpdateOne(&entity) - _ = errDao.Insert(&errList) - } else { - entity.Parsed = 2 - _ = dao.UpdateOne(&entity) - } - - return false, info + return nil, infoList } func (impl *HondaDemandServiceImplement) headAnalysis(str string) (time.Time, int, error) { @@ -494,7 +697,7 @@ func (impl *HondaDemandServiceImplement) headWeek(str string, demandYear int) (i } return demandWeek, planCode, nil } -func (impl *HondaDemandServiceImplement) bodyInfo(_strArr []string, dateStr string, info *model.HondaDemandItemLst, strArr []string, _errList []model.HondaDemandErrorLst, totalRow int) (string, []model.HondaDemandErrorLst) { +func (impl *HondaDemandServiceImplement) bodyInfo(_strArr []string, dateStr string, info *model.HondaDemandItemLst, _errList []model.HondaDemandErrorLst, totalRow int) (string, []model.HondaDemandErrorLst) { defer func() { if err := recover(); err != nil { _errList = append(_errList, model.HondaDemandErrorLst{ @@ -506,42 +709,17 @@ func (impl *HondaDemandServiceImplement) bodyInfo(_strArr []string, dateStr stri }) } }() - //按空格拆分数组 如果下角标2不为空字符串 既是时间 - oKey := 2 - codeKey := 7 - colorKey := 9 - planQtyKey := 11 - if strArr[4] != "" { - dateArr := strings.Split(strArr[4], "/") - dateStr = "" - for i := 2; i >= 0; i-- { - if i != 2 { - dateStr += "-" - } - dateStr += dateArr[i] - } - oKey += 1 - codeKey += 1 - colorKey += 1 - planQtyKey += 1 + if _strArr[0] != "" { + //为时间 + dateStr = _strArr[0] } - if _strArr[oKey] == "M" { - codeKey -= 2 - colorKey -= 2 - planQtyKey -= 2 - } //时间转换 if result, err := time.ParseInLocation("2006-01-02", dateStr, TimeLocationShangHai); err == nil { info.DeliveryDate = grmi.Date(result.In(TimeLocationShangHai)) } - code := _strArr[codeKey] - color := _strArr[colorKey] - planQty := _strArr[planQtyKey] - - info.Color = color - - if code == "" { + info.Color = _strArr[4] + if info.Color == "" { _errList = append(_errList, model.HondaDemandErrorLst{ DemandId: info.DemandId, Pos: info.Pos, @@ -549,23 +727,12 @@ func (impl *HondaDemandServiceImplement) bodyInfo(_strArr []string, dateStr stri ErrorInfo: fmt.Sprintf("未获取到车型配置代码,文件行数:%d", totalRow), ErrorStatus: "开", }) - } else { - codeArr := strings.Split(code, "-") - if len(codeArr) != 4 { - _errList = append(_errList, model.HondaDemandErrorLst{ - DemandId: info.DemandId, - Pos: info.Pos, - ErrorType: "", - ErrorInfo: fmt.Sprintf("车型配置代码解析失败,文件行数:%d;", totalRow), - ErrorStatus: "开", - }) - } else { - code = codeArr[0] + codeArr[1] + "-" + codeArr[2] + color - } } - if i, err := strconv.Atoi(planQty); err == nil { + i, err := strconv.Atoi(_strArr[5]) + if err == nil { info.PlanQty = i - } else { + } + if err != nil || info.PlanQty == 0 { _errList = append(_errList, model.HondaDemandErrorLst{ DemandId: info.DemandId, Pos: info.Pos, @@ -574,9 +741,64 @@ func (impl *HondaDemandServiceImplement) bodyInfo(_strArr []string, dateStr stri ErrorStatus: "开", }) } - info.ProductFamilyId = code + info.ProductFamilyId = _strArr[2] + "-" + _strArr[3] + "-" + _strArr[4] return dateStr, _errList } +func (impl *HondaDemandServiceImplement) bodyRoArr(str string) []string { + bodyArr := []string{"", "", "", "", "", ""} + _str := "" + _dateArr := []string{"", "", ""} + + for k, v := range str { + if k == 4 || k == 5 { + if string(v) == "" { + _dateArr[0] += "0" + } else { + _dateArr[0] += string(v) + } + } + if k == 7 || k == 8 { + if string(v) == "" { + _dateArr[1] += "0" + } else { + _dateArr[1] += string(v) + } + } + if k == 10 || k == 11 || k == 12 || k == 13 { + if string(v) == "" { + _dateArr[2] += "0" + } else { + _dateArr[2] += string(v) + } + bodyArr[0] = _dateArr[2] + "-" + _dateArr[1] + "-" + _dateArr[0] + } + if k == 15 || k == 16 || k == 17 { + bodyArr[1] += string(v) + } + if k == 57 || k == 59 || k == 60 || k == 61 { + bodyArr[2] += string(v) + } + if k == 63 || k == 64 || k == 65 { + bodyArr[3] += string(v) + } + if k == 82 { + bodyArr[4] = string(v) + } + if k == 85 || k == 86 || k == 87 || k == 88 || k == 89 || k == 90 || k == 91 || k == 92 || k == 93 || k == 94 || k == 95 || k == 96 || k == 97 || k == 98 || k == 99 || k == 100 || k == 101 { + _str += string(v) + if k == 101 { + //字符串转数组 去数组第二位 + _strArr := strings.Split(impl.DeleteExtraSpace(_str), " ") + if len(_strArr) < 2 { + bodyArr[5] = "" + } else { + bodyArr[5] = _strArr[1] + } + } + } + } + return bodyArr +} func (impl *HondaDemandServiceImplement) DeleteExtraSpace(s string) string { //删除字符串中的多余空格,有多个空格时,仅保留一个空格 s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格 diff --git a/services/pln/implments/HondaDemandErrorLst.service.impl.go b/services/pln/implments/HondaDemandErrorLst.service.impl.go index 8a3a297..1b8238c 100644 --- a/services/pln/implments/HondaDemandErrorLst.service.impl.go +++ b/services/pln/implments/HondaDemandErrorLst.service.impl.go @@ -155,6 +155,27 @@ func (impl *HondaDemandErrorLstServiceImplement) SelectOne(user *global.User, de return result, nil } +func (impl *HondaDemandErrorLstServiceImplement) Repair(user *global.User, demandId string, pos int) error { + grmi.Log(user, "/services/pln/implments/HondaDemandErrorLst.service.impl.go", "Repair", "修复一个HondaDemandErrorLst") + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + dao := dal.NewHondaDemandErrorLstDAO(session, user.PlantNr, user.UserId) + record, err := dao.SelectOne(demandId, pos) + if err != nil { + return err + } + if record == nil { + return grmi.NewBusinessError("不存在指定记录!") + } + record.ErrorStatus = "关" + err = dao.UpdateOne(record) + if err != nil { + return err + } + return nil +} + /****************************************************************************** * * @Reference LAPP_ACURA_MOM_BACKEND/services/pln/HondaDemandErrorLstService.UpdateOne diff --git a/web/controllers/common/CommonUploadPic.rest.go b/web/controllers/common/CommonUploadPic.rest.go index 6631a3e..a054e2a 100644 --- a/web/controllers/common/CommonUploadPic.rest.go +++ b/web/controllers/common/CommonUploadPic.rest.go @@ -10,6 +10,7 @@ import ( "fmt" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/core/router" + "os" "strings" ) @@ -75,6 +76,73 @@ func RegisterUploadMustPic(party router.Party, httpMethod string, path string, m }) } +/****************************************************************************** + * + * @Function Name : RegisterUploadMustPic + *----------------------------------------------------------------------------- + * + * @Description : 需求文件上传归档 + * + * @Function Parameters : 路由分组 + * + * @Function Parameters : HTTP方法 + * + * @Function Parameters : 路径 + * + * @Function Parameters : 实际处理请求的方法 + * + * @Author : 代码生成器创建 + * + * @Date : 2021-03-18 22:49:12 + * + ******************************************************************************/ +func RegisterUploadHondademand(party router.Party, httpMethod string, path string, method func(*global.User) error) { + + party.Handle(httpMethod, path, func(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + if !ok { + return + } + + var err error = nil + //获取通过iris.WithPostMaxMemory获取的最大上传值大小。 + maxSize := ctx.Application().ConfigurationReadOnly().GetPostMaxMemory() + err = ctx.Request().ParseMultipartForm(maxSize) + if err != nil { + ctx.StatusCode(iris.StatusInternalServerError) + ctx.WriteString(err.Error()) + return + } + form := ctx.Request().MultipartForm + files := form.File["upload"] + var uploadfiles []string + for _, file := range files { + if !utils.ValueIsEmpty(file.Filename) { + filename := strings.Split(file.Filename, ".") + filetype := filename[1] + guid := utils.MakeOrderSn(user.UserId) + filPath := guid + "." + filetype + savePath := "web/public/" + ctx.PostValue("DemandType") + "/" + guid + "." + filetype + if _, err := os.Stat("web/public/" + ctx.PostValue("DemandType")); os.IsNotExist(err) { + // 必须分成两步:先创建文件夹、再修改权限 + os.Mkdir("web/public/"+ctx.PostValue("DemandType"), 0777) //0777也可以os.ModePerm + os.Chmod("web/public/"+ctx.PostValue("DemandType"), 0777) + } + + // 上传文件至指定目录 + err = utils.SaveUploadedFile(file, savePath) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + uploadfiles = append(uploadfiles, filPath) + } + } + picPath := strings.Join(uploadfiles, ",") + supports.Ok(ctx, supports.OptionSuccess, picPath) + }) +} + /****************************************************************************** * * @Function Name : RegisterUploadPic @@ -95,4 +163,5 @@ func RegisterUploadMustPic(party router.Party, httpMethod string, path string, m ******************************************************************************/ func RegisterUploadPic(party router.Party, path string, method func(*global.User) error) { RegisterUploadMustPic(party, "POST", path, method) + RegisterUploadHondademand(party, "POST", "/uploadHondademand", method) } diff --git a/web/controllers/pln/HondaDemand.rest.go b/web/controllers/pln/HondaDemand.rest.go index f1b775e..d60f771 100644 --- a/web/controllers/pln/HondaDemand.rest.go +++ b/web/controllers/pln/HondaDemand.rest.go @@ -150,6 +150,26 @@ func RegisterDeleteOneHondaDemand(party router.Party, path string, method func(* RegisterIDOfHondaDemand(party, "DELETE", path+"/{demandId:string}", method) } +func RegisterAnalysisHondaDemand(party router.Party, path string, method func(*global.User, string) error) { + party.Handle("PUT", path+"/{demandId:string}", func(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + + var err error = nil + demandId := ctx.Params().GetString("demandId") + + err = method(user, demandId) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + supports.Ok(ctx, supports.OptionSuccess, nil) + }) +} + /****************************************************************************** * * @Function Name : RegisterSelectOneHondaDemand diff --git a/web/controllers/pln/HondaDemandErrorLst.rest.go b/web/controllers/pln/HondaDemandErrorLst.rest.go index 2f34b5d..86eecbe 100644 --- a/web/controllers/pln/HondaDemandErrorLst.rest.go +++ b/web/controllers/pln/HondaDemandErrorLst.rest.go @@ -155,6 +155,31 @@ func RegisterDeleteOneHondaDemandErrorLst(party router.Party, path string, metho RegisterIDOfHondaDemandErrorLst(party, "DELETE", path+"/{demandId:string}/{pos:int}", method) } +func RegisterRepairHondaDemandErrorLst(party router.Party, path string, method func(*global.User, string, int) error) { + party.Handle("PUT", path+"/{demandId:string}/{pos:int}", func(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + + var err error = nil + demandId := ctx.Params().GetString("demandId") + pos, err := ctx.Params().GetInt("pos") + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + + err = method(user, demandId, pos) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + supports.Ok(ctx, supports.OptionSuccess, nil) + }) +} + /****************************************************************************** * * @Function Name : RegisterSelectOneHondaDemandErrorLst diff --git a/web/controllers/pln/pln.go b/web/controllers/pln/pln.go index a2ea9aa..eb022a9 100644 --- a/web/controllers/pln/pln.go +++ b/web/controllers/pln/pln.go @@ -69,6 +69,7 @@ func RegisterRoutes() { // RegisterUpdateOneHondaDemand(hondademand, "/updateone", serviceOfHondaDemand.UpdateOne) // HondaDemand修改多条 // RegisterUpdateHondaDemand(hondademand, "/update", serviceOfHondaDemand.Update) + RegisterAnalysisHondaDemand(hondademand, "/analysis", serviceOfHondaDemand.Analysis) // HondaDemandErrorLst的路由组 hondademanderrorlst := party.Party("/hondademanderrorlst") @@ -88,6 +89,7 @@ func RegisterRoutes() { RegisterQueryHondaDemandErrorLst(hondademanderrorlst, "/query", serviceOfHondaDemandErrorLst.SelectAndPaging) // HondaDemandErrorLst查询一条 RegisterSelectOneHondaDemandErrorLst(hondademanderrorlst, "/selectone", serviceOfHondaDemandErrorLst.SelectOne) + RegisterRepairHondaDemandErrorLst(hondademanderrorlst, "/repair", serviceOfHondaDemandErrorLst.Repair) // HondaDemandErrorLst修改一条 // RegisterUpdateOneHondaDemandErrorLst(hondademanderrorlst, "/updateone", serviceOfHondaDemandErrorLst.UpdateOne) // HondaDemandErrorLst修改多条