物流平台开发说明

定项目名为demo2,使用jdcloud_ganlan作为项目模板,用git_clone.sh工具(在jdcloud-ganlan的tool目录下有)创建新项目。

git_clone.shjdcloud-ganlandemo2注意:不要直接用gitclone命令,在git_clone.sh工具中调用了gitclone并做了专门设置。

cdtoolmakemeta(将会修改server/tool/upgrade/META文件,应将它提交到git库)注意:windows版本make工具从这里下载\server-pc-mingw.zip,解压到可执行目录(如d:,将它加到系统环境变量PATH中),确保可以执行命令make。

在线创建数据模型:

在开发过程中,常常要修改表或字段,也可以用以下命令来升级数据库:

cdtoolshupgrade.shinitdb但最终上线前应通过makemeta来更新meta文件,以便于新环境下在线部署。在线创建或更新数据库也可以直接访问:

关于虚拟字段vcol,一般是即可用于结果展示(res)又可用于查询条件(cond)。对虚拟字段的复杂介绍,也可像表字段一样列在下面。比如设计cusName字段:

@CusOrder:id,...vcol:cusName(Customer.name)比如要查询张姓客户的所有订单及姓名:

classAC2_CusOrderextendsAccessControl{...protected$vcolDefs=[["res"=>["cus.namecusName"],"join"=>"LEFTJOINCustomercusONcus.id=t0.cusId","default"=>true]]}特别地,还有一些虚拟字段,只用于查询条件或添加,习惯上分别写为vcolforcond和vcolforadd。

vcolforcond常用于一对多关联中,用多方字段来查一方的表。比如查询某个订单的客户,或某时段内下单的所有客户,即用CusOrder的tm字段来过滤Customer表,可在Customer上设置orderId、orderTm虚拟字段:

callSvr("Customer.query",{cond:{orderId:1001}});callSvr("Customer.query",{cond:{orderTm:">=2020-1-1AND<2021-1-1"},distinct:1});//加distinct参数可避免重复实现示例:

classAC2_CustomerextendsAccessControl{...protected$vcolDefs=[...["res"=>["o.idorderId"],"join"=>"JOINCusOrderoONt0.id=o.cusId",]]}vcolforadd常用于在添加时用于检查和添加关联对象,例如导入订单时(batchAdd/add接口),不传cusId字段,代之以cusName字段。要通过cusName找到Customer的id即cusId,甚至找不到时自动创建Customer。这时可以将cusName设计为vcolforadd:

vcolforadd:cusName(Customer.name)实现示例:

点击“生成”将自动生成页面文件(pageXXX.html/js,dlgXXX.html/js)并加入git库。

定义用到的固定下拉列表变量(enum对应的XXList/XXMap)或动态下拉列表函数(如ListOptions.Employee),在web/store.js中定义:

classAC2_CustomerextendsAccessControl{protected$vcolDefs=[["res"=>["emp.nameempName"],"join"=>"LEFTJOINEmployeeempONemp.id=t0.empId","default"=>true]];}在页面web/store.html中调整菜单位置:

注意:在chrome中F12打开开发页,用DOM选择器选中对话框可以看到大小。

注意检查自动生成的图片和附件组件的选项:

照片合同附件multiple:false表示单选,即只允许一个图片或文件。pic:false用于区别图片(带预览)或一般文件上传。fname:true表示自动存文件名(或备注),但只可用于pics/atts这类字符串类型的字段。4细化客户页面

先在DESIGN.md文档中描述接口,像get/query/set/add/del等标准接口,可以忽略标准接口参数,只写些特别的逻辑:

后端代码api_objects.php(称为AutoComplete/自动补全逻辑)

在添加时,“是否禁用”字段自动填充为“否”(0):定制逻辑需要在对话框js中设定,先在dlgCustomer.html中激活js文件的使用,添加上wui-script和my-initfn属性:

然后在dlgCustomer.js中添加前端页面逻辑:

//initDlgCustomerWUI.setDlgLogic(jdlg,"disableFlag",{valueForAdd:0//添加时自动设置为0});4.2为选项设置颜色当disableFlag为1时(客户被禁用),单元格显示为灰色:

导入类型客户...在文件下面指定导入模板:

在客户页面中,只需要为toolbar指定一个导入按钮:pageCustomer.html

functioninitPageCustomer(){...jtbl.datagrid({...toolbar:WUI.dg_toolbar(jtbl,jdlg,"import","export"),//添加"import"即可})}4.4添加模糊查询在客户页面中,为toolbar指定一个模糊查询按钮,称为qsearch,有两种方法。

方法一:前后端协同。后端指定模糊查询的字段。

functioninitPageCustomer(){...jtbl.datagrid({...toolbar:WUI.dg_toolbar(jtbl,jdlg,"import","export","qsearch"),//添加"qsearch"即可})}为了支持对客户的模糊查询,应在后端Customer对象中支持qsearch(自动在指定的若干字段中模糊匹配):api_objects.php

//classAC2_Customer中protectedfunctiononQuery(){//添加qsearch支持$this->qsearch(["id","name","code"],param("q"));}注意:在下拉选择列表中,过滤功能也会用到qsearch,这时只能写在后端。

方法二:直接由前端指定模糊查询的字段(v6支持)pageCustomer.js

functioninitPageCustomer(){...jtbl.datagrid({...toolbar:WUI.dg_toolbar(jtbl,jdlg,"import","export",["qsearch","id,name,code"]),//添加"qsearch"按钮})}5物流订单基本步骤与前面类似。

在列表页pageCusOrder.html中配置颜色,状态列(status):

在dlgXXX.html/js中设置添加时的只读字段,与客户管理中做的类似。

在DESIGN.md中定义接口逻辑:

classAC2_CusOrderextendsAccessControl{protected$vcolDefs=[["res"=>["cus.namecusName","cus.empIdcusEmpId"],"join"=>"LEFTJOINCustomercusONcus.id=t0.cusId","default"=>true],["res"=>["emp.nameempName"],"join"=>"LEFTJOINEmployeeempONemp.id=t0.empId","default"=>true],["res"=>["emp1.namecusEmpName"],"join"=>"LEFTJOINEmployeeemp1ONemp1.id=cus.empId","require"=>"cusEmpId","default"=>true]];protectedfunctiononValidate(){if($this->ac=="add"){$_POST["tm"]=date(FMT_DT);$_POST["empId"]=$_SESSION["empId"];$_POST["status"]="CR";}}}自动生成的AC1_CusOrder类用不到,将其删除掉即可。

在store.html中修改菜单项,把“物流订单管理”改成“物流订单”(习惯上不超过4个字):

指定添加时必传字段,以及不可修改字段:在api_objects.php中以Customer为例:

classAC2_CustomerextendsAccessControl{protected$requiredFields=["cusId","type"];protected$readonlyFields=["tm","empId"];...}在dlgCustomer.html中设置validatebox:

建议第一种方式,系统会自动在标题上加红色的星号标识必填字段。

可在创建文件时直接用required选项指定:

先刷新数据模型(meta):

cd/var/www/srcgit_init.shdemo2注意:git_init.sh是jdcloud项目tool目录下自带的工具。在本地git中将myserver:src/demo2设置为库地址,将源码push上去。打上链接以便web可访问:

cd/var/www/htmlln-sf/var/www/src/demo2/server./demo2初始化配置和数据库:

典型的1对多关系展示:

在pageCustomer.js中添加“查看订单”按钮:

先为Customer对象设计虚拟字段:orderCnt,orderSum在后端实现它:

classAC2_CustomerextendsAccessControl{protected$vcolDefs=[...["res"=>["(SELECTCOUNT(*)FROMCusOrderWHEREcusId=t0.id)orderCnt","(SELECTSUM(amount)FROMCusOrderWHEREcusId=t0.id)orderSum"],"default"=>true]];}在管理端客户列表页显示这两个字段:pageCustomer.html

varCustomerUi={orderCnt:function(value,row){if(!value)returnvalue;returnWUI.makeLink(value,function(){varpageFilter={cond:{cusId:row.id}};WUI.showPage("pageCusOrder",{title:"物流订单-客户"+row.id,pageFilter:pageFilter});});}}WUI.makeLink生成一个链接,点击时执行回调函数,用showPage显示订单页面,并通过pageFilter参数传递了过滤条件。

为了支持按客户信息过滤,需要增强一下订单页,在上一节中已做过处理。此处打开过滤后的订单页,使用的是完全相同的接口。

在客户对话框中以子表方式显示该客户的所有订单,在这里也可以直接添加订单。

客户对话框中添加子表:pageCustomer.html

使用wui-subobj组件,obj选项指定子对象为“CusOrder”,relatedKey选项指定关联字段为“cusId”。valueField的值对应后端AC类中子表名,如果不加这个属性,则添加主表数据时子表是不可用的;dlg选项指定订单详情对话框,也可以不指定,这样子表的增加、修改等操作就不可用了。

要支持CusOrder的各项操作,后端应有AC2_CusOrder类。

valueField选项指定可调用Customer.add()(...,orders)接口,在添加主表记录的同时,添加子表。后端须实现orders子表:

classAC2_CustomerextendsAccessControl{protected$subobj=[..."orders"=>["obj"=>"CusOrder","cond"=>"cusId={id}"],]}这样子表就做好了。

在客户列表中显示该客户处于各状态的订单数,如“已签收:2,已结算:20”。这是对上面订单数的增强。在Customer对象上设计虚拟字段orderCntStat。

实现思路是先定义子表字段:

classAC2_CustomerextendsAccessControl{protected$subobj=["orderCntStat"=>["obj"=>"CusOrder","cond"=>"cusId={id}","gres"=>"status","res"=>"COUNT(*)cnt","default"=>true]];}测试:callSvr("Customer.query",{res:"id,orderCntStat"})这样查询出的orderCntStat字段格式为:[{status:"RE",cnt:2},{status:"CL",cnt:20}]

为了便于前端显示,需要将子表数组转成一个字符串。这可以在前端来做(通过datagrid的formatter定制),也可以在后端来做(通过enumFields机制,称为枚举字段,或是计算字段)。

在后端做的好处是支持导出数据(比如导出Excel等),如果在前端用formatter来渲染数据,导出时是不执行的formatter的。

示例:在后端做这个格式转换定制:

在列表页中添加这列:pageCustomer.html

上面是用子表加上自定义处理实现,还有一种方案,是直接用SQL定义虚拟字段,这需要对SQL子查询非常熟悉,参考实现如下:

如果不想手写那么长CASEWHEN,也可以调用sqlCaseWhen函数把map转成caseWhen语句,由于类成员赋值时不能直接调用函数,可以放在onInit里面做:

classAC2_CustomerextendsAccessControl{...protected$vcolDefs=[...["res"=>["u_orderCntStat(t0.id)orderCntStat"],"default"=>true],];其中u_orderCntStat就是一个自定义SQL函数,按惯例加u_表示自定义函数;按惯例应将它的定义写在data/init.sql文件中,以便部署时使用。

实现导出月报表,即每月的订单数和总金额。其本质是一个统计查询接口,即带gres参数的query接口。

classAC2_CusOrderextendsAccessControl{protectedfunctiononInit(){$this->vcolDefs[]=["res"=>tmCols("t0.tm")];}}现在就可以直接测试一下月统计接口了:

callSvr("CusOrder.query",{gres:"y,m",res:"COUNT(*)cnt,SUM(amount)totalAmount"})若还要增加按客户分组,可以再分组参数中再加上cusId,并将字段结果换成中文,便于前端展现:

callSvr("CusOrder.query",{gres:"y年,m月,cusId",res:"cusName客户,COUNT(*)订单数,SUM(amount)总金额",orderby:"总金额DESC",hiddenFields:"cusId"})分组字段使用cusId(编号)比用cusName(名字)效率高,为了让cusId不出现在最终结果中,使用了参数hiddenFields来指定。

要导出Excel格式,只需在查询参数中再加上fmt:'excel'即可。

已封装好的的逻辑页pageSimple,以及查询对话框DlgReportCond,可以方便的用于展示报表:

现在点击“导出月报表”按钮,就可以下载Excel文件了。

检查角色,可以用g_data.hasRole,这是比较简单的控制,是直接在代码中写死的;后面章节还要讲到权限,是可以通过对角色进行配置而无须编码的,也可以控制到每个操作按钮;或者也可以通过WUI.canDo(null,"报表分析")进行编码控制。

系统默认已有表头左上角右键菜单中隐藏地集成了这一功能,要让它显示在列表工具栏,只要简单地加一个名为“report”的按钮:pageCusOrder.js

functioninitPageCusOrder{...vardgOpt={url:WUI.makeUrl("Ordr.query"),//toolbar:WUI.dg_toolbar(jtbl,jdlg,btn1,"export","report","qsearch"),//加一个"report"即可toolbar:WUI.dg_toolbar(jtbl,jdlg,btn1,"export",g_data.hasRole("mgr")&&"report","qsearch"),//为"report"加上角色控制:mgr-最高管理员...};jtbl.datagrid(dgOpt);}点开统计分析,实现以下分析:

勾上“复制代码”,点确定;然后创建新文件server/web/page/mod_订单分析.js,按Ctrl-V粘贴得到类似下面的代码:

打开store.html,在菜单中添加一项:

使用WUI.loadScript的好处是,修改js源文件后,无须刷新,直接点菜单就可以查看更新后的效果。

(已过时,仅供参考)

可以参考示例server/web/adm/pageApiLogStat.html(.js),这类页面的命名规范是page{obj}Stat,所以这是对ApiLog对象的分析。可以将逻辑页复制过来,将对象名字改成CusOrder,得到pageCusOrderStat.html(.js)。对其中内容添加或修改必要的分组字段即可。

在store.html中加个菜单:

先来实现:管理员只能查看和操作自己添加的客户及其订单。

要限制用户能操作的内容,一般通过后端在onQuery里加查询限制条件实现,这里即是对客户的empId字段进行限制:

classAC2_CustomerextendsAccessControl{protectedfunctiononQuery(){if(!hasPerm(PERM_MGR))$this->addCond("empId=".$_SESSION["empId"]);}}对订单(CusOrder)的查询限制,须先关联到客户上,再根据客户的empId字段过滤,这就要用到虚拟字段cusEmpId:

classAC2_CusOrderextendsAccessControl{protected$vcolDefs=[[//下面将使用虚拟字段cusEmpId进行过滤"res"=>["cus.namecusName","cus.empIdcusEmpId"],"join"=>"LEFTJOINCustomercusONcus.id=t0.cusId","default"=>true],];...protectedfunctiononQuery(){if(!hasPerm(PERM_MGR))$this->addCond("cusEmpId=".$_SESSION["empId"]);}}这样,前端不用修改,即可实现不同角色看到的内容不同。

要实现“订单分析”页只能最高管理员看,只需在菜单上配置一下,添加类“perm-mgr”,表示“mgr”(即最高管理员)可见:

在jdcloud-ganlan中已默认添加了角色插件。可以忽略本节。

先支持角色定义,通过插件role来实现,可参考其配置文档:server/plugin/role/DESIGN.md开发步骤章节。摘录如下:

在主设计文档中包含插件:

@includeserver\plugin\role\DESIGN.md用于创建表和字段。

后端应在plugin/index.php中设置:

$GLOBALS["P_initClient"]["enableRole"]=true;前端可使用g_data.initClient.enableRole检查是否开启本特性。

在管理端主菜单“系统设置”中添加“角色管理”:

在客户列表页pageCustomer.js中,定制字段显示:

//在initPageCustomer函数中,当初始化datagrid后,定制字段显示jtbl.datagrid(...)//用g_data.hasRole来判断角色。这里isAdm就表示有mgr或emp权限之一,即管理员以上权限varisAdm=g_data.hasRole("mgr,emp");WUI.toggleFields(jtbl,{picId:isAdm,atts:isAdm});在客户对话框dlgCustomer.js中定制对话框上的字段显示,设置各字段的disabled属性:

functioninitDlgCustomer(){//varisMgr=g_data.hasRole("mgr");varisAdm=g_data.hasRole("mgr,emp");vardisabled=!isAdm;WUI.setDlgLogic(jdlg,"code",{disabledForSet:disabled});WUI.setDlgLogic(jdlg,"name",{disabledForSet:disabled});WUI.setDlgLogic(jdlg,"disableFlag",{disabledForSet:disabled,valueForAdd:0});WUI.setDlgLogic(jdlg,"结算周期",{disabledForSet:disabled});//设置子表只读而不是`disabled`,否则就看不了子表了。注意子表名`orders`是通过在subobj组件中定义CSS类`wui-subobj-orders`来关联的。WUI.setDlgLogic(jdlg,"orders",{readonly:disabled});//图片和合同字段不可见WUI.setDlgLogic(jdlg,"picId",{show:isAdm});WUI.setDlgLogic(jdlg,"atts",{show:isAdm});}为了按名字设置子表orders,dlgCustomer.html中为子表加上wui-subobj-orders类标识它的名字是orders(按惯例,名字须与valueField选项一致):

functioninitDlgCustomer(){jdlg.on("beforeshow",onBeforeShow);...functiononBeforeShow(ev,formMode,opt){varobjParam=opt.objParam;varforAdd=formMode==FormMode.forAdd;varforSet=formMode==FormMode.forSet;setTimeout(onShow);varisAdm=g_data.hasRole("mgr,emp");WUI.toggleFields(jfrm,{picId:isAdm,atts:isAdm});//注意:这里限制只在forSet(设置)模式且是非管理员用户时,才做禁止编辑操作。避免forAdd或forFind(查询模式)也受影响。varval=forSet&&!isAdm;$(frm.结算周期).prop("disabled",val);$(frm.code).prop("disabled",val);$(frm.name).prop("disabled",val);$(frm.disableFlag).prop("disabled",val);//让子表也只读。这是设置WUI组件选项的方法:WUI.getOptions(jdlg.find(".wui-subobj-orders")).readonly=val;...}}设置字段值一般在onShow中写逻辑(包括初始化显示datagrid表格)。若要隐藏字段,或设置字段是否可编辑,一般在onBeforeShow中写逻辑。也可以都到onShow中设置。

页面逻辑建议通过WUI.setDlgLogic来定义,更为清晰。请参考手册了解详细。仅当用setDlgLogic解决不了,可以考虑使用以上传统方式。

将物流订单按类别不同细分为包车发运、散货发运和其它订单三个子菜单,放在“订单管理”菜单下。点击菜单打开相应类型的订单页,注意列表页面和详情对话框的标题与类型显示一致。

类似前面讲过的关联页面,可以通过pageFilter机制来打开继承自pageCusOrder页面的“包车发运”页:

WUI.showPage("pageCusOrder",{title:"包车发运",pageFilter:{cond:{type:"包车发运"}}});这样菜单可以定义为:

订单管理包车发运散货发运其它订单

注意上面“其它”类型的对话框标题应显示为“其它订单”。

在store.js中自定义菜单项的点击事件:

functioninitPageCusOrder(opt){...varjdlg=$("#dlgCusOrder");jdlg.objParam={//传参给对话框。title:opt.title,param1:999//示例:传给对话框自定义参数}jtbl.datagrid(...)}在页面初始化函数中,第1个参数为showPage的opt选项(里面包括title等)。

注意不同类型下的订单,显示的字段会有差异。示例:类型是“其它”的订单,显示备注字段且该字段必填。

在列表页初始化函数中,通过WUI.toggleFields来控制不同类型显示不同字段,注意列表和对话框上需要相同的控制。建议修改如下(pageCusOrder.js):

functioninitPageCusOrder(opt){...jtbl.datagrid(...);//控制不同类型下显示的字段,即表格列。通过getPageFilter函数从pagefilter中取出参数type的值,注意值可能为空的。vartype=WUI.getPageFilter(jpage,"type");//相当于opt.pageFilter&&opt.pageFilter.cond&&opt.pageFilter.cond.typetoggleOrderFields(jtbl,type);}在store.js中封装一个字段控制函数toggleOrderFields,因为之后对话框上的字段控制也要复用这个函数:

functiontoggleOrderFields(jo,type){WUI.toggleFields(jo,{//控制动态字段的显示,对应datagrid列表中各列的field选项值,或明细页中输入项的name值。type:!type,cmt:!type||type=="其它",});}在对话框中,根据type动态显示要哪些输入框,使用与page页面中相同的toggleOrderFields函数。

要在打开对话框时和type字段变化时,都能控制字段显示,可以使用WUI.setDlgLogic函数的setOption和watch选项:dlgCusOrder.js

functioninitDlgCusOrder(){...WUI.setDlgLogic(jdlg,"status",{watch:"type",setOption:function(row){toggleOrderFields(jfrm,row.type);}});}参照例子,应特别注意在列表页和明细页上toggleOrderFields这段代码的位置。例中对status字段进行设置,这里改成其它字段也可以,关键是watch中指定会变化的字段,然后在setOption中处理变化。

这样便完成了不同类型显示不同字段。

在dlgCusOrder.html中,清空status下拉框的data-options属性设置:

状态在store.js中定义常量:

functioninitDlgCusOrder(){...WUI.setDlgLogic(jdlg,"status",{disabledForAdd:true,watch:"type",setOption:function(row){toggleOrderFields(jfrm,row.type);return{jdEnumMap:row.type=="其它"CusOrderStatusMap_其它:CusOrderStatusMap};}});...}上面如果不加watch选项,则只能实现打开页面时设置status下拉框,当type下拉框动态变化时,是无法更新status下拉框的。

注意:筋斗云v6以前不支持WUI.setDlgLogic,那么上面动态控制下拉框的逻辑实现如下:

functioninitDlgCusOrder(){...//按type不同来切换$(frm.type).on("change",function(){toggleOrderFields(jfrm,row.type);vartype=$(this).val();varcomboOpt={jdEnumMap:type=="其它"CusOrderStatusMap_其它:CusOrderStatusMap};jfrm.find("[name=status]").trigger("setOption",comboOpt);});functiononBeforeShow(ev,formMode,opt){...functiononShow(){//toggleOrderFields(jfrm,opt.data.type);//这句要写在change事件中,否则打开对话框时字段显示正确,切换type后就不对了...//2.打开对话框时根据type动态显示status$(frm.type).trigger("change");}}}以上是处理对话框逻辑,以支持变化的选项。列表而上处理逻辑如下。

如果固定下拉列表用的是Map而非List,还需要在列表页处理映射值,否则在列表页,这一列在数据表中无法正确显示。原先在pageCusOrder.html中是这样定义:

THE END
1.新宁物流(300013)公司公告(三)一体化的物流与供应链管理服务能力优势 公司的一体化物流与供应链管理服务以其全面性、灵活性、专业性和高效性著称。公司的一体化物流与供应链管理服务涵盖从生产前端的进项物流和原材料物流、生产中端的厂内物流及生产后端的销项物流。不仅确保了物料和成品的高效流转,还通过 Sorting(分拣)、D/C(datecode)管控...https://q.stock.sohu.com/cn/gg/2024/300013/57524729.shtml
2.快讯百世集团副总裁、电子商务事业部总经理刘波认为:“双11”压力最大的两个环节,一是前端运营平台,包括交易网站和ERP等商流处理系统,这部份压力由淘宝、天猫和前端软件服务商承担;二是后端物流运营平台,“双11”的订单量是平时的数十倍甚至上百倍。实际上,物流平台基于落地资源的弹性限制,承受的压力更甚于前端商流平台,...https://www.800best.com/news?id=122
1.物流系统前端有哪些物流系统前端有哪些,物流系统前端是指用于操作和管理物流系统的用户界面,它包括了物流管理、物流跟踪、运输计划、库存管理等模块。在物流系统前端中,主要涉及到的技术有HTML、CSS、JavaScript,还有相关的框架和技术库,如Angular、Re某at等。通过这些技术,我们可以实现https://h.chanjet.com/ask/00a648413598c.html
2.物流平台架构设计与实践物流系统架构设计物流平台的前端页面应该注重用户体验,提供清晰、易用、美观的界面,同时还需要考虑响应式设计,以便用户能够在不同终端上访问。前端框架可以采用Vue或React等流行的框架,此外,开发人员还需要关注网站的性能和速度,以确保快速的加载时间和流畅的用户体验。 2. 后端架构设计 ...https://blog.csdn.net/qq_33665793/article/details/136010096
3.物流实习生和web前端开发实习生有什么区别Web前端开发实习生 来自趣米网络 更新于 2024-11-16 查看更多岗位职责 工资待遇区别 岗位名称 平均工资 较上年 物流实习生 ¥4.0K +7% web前端开发实习生 ¥4.5K -15% 说明:物流实习生和web前端开发实习生哪个工资高?物流实习生低于web前端开发实习生。物流实习生平均工资¥4.0K/月,2024年工资¥4.2...https://www.jobui.com/gangwei/pk/wuliushixisheng-webqianduankaifashixisheng/
4.前端和后端哪个容易被ai取代?一、前端和后端哪个容易被ai取代? 在当前的技术发展趋势下,前端和后端都存在被取代的可能性。然而,前端开发涉及到用户界面设计、交互体验等方面,需要人类的创造力和审美观念,因此在短期内不太可能被完全取代。 而后端开发则更加注重数据处理、算法设计等技术,这些方面相对更容易被AI自动化实现。但是,无论是前端还是后...https://tool.a5.cn/article/show/90154.html
5.西安理工大学高科学院>就业导航>京东物流三、前端开发工程师(西安) 岗位职责: 1、H5项目的前端构建,各类交互设计与实现; 2、项目需求等的迭代开发、维护以及优化; 3、PC端和移动端相关的前端开发工作; 4、物流App相关H5开发,完成前端界面与后端交互开发; 5、与后端工程师沟通协作,调试数据接口; 任职要求: 1、3年以上前端开发经验。 2、精通HTML5、CS...https://www.xthtc.com/index.php?s=/index/view/s/2/c/95/id/4626.html
6.运联研究供应链一体化趋势下,合同物流的变革2.1 生产供应链由前端向后端延伸 在产业链中,生产制造是产业链的前端环节,也是对供应链能力和需求服务要求最多的环节。如何能保证生产所需的零配件准确、及时地送至产线,同时能最大程度上降低库存,减少库存带来的资金、周转率等一系列问题,是做生产供应链服务的合同物流企业必须要有的基础能力。 https://maimai.cn/article/detail?fid=1667886501&efid=MCa2KOnHjN-uvK1yKy4w8Q
7.从前端中端再到后端,茉酸奶将持续致力于在萌芽中...如何处理上述难题,非常考验品牌的管理能力。作为备受广大消费者推崇与喜爱的现制酸奶头部品牌,茉酸奶深知责任重大。为杜绝此类风波再起,茉酸奶借鉴行业成熟经验,并结合自身实际情况,探索出一套行之有效的方案,力争从原料供应前端、物流配送中端再到门店后端,不放过每一个细节,将食品安全风险扼杀在萌芽中。 https://www.cet.com.cn/xwsd/10060014.shtml
8.中通快递集团2024届校园招聘1、2024届本科及以上应届毕业生,专业不限,物流类相关专业优先; 2、善于沟通,具备较强的协调能力、坚韧性,具有较强的团队协作意识; 3、担任校级班级干部且组织过活动优先。 工作地点:上海总部 五、管理培训生-解决方案 工作职责: 1、支持商务前端客户数据分析; ...https://job.xidian.edu.cn/campus/view/id/745390
9.跨境电商无货源铺货ERP店群系统,什么是前端,什么是后端,大家一定...目前来说能拥有前端和后端的公司基本都是一些孵化培训机构,系统之是一个辅助工具,帮助大家更快,更方便的打理店铺,处理订单,物流发货,建立中转仓,系统目前市场上是可以支持贴牌,oem不限制店铺,独立部署,私有数据库,所以大家在选择的时候,一定要注意选择的对象! https://chongqing0332222.11467.com/m/news/1135222.asp
10.焦点访谈丨中国快递如何从零到全球第一?来看行业背后的速度与智能如何做到仓库离客户更近,在确保生产的前提下,库存量最小呢?这就需要运用人工智能和运筹的算法,通过对生产和销售情况分析,做补货预测,让货物前置,同时联动后端的物流服务,支撑前端消费者的诉求。科技赋能让单一物流运输向一体化供应链管理服务推进,从末端“搬运工”到走...https://content-static.cctvnews.cctv.com/snow-book/index.html?item_id=12546482891945519646&channelId=1119&track_id=8EE8303D-D5C5-400D-9BE4-11BF5E44B701_711986808008
11.物流管理毕业实习报告(合集15篇)总是在想这和物流有什么关系呢,为了完成实习而工作,前几天只是和老员工一起学习和习惯那些工作。我们那条线是d5线,前端从插件开始到扎扎带装箱,后端是从灌胶到装箱。前端的工作流程是物料员从楼下拉来在tsmt打过键的板子来插件,在标准作业指导书(sop)上每个键都有型号和位置,必须严格按照sop来,为了插件方便,...https://www.ruiwen.com/shixibaogao/7191542.html
12.电子物流的特点和作用,电子物流是电子商务发展的推动力二、电子物流的特点和作用 1、电子物流的主要特点是前端服务与后端服务的集成。电子物流前端服务包括:咨询服务、网站设计/管理、客户集成方案实施等。电子物流的后端服务包括六类主要业务:订单管理、退货管理、运输与交付、仓储与分拨、客户服务以及数据管理与分析。 https://m.wanshifu.com/zhishi/5787188668.html