As a huge company which shares about 30% of the world's Christmas craft market, it requires a complicated working system to manage whole process, including manufacturing products, receiving orders and export. Obviously, hiring staff to manage it is a possible way but humans are more likely make fatal mistakes which are unbearable for such a massive factory. Furthermore, if Xuli decided to hire workers, a large unnecessary cost would appear due to expensive employee wages.
When all aspects are considered carefully, the option of being a lights out factory has a better cost performance ratio compared to the previous one.
The WMS system is a part of lights out factory, the graph shown below is a typical structure for it.
A Typical Example
As can be seen, the functions of ERP (Enterprise Resource Planning) and WMS are task allocation and logging. In detail, ERP manages the existing tasks and WMS manages the inventory, the graph shown below describes the relationship between them
The relationship between ERP and WMS
During this summer internship, I focused on how the query system of WMS works and tried to use my knowledge to algorithms to contribute some code to it.
After having a discussion with the company's software engineer, I decided to try to complete the code of its query system. The system should have these functions (the format of the input should be the ID unless clarified special cases):
After days of work, I completed the last bit of the query system, the partial source code is below (The copyright of the code is owned by Zhejiang TENTAI Information Technology Co., Ltd., the core code is not allowed to be shown).
x
using System.Data;
using TenTai.Web.DAL;
namespace TenTai.Web.BLL{
/// <summary>
/// </summary>
public class SystemQueryBll{
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="moduleSn"></param>
/// <returns></returns>
public static DataSet GetStringPrint(string workOrder, string moduleSn){
return SystemQueryDal.GetStringPrint(workOrder, moduleSn);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="erpBatch"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet QueryReceiveMaterialCell(string workshop, string erpBatch, string startTime, string endTime){
return SystemQueryDal.QueryReceiveMaterialCell(workshop, erpBatch, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="erpBatch"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet QueryReceiveCellCarton(string workshop, string erpBatch, string startTime, string endTime){
return SystemQueryDal.QueryReceiveCellCarton(workshop, erpBatch, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="transSysid"></param>
/// <returns></returns>
public static DataSet QueryReceiveMaterialCellDetail(string transSysid){
return SystemQueryDal.QueryReceiveMaterialCellDetail(transSysid);
}
/// <summary>
/// </summary>
/// <param name="userId"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="setName"></param>
/// <param name="line"></param>
/// <returns></returns>
public static DataSet GetCurrentDutyData(string userId, string startTime, string endTime, string setName, string line){
return SystemQueryDal.GetCurrentDutyData(userId, startTime, endTime, setName, line);
}
/// <summary>
/// </summary>
/// <param name="userId"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="setName"></param>
/// <param name="line"></param>
/// <returns></returns>
public static DataSet GetDutyHistoryData(string userId, string startTime, string endTime, string setName, string line){
return SystemQueryDal.GetDutyHistoryData(userId, startTime, endTime, setName, line);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="workOrder"></param>
/// <param name="line"></param>
/// <returns></returns>
public static DataSet QueryMaterialRework(string workshop, string startTime, string endTime, string workOrder, string line){
return SystemQueryDal.QueryMaterialRework(workshop, startTime, endTime, workOrder, line);
}
/// <summary>
/// </summary>
/// <param name="moduleLotId"></param>
/// <returns></returns>
public static DataSet QueryMaterialReworkDetail(string moduleLotId){
return SystemQueryDal.QueryMaterialReworkDetail(moduleLotId);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="line"></param>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="minEfficiency"></param>
/// <param name="maxEfficiency"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet QueryIssueMaterialCell(string workshop, string line, string workOrder, string erpBatch, string minEfficiency, string maxEfficiency, string startTime, string endTime){
return SystemQueryDal.QueryIssueMaterialCell(workshop, line, workOrder, erpBatch, minEfficiency,
maxEfficiency, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="transSysId"></param>
/// <returns></returns>
public static DataSet QueryIssueMaterialCellDetail(string transSysId){
return SystemQueryDal.QueryIssueMaterialCellDetail(transSysId);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="moduleLotId"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetModuleDetailTest(string workOrder, string moduleLotId, string startTime, string endTime){
return SystemQueryDal.GetModuleDetailTest(workOrder, moduleLotId, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="cartonNo"></param>
/// <returns></returns>
public static DataSet GetDetailByCarton(string cartonNo){
return SystemQueryDal.GetDetailByCarton(cartonNo);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="elType"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetELTest(string workOrder, string elType, string startTime, string endTime){
return SystemQueryDal.GetELTest(workOrder, elType, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="moduleSn"></param>
/// <param name="attrName"></param>
/// <returns></returns>
public static DataSet GetPicturePathByModuleSn(string moduleSn, string attrName){
return SystemQueryDal.GetPicturePathByModuleSn(moduleSn, attrName);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <returns></returns>
public static DataSet GetStep(string workshop){
return SystemQueryDal.GetStep(workshop);
}
/// <summary>
/// </summary>
/// <param name="step"></param>
/// <param name="line"></param>
/// <returns></returns>
public static DataSet GetEqpByStep(string step, string line){
return SystemQueryDal.GetEqpByStep(step, line);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="workOrder"></param>
/// <param name="step"></param>
/// <param name="line"></param>
/// <param name="eqp"></param>
/// <param name="module"></param>
/// <param name="effMin"></param>
/// <param name="effMax"></param>
/// <param name="teamCode"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetTrakinDetail(string workshop, string workOrder, string step, string line, string eqp, string module, string effMin, string effMax, string teamCode, string startTime, string endTime){
return SystemQueryDal.GetTrakinDetail(workshop, workOrder, step, line, eqp, module, effMin, effMax, teamCode, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="eqp"></param>
/// <returns></returns>
public static DataSet GetMaterialLoadCarton(string workOrder, string erpBatch, string eqp){
return SystemQueryDal.GetMaterialLoadCarton(workOrder, erpBatch, eqp);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="step"></param>
/// <param name="moduleStart"></param>
/// <param name="moduleEnd"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet SelectModuleSnNotExists(string workshop, string step, string moduleStart, string moduleEnd, string startTime, string endTime){
return SystemQueryDal.SelectModuleSnNotExists(workshop, step, moduleStart, moduleEnd, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="line"></param>
/// <returns></returns>
public static DataSet GetMaterialLoadBuffer(string workOrder, string erpBatch, string line){
return SystemQueryDal.GetMaterialLoadBuffer(workOrder, erpBatch, line);
}
/// <summary>
/// </summary>
/// <param name="workshop"></param>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <param name="teamCode"></param>
/// <param name="line"></param>
/// <param name="eqp"></param>
/// <param name="module"></param>
/// <param name="eff"></param>
/// <returns></returns>
public static DataSet SelectModuleAssociate(string workshop, string startDate, string endDate, string teamCode, string line, string eqp, string module, string eff){
return SystemQueryDal.SelectModuleAssociate(workshop, startDate, endDate, teamCode, line, eqp, module, eff);
}
/// <summary>
/// </summary>
/// <param name="moduleStart"></param>
/// <param name="moduleEnd"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet SelectNotDistributionModule(string moduleStart, string moduleEnd, string startTime, string endTime){
return SystemQueryDal.SelectNotDistributionModule(moduleStart, moduleEnd, startTime, endTime);
}
/// <summary>
/// </summary>
/// <returns></returns>
public static DataSet QueryMaterialCell(string workshop, string erpBatch, string minEff, string maxEff, string grade, string spec, string thickness){
return SystemQueryDal.QueryMaterialCell(workshop, erpBatch, minEff, maxEff, grade, spec, thickness);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="line"></param>
/// <param name="materialType"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetUnLoadData(string workOrder, string erpBatch, string line, string materialType, string startTime, string endTime){
return SystemQueryDal.GetUnLoadData(workOrder, erpBatch, line, materialType, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="eff"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetCTMProofing(string workOrder, string eff, string startTime, string endTime){
return SystemQueryDal.GetCTMProofing(workOrder, eff, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="eff"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetCTMProofingHistory(string workOrder, string erpBatch, string eff, string startTime, string endTime){
return SystemQueryDal.GetCTMProofingHistory(workOrder, erpBatch, eff, startTime, endTime);
}
/// <summary>
/// </summary>
/// <param name="materialType"></param>
/// <param name="erpBatch"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="isForPrepareGroup"></param>
/// <returns></returns>
public static DataSet GetReceiveMaterial(string materialType, string erpBatch, string startTime, string endTime, bool isForPrepareGroup){
return SystemQueryDal.GetReceiveMaterial(materialType, erpBatch, startTime, endTime,
isForPrepareGroup);
}
/// <summary>
/// </summary>
/// <param name="materialType"></param>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetProcessMaterial(string materialType, string workOrder, string erpBatch, string startTime, string endTime){
return SystemQueryDal.GetProcessMaterial(materialType, workOrder, erpBatch, startTime, endTime);
}
/// <summary
/// </summary>
/// <param name="materialType"></param>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="isForPrepareGroup"></param>
/// <returns></returns>
public static DataSet GetIssueMaterial(string materialType, string workOrder, string erpBatch, string startTime, string endTime, bool isForPrepareGroup){
return SystemQueryDal.GetIssueMaterial(materialType, workOrder, erpBatch, startTime, endTime, isForPrepareGroup);
}
/// <summary>
/// </summary>
/// <param name="workOrder"></param>
/// <param name="erpBatch"></param>
/// <param name="line"></param>
/// <param name="materialType"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static DataSet GetLoadData(string workOrder, string erpBatch, string line, string materialType, string startTime, string endTime){
return SystemQueryDal.GetLoadData(workOrder, erpBatch, line, materialType, startTime, endTime);
}
The internship in Xuli is a memorable experience because it was my first time to work on industrial programming. Because of the syllabus, I had learnt Free Pascal, C++ (my current favorite programming language) and python but I knew nothing about C#. Thanks to the patience of the software engineer who taught me so that I could get familiar with C# quickly, however, there are still uncountable things waiting me to learn.