Browse Source

需求导入 转化客户订单

pull/19/head
yehongyang 3 years ago
parent
commit
a2eff4d6ba
14 changed files with 611 additions and 134 deletions
  1. +21
    -0
      dao/me/ProductFamily.dao.go
  2. +28
    -0
      dao/me/implments/ProductFamily.dao.impl.go
  3. +19
    -0
      dao/pln/HondaDemand.dao.go
  4. +12
    -0
      dao/pln/implments/HondaDemand.dao.impl.go
  5. +22
    -21
      models/me/ProductFamily.model.go
  6. +17
    -0
      services/pln/HondaDemand.service.go
  7. +19
    -0
      services/pln/HondaDemandErrorLst.service.go
  8. +1
    -0
      services/pln/HondaDemandItemLst.service.go
  9. +335
    -113
      services/pln/implments/HondaDemand.service.impl.go
  10. +21
    -0
      services/pln/implments/HondaDemandErrorLst.service.impl.go
  11. +69
    -0
      web/controllers/common/CommonUploadPic.rest.go
  12. +20
    -0
      web/controllers/pln/HondaDemand.rest.go
  13. +25
    -0
      web/controllers/pln/HondaDemandErrorLst.rest.go
  14. +2
    -0
      web/controllers/pln/pln.go

+ 21
- 0
dao/me/ProductFamily.dao.go View File

@ -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


+ 28
- 0
dao/me/implments/ProductFamily.dao.impl.go View File

@ -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


+ 19
- 0
dao/pln/HondaDemand.dao.go View File

@ -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


+ 12
- 0
dao/pln/implments/HondaDemand.dao.impl.go View File

@ -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


+ 22
- 21
models/me/ProductFamily.model.go View File

@ -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:"-"`
}
/******************************************************************************


+ 17
- 0
services/pln/HondaDemand.service.go View File

@ -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


+ 19
- 0
services/pln/HondaDemandErrorLst.service.go View File

@ -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


+ 1
- 0
services/pln/HondaDemandItemLst.service.go View File

@ -60,6 +60,7 @@ type HondaDemandItemLstService interface {
*
******************************************************************************/
DeleteOne(*global.User, string, int) error
/******************************************************************************
*
* @Function Name : SelectOne


+ 335
- 113
services/pln/implments/HondaDemand.service.impl.go View File

@ -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为空格


+ 21
- 0
services/pln/implments/HondaDemandErrorLst.service.impl.go View File

@ -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


+ 69
- 0
web/controllers/common/CommonUploadPic.rest.go View File

@ -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)
}

+ 20
- 0
web/controllers/pln/HondaDemand.rest.go View File

@ -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


+ 25
- 0
web/controllers/pln/HondaDemandErrorLst.rest.go View File

@ -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


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

@ -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修改多条


Loading…
Cancel
Save