如何给 带有客户名的包裹 分配到 拥有同样客户名的料仓 工作

现状

包裹没有客户名,料仓没有客户名,包裹能自动选择尺寸合适的料仓工作。

目标

给带有客户名的包裹分配到拥有同样客户名的料仓工作。

思路

1.导入进来的包裹csv文件格式,新增一个字段CustomerName。

2.在料仓表中新增字PaperPdcName

type StockBinModel struct {
	global.GVA_MODEL

	Name string `json:"name" gorm:"comment:名称"`
	//这是charles改的,4.1
	PaperPdcName string `json:"paperPdcName" gorm:"comment:客户名"`
	//
	PaperWidth  float32 `json:"paperWidth" gorm:"comment:纸垛宽度"`
	PaperHeight float32 `json:"paperHeight" gorm:"default:5;comment:纸垛厚度"`
	//Sort        uint                 `json:"sort" gorm:"default:0;type:smallint;comment:排序"`
	Offset float32              `json:"offset" gorm:"default:0;type:float;comment:偏移量"`
	PLCTag string               `json:"plcTag" gorm:"comment:plc标签"`
	Status *PaperTypeStatusEnum `json:"status" gorm:"default:1;comment:状态"`
	//IsAuxiliary bool                 `json:"isAuxiliary" gorm:"default:0;comment:是否副机料仓"`

	Pile uint `json:"pile" gorm:"default:1;type:smallint;comment: 层"`

	AuxiliaryMachineId *uint             `form:"auxiliaryMachineId" json:"auxiliaryMachineId" gorm:"comment:副机ID"`
	AuxiliaryMachine   *AuxiliaryMachine `json:"auxiliaryMachine" gorm:"foreignKey:AuxiliaryMachineId"`
}

// 获取表名.
func (p StockBinModel) TableName() string {
	return "paper_type_templates"
}

3.解析CSV文件

// 监听任务目录
go controller.HotDirMonitorTask()

				// 非删除,都应该触发文件夹中文件夹的再次整体解析
				if ev.Op&fsnotify.Remove != fsnotify.Remove {
					HandleImportFiles()
				}
3.1观察到创建了一个packagingBranches,猜测应该是把解析的csv文件放到这里面。
var packagingBranches []model.PackagingBranchModel

// 包裹分组
type PackagingBranchModel struct {
	global.GVA_MODEL

	TemplateId uint                   `form:"templateId" json:"templateId" gorm:"comment:模板ID"`
	Template   PackagingTemplateModel `json:"template" gorm:"foreignKey:TemplateId"`

	Length              float32                    `form:"length" json:"length" gorm:"comment:包长度"`
	Width               float32                    `form:"width" json:"width" gorm:"comment:包宽度"`
	Height              float32                    `form:"height" json:"height" gorm:"comment:包厚度"`
	Status              *PackagingBranchStatusEnum `form:"status" json:"status" gorm:"comment:状态"`
	CalculationPriority CalculationPriorityEnum    `form:"calculationPriority" json:"calculationPriority" gorm:"comment:计算优先的方案,use、machine"`
	// 长宽对调是否默认不使用
	IsExchangeLast bool                   `form:"isExchangeLast" json:"isExchangeLast" gorm:"comment:"`
	Priority       *PackagingPriorityEnum `form:"priority" json:"priority" gorm:"comment:优先级,数值越高优先级越高"`
	OrderNumber    string                 `form:"orderNumber" json:"orderNumber" gorm:"comment:订单号"`
	Total          uint                   `form:"total" json:"total" gorm:"comment:压切任务数量"`
	SuccessCount   uint                   `form:"successCount" json:"successCount" gorm:"comment:加工完成数量"`
	FailCount      uint                   `form:"failCount" json:"failCount" gorm:"comment:失败数量"`
	Remark         string                 `form:"remark" json:"remark" gorm:"comment:备注"`
	Paramters      string                 `form:"parameters" json:"parameters" gorm:"comment:参数列表"`

	Packagings []PackagingModel `json:"packagings" gorm:"foreignKey:BranchId"`
}

// 压切任务表.
type PackagingModel struct {
	global.GVA_MODEL

	OperUser string `form:"operUser" json:"operUser" gorm:"操作用户"`
	// 模板(箱型文件)ID
	BranchId   uint                   `form:"branchId" json:"branchId" gorm:"index:idx_search;comment:批次ID"`
	TemplateId uint                   `form:"templateId" json:"templateId" gorm:"comment:模板ID"`
	Template   PackagingTemplateModel `json:"template" gorm:"foreignKey:TemplateId"`

	Length     float32 `form:"packLength" json:"packLength" gorm:"comment:包长度"`
	Width      float32 `form:"packWidth" json:"packWidth" gorm:"comment:包宽度"`
	Height     float32 `form:"packHeight" json:"packHeight" gorm:"comment:包厚度"`
	UsedLength float32 `form:"usedLength" json:"usedLength" gorm:"comment:压切的总长度"`
	UsedWidth  float32 `form:"usedWidth" json:"usedWidth" gorm:"comment:压切的总宽度"`

	Status           *PackagingStatusEnum   `form:"status" json:"status" gorm:"comment:状态"`
	Priority         *PackagingPriorityEnum `form:"priority" json:"priority" gorm:"comment:优先级,数值越高优先级越高"`
	CuttingCount     uint                   `form:"cuttingCount" json:"cuttingCount" gorm:"comment:裁切包数量"`
	SchemeType       string                 `form:"schemeType" json:"schemeType" gorm:"comment:实际试用方案类型"`
	ReadySchemeTypes string                 `form:"readySchemeTypes" json:"readySchemeTypes" gorm:"comment:预选中方案类型"`

	// 计算优先的方案,use、machine
	CalculationPriority CalculationPriorityEnum `form:"calculationPriority" json:"calculationPriority" gorm:"comment:计算优先的方案,use、machine"`
	// 长宽对调是否默认不使用
	IsExchangeLast bool `form:"isExchangeLast" json:"isExchangeLast" gorm:"comment:"`

	PaperTypeId uint `form:"paperTypeId" json:"paperTypeId" gorm:"comment:料仓ID"`
	//PaperWidth  float32   `form:"paperWidth" json:"paperWidth" gorm:"comment:料仓宽度"`
	UsedPaperName   string  `form:"usedPaperName" json:"usedPaperName" gorm:"comment:使用料仓的编码"`
	UsedPaperWidth  float32 `form:"usedPaperWidth" json:"usedPaperWidth" gorm:"comment:压切所用纸皮的宽度"`
	UsedPaperHeight float32 `form:"usedPaperHeight" json:"usedPaperHeight" gorm:"comment:使用料仓的纸皮厚度"`

	// 料仓
	PaperType StockBinModel `json:"paperType" gorm:"foreignKey:PaperTypeId"`

	OrderNumber string `form:"orderNumber" json:"orderNumber" gorm:"comment:订单号"`
	Remark      string `form:"remark" json:"remark" gorm:"comment:备注"`
	Customer1   string `form:"customer1" json:"customer1" gorm:"comment:自定义列1"`
	Customer2   string `form:"customer2" json:"customer2" gorm:"comment:自定义列2"`
	// 箱型自定义参数
	Customer3 string `form:"customer2" json:"customer3" gorm:"comment:自定义列3"`

	// 发送到 PLC 的时间
	SentAt *time.Time `form:"sentTime" json:"sentTime" gorm:"comment:发送到 PLC 的时间"`

	// 上传到阿里云的时间
	UploadedAt *time.Time `form:"uploadedTime" json:"uploadedTime" gorm:"comment:上传到阿里云的时间"`

	// 当前是主机时,存储的是对应的副机包裹id;如果当前是副机,存储是的对应的主机的包裹id
	AnotherPackagingId uint `form:"anotherPackagingId" json:"anotherPackagingId" gorm:"comment:另外一台主机上的包裹ID"`

	// 流程
	WorkFlow WorkFlowStruct `form:"workFlow" json:"workFlow" gorm:"comment:流程"`

	// 打印状态
	PrintStatus *PackagingPrintStatusEnum `form:"printStatus" json:"printStatus" gorm:"comment:打印状态"`
}

        看不懂这个aiegle什么意思,没有注释。ImportFileTypeEnum_Aiege = "aiegle" 

        麻了,aiegle对应的是一个特殊的客户。遇到防御性代码了。

3.2进入到解析文件的方法

        遇到防御性代码了。

parsePackagingBranchWithFile_Aiegle(fileName, originFileContent)

        这个才是普遍的。

parsePackagingBranchWithFile(fileName, originFileContent)

        为了使该系统具有适应性,我把这个客户名单独拎出来做个分支。要用这个分支的话就在配置文件改里改就好了。

else if global.GVA_CONFIG.Excel.ImportFileType == config.ImportFileTypeEnum_MS {
			//charles 客户名 6.20
			packagingBranches, err =
				parsePackagingBranchWithFile_MS(fileName, originFileContent)

        先把它放到结构体里 ,因为我调试这边一直有问题,所以先不测。

				case 9:
					var customer = value
					//获取客户名 charles6.10
					packagingBranch.PdcPaperName = customer

 4.寻找合适料仓

func getInfoList(tx *gorm.DB, condition resourceReq.PaperTypeSearch) (
	list []model.StockBinModel, total int64, err error) {

// 获取可用的料仓列表
func (instance PaperTypeService) GetMineAvailableList() (
	list []model.StockBinModel, total int64, err error) {

4.1 这涉及到了查询数据库,里面有主机和副机之分。

先查询了可用的料仓列表,居然没有传参匹配要用的幅宽。

4.2查了全部可用的料仓,要找到怎么根据传入的幅宽选择合适的料仓才行。

4.3 计算结束后它是有显示料仓的选择的

所以方向没问题,继续找。

********************************************************************************

5.现在根据断点从新开始

5.1解析完文件会将,文件数据保存到这个表里

			// 保存数据
			for index, _ := range packagingBranches {
				packagingBranches[index].Packagings = []model.PackagingModel{}
			}

// 压切任务表.
type PackagingModel struct {

 我得新增字段customer

6.又有一个方面感觉从这反面出发也可以

在查询全部可用料仓的时候,我把包裹自带的字段也传过去,查询到的结果符合要求。

该怎么传呢?

我想直接从这个包导到另一个包,但是报错了

package gitee.com/cut-machine-go/server imports gitee.com/cut-machine-go/server/cmd/controller imports gitee.com/cut-machine-go/server/plugin/packaging/service imports gitee.com/cut-machine-go/server/cmd/controller: import cycle not allowed
func getInfoList2(tx *gorm.DB, condition resourceReq.PaperTypeSearch) (

在这里改了,目测好像可以了。有待测试。逻辑是文件传过来的时候,修改一个全局变量,将客户名赋值给这个全局变量,在选择料仓的时候查表的时候查询与客户名一模一样的料仓。

要解决一个问题:文件传过来的是中文,但是我打印出来我获得的客户名却是乱码了。数字和英文没问题。

找到了:要么在传给我的文件改成utf-8编码格式,要么只能我在源代码上面改:怎么将这个不知道什么格式编码的文件读取并转换成功。

系统有多种的模式,该怎么分配呢,比如我现在选择的客户名模式。在配置文件里改,importFileType:ms。

func (packagingService *PackagingService) Calculate2(packaging model.PackagingModel) (

这个是用的,他有个calculate 是不用的。

这个思路没问题,现在就是要更新手动新增包裹内容

新增个客户名选择,不要让工人输入。将客户名查询出来。 添加一个接口,查询客户名。

添加一个看看

 写好查询接口

该功能已经完成了

为了与前版本(主线)界面上区分开来,我用了一个配置文件来更改,只要改配置文件就可以从主线转换到这个客户名版本。

在set up 里面。

const configData = ref([
  {
    excel:{
      importFileType: "packsize",
    },
  }
]);
// 获取系统配置
const getApplicationConfigFunc = async () => {
  const table = await getApplicationConfig();
  if (table.code === 0) {
    configData.value = table.data;
  }
};
getApplicationConfigFunc();
  <el-form-item label="客户名" prop="pdcPaperName" v-if="configData.excel.importFileType=='MS'">

在fromdata里面也加一个字段客户名,注意这个字段要与后端接受的要一致。

在发起创建任务的时候也加一个判断

	if global.GVA_CONFIG.Excel.ImportFileType == config.ImportFileTypeEnum_MS {
		global.CustomerHotFolders = singleReq.PdcPaperName
		fmt.Println(global.CustomerHotFolders)
	}

在获取可用料仓的时候也加一个判断

	if global.GVA_CONFIG.Excel.ImportFileType == config.ImportFileTypeEnum_MS {
		return getInfoList2(nil, searchCondition)
	}
	return getInfoList(nil, searchCondition)

7. 检查 重做任务的时候会不会调用料仓,还是会调用其他数据。

func (resourceApi *PackagingBranchApi) ReWork(c *gin.Context) {

根据传入的ID和需要重新加工的数量。根据传入的id,从数据库PackagingBranchService表中查到对应id的对象。创建新任务,传入数量

进入deepCOPY2REWORK,包含所有的数据所有数据。

在重新加工的api里面也加了修改全局变量的CustomerHotFolders 。

8.如果在这个版本上想设置一个

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值