1. 基本功能 1.基本功能
1.1. 界面间传参 1.1. 界面间传参
此功能的场景是当前业务对象的页面上有个按钮,点击这个按钮跳转到另外一个业务对象的编辑页面,点击按钮的同时会把某个参数传递过去,在打开的编辑页面会自动接收这个参数,实现页面之间的参数传递。
1.2.子表数据传参 1.2.子表数据传参
此功能的场景是在一个业务对象管理页的表格上选择多笔数据然后点击表格上的按钮跳转到另外一个业务对象新增页面,把选中的多笔数据添加到新增页面的子表里面。
例如:选择多条数据(干线单),点击调度,新增调度单,多个干线单对应一个调度单,同时往调度单明细表插入调度单id,干线单id。
效果图:
1.3.子表根据主表所选信息自动赋值 1.3.子表根据主表所选信息自动赋值
子表根据主表所选信息自动赋值。如下图所示,当离港报的表单字段离开港字段选择厦门,那么货物信息tab页面中要显示港口是厦门的数据,其中显示的数据来源于另一个页面港口货物信息。
1.4.跨系统发送数据 1.4.跨系统发送数据
如下图:查询表格数据,勾选数据,点击发送任务书按钮,请求另一个系统网服的接口发送任务书数据
2. 配置方法 2. 配置方法
2.1. 界面间传参 2.1. 界面间传参
配置
- 对象建模–业务对象–业务对象管理:编辑业务对象,切换方法定义tab页,新增一个方法,输入【方法名】、【调用方法描述】、【方法类型】为打开到页签、【URL地址】为要跳转的对应页面,然后保存。
- 编辑上一步新增的方法,点击方法参数定义表tab页,新增一个方法参数,输入【参数名】为传递的参数名、【参数值来源类型】为当前业务对象、【业务对象名】为当前业务对象名、【属性名】为当前业务对象需要传递过去的属性名。
- 编辑可视化布局,点击【TOOLBAR】,将上一步新增的方法配置到界面上,然后保存数据。
- 切换到接收参数的对象,这边例子是传到管理页,所以编辑manage方法,点击方法参数定义表tab页,新增方法参数:
代码
前端HTML生成按钮。
<button id="testCaseNew411.test" type="button" ng-click="test()" g-per="/html/platform/pur/productInformationManage.html" ng-cloak class="button-default" > 传参测试 </button>
前端BsCtrl.js生成对应的方法内容。
/**
* GLPaaS生成
* 传参测试常用案例Newt411 TOOLBAR
*/
$scope.test = function(){
var temp = "";
var url = "/html/platform/pur/productInformationManage.html";
var openType = "1";
if (url.indexOf("?")>=0){
url = url + "&openType=" + openType;
} else {
url = url + "?openType=" + openType;
}
var custName = $scope.testCaseNew411.custName;
url = url + "&custName="+(custName || '');
var custId = $scope.testCaseNew411.custId;
url = url + "&custId="+(custId || '');
if(__config.controls.multipleTabsControl){
var resource = {
sysResourceId : 'testCaseNew411_test_' + temp,
urlTitle : '传参测试常用案例Newt411',
url : url
}
}else{
var resource = {
sysResourceId : 'testCaseNew411_test_',
urlTitle : '传参测试常用案例Newt411',
url : url
}
}
var indexScope = top.angular.element("body").scope();
indexScope.addTab(resource);
if(!__config.controls.notApplyAddTab){
indexScope.$apply();
}
};
2.2.子表数据传参 2.2.子表数据传参
2.2.1.在第一个业务对象–>方法定义–>新增一个方法这个方法用于后面按钮的使用。
2.3.子表根据主表所选信息自动赋值 2.3.子表根据主表所选信息自动赋值
配置
1.对象建模–业务对象–业务对象管理:编辑业务对象,点击【可视化布局】按钮,在可视化界面选中该控件,在右侧的【事件】tab页配置联想控件选中事件。
代码
在html生成on-select
事件
<label for="leavePort" class=""> <span class="required">*</span> 离开港: </label>
<g-data-source data-source-name="leavePortLeavePortReportSource" page="true" url="{{$config.ctx}}/vwCdmPort/query" page-size-param="pageSize" params="queryLeavePortLeavePortReportParams" current-page-param="currentPage" total-record-prop="total" records-prop="vwCdmPorts" allow-auto-load="false">
</g-data-source>
<g-associate g-focus-select="" show-event="click" name="leavePortReport.leavePortCode" unmatch-remove="true" space-clear="false" ng-cloak="" data-source-name="leavePortLeavePortReportSource" selected-row="leavePortLeavePortReportSelectedRow" keyword="search_leavePort" on-select="leavePortSelect()" on-clear="leavePortClear()" ng-model="leavePortReport.leavePortCode" display-init="leavePortReport.leavePort" value-prop="portCode" display-express="portNameCn" keyword-prop="portNameCn"></g-associate>
2.4.跨系统发送数据 2.4.跨系统发送数据
3.常用扩展 3.常用扩展
3.1.子表数据传参 3.1.子表数据传参
3.1.1.在第一个业务对象的Ctrl.js文件里面加上自定义调度按钮的JS代码,具体代码参考如下:
//TODO 自定义js函数
/**
* 调度
*/
$scope.dispatchVwTmsOrder = function() {
var ids = Arrays.extract($scope.vwTmsOrderCheckedRows,’tmsOrderId’).join(‘,’);
if(ids != null&& ids.length == 0 ){
GillionMsg.alert(“提示”,”请选择记录!”);
return;
}
else{
var url = $config.path+
“/html/tms/dispatchOrder/tmsDispatchOrderAdd.html”;
if (url.indexOf(“?”)>=0){
url = url + “&”;
} else {
url = url + “?”;
}
var openType = “1”;
if (url.indexOf(“?”)>=0){
url = url + “&openType=” + openType + “&ids=” + ids;
} else {
url = url + “?openType=” + openType + “&ids=” + ids;
}
var resource = {
sysResourceId : ‘tmsDispatchOrder_add_’,
urlTitle : ‘干线调度单新增’,
url : url
};
var indexScope = top.angular.element(“body”).scope();
indexScope.addTab(resource);
indexScope.$apply();
}
}
3.1.2.在第一个业务对象–>基本信息–>是否需扩展JS打勾
这个打勾之后重新生成代码就不会生成Ctrl.js文件,如果自定义JS有修改直接在Ctrl.js文件里面改,重新生成代码就不会覆盖这个文件。
3.1.3.在另外一个业务对象AddCtrl.js文件里面重写保存save方法的JS代码,具体代码参考如下:
/**
* 保存 干线调度单
*/
$scope.save = function(){
var tmsDispatchOrder= $scope.tmsDispatchOrder;
var tmsDispatchCode = $scope.tmsDispatchOrder.tmsDispatchCode;
$scope.tmsDispatchOrder.ids = ids;
var options = {ids:ids,tmsDispatchCode:tmsDispatchCode,methodName:’save’,url:’/tmsDispatchOrder/saveAndDispatch’,pageType:”add”};
$scope._commonSaveOrUpdateTmsDispatchOrder(options);
};
3.1.4.在另外一个业务对象–>基本信息–>是否需扩展JS打勾
打勾之后重新生成代码就不会覆盖这个业务对象AddCtrl.js文件。
3.1.5.在另外一个业务对象–>业务对象扩展–>新增一笔扩展保存的后台代码
3.1.6.保存的后台扩展代码参考如下:
/**
* 保存 干线调度单
*自定义方法
* @RequestBody String data
* @param request
* @param response
* @throws java.io.IOException
*/
@RequestMapping(value=”tmsDispatchOrder/saveAndDispatch”)
public void save(@RequestBody TmsDispatchOrder tmsDispatchOrder, HttpServletRequest request, HttpServletResponse response) throws IOException
{
vwTmsOrderExtService.saveAndDispatch(tmsDispatchOrder);
ResponseUtils.flushSuccess(response, “保存成功!”, “tmsDispatchOrder”, tmsDispatchOrder);
}
3.2.子表根据主表所选信息自动赋值 3.2.子表根据主表所选信息自动赋值
自定义代码部分
在自定义扩展文件Ctrl.js中新增自定义方法
//TODO 自定义js函数
/**
* 离开港选中事件
*/
$scope.leavePortSelect = function() {
$scope.lpGoodsInFormations = [];
$scope.leavePortReport.lpGoodsInFormations = [];
var param = {
"voyageId": $scope.leavePortReport.voyageId
};
var portCode = $scope.leavePortLeavePortReportSelectedRow.portCode;
if (portCode) {
$http.post($config.ctx + '/addshipreportExt/searchVwOgmPortCargoByVoyageId', param).success(function(data) {
if (data.success != undefined && data.success == true) {
if (data.vwOgmPortCargos != null) {
for (var i = 0; i < data.vwOgmPortCargos.length; i++) {
if (portCode != data.vwOgmPortCargos[i].portCode) { //只能显示当前港口
continue;
}
var vwOgmPortCargo = data.vwOgmPortCargos[i];
var newRow = {
"rptGoodsInformationId": $scope.newLpGoodsInFormationGridId++,
"port": vwOgmPortCargo.portName,
// 港口
"portCode": data.vwOgmPortCargos[i].portCode,
//code
"wharf": vwOgmPortCargo.depotName,
// 码头
"jobProperties": vwOgmPortCargo.workType,
// 作业性质
"typesGoods": vwOgmPortCargo.cargoName,
// 货种
"goods": vwOgmPortCargo.goodsName,
//货物
"allocation": vwOgmPortCargo.loadingCargoQty,
//配载量
"volumeCargo": vwOgmPortCargo.actualLoading,
//载货量
"voyageRouteId": vwOgmPortCargo.voyageRouteId,
//路径表id
"rowStatus": 4
};
$scope.lpGoodsInFormations.unshift(newRow);
}
}
}
});
} else {
//离开港清空事件
$scope.leavePortClear();
}
}
//TODO 自定义js函数
/**
* 离开港清空事件
*/
$scope.leavePortClear = function() {
$scope.lpGoodsInFormations = [];
$scope.leavePortReport.lpGoodsInFormations = [];
}
自定义扩展的Controller文件获取数据来源
public void searchVwOgmPortCargoByVoyageId(@RequestBody Map params, HttpServletRequest request, HttpServletResponse response) throws Exception {
String voyageId = params.get("voyageId").toString();
//String portCode= params.get("portCode").toString();
UtilVwOgmPortCargoExample cargoExample = UtilVwOgmPortCargoExample.create();
//VwOgmPortCargoExample cargoExample = VwOgmPortCargoExample.create();
cargoExample.and().andVoyageIdEqualTo(voyageId);
List < UtilVwOgmPortCargo > vwOgmPortCargos = utilVwOgmPortCargoService.selectByExample(cargoExample);
/*Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("vwOgmPortCargos", vwOgmPortCargos);*/
if (vwOgmPortCargos.size() > 0) {
ResponseUtils.flushSuccess(response, "", "vwOgmPortCargos", vwOgmPortCargos);
} else {
ResponseUtils.flushSuccess(response, "", "vwOgmPortCargos", null);
}
}
update前调用deleteOldGoodInformation方法
@Override public void deleteOldGoodInformation(LeavePortReport leavePortReport) {
if (leavePortReport != null) {
boolean deleatFlag = false;
Set < LpGoodsInFormation > set = leavePortReport.getLpGoodsInFormations();
if (set != null) {
for (LpGoodsInFormation lpGoodsInFormation: set) {
if (lpGoodsInFormation.getRowStatus() == BaseObject.ROWSTATUS_ADDED) { //如有新增的
deleatFlag = true;
}
}
if (set.size() == 0) { //如果上除了
deleatFlag = true;
}
}
if (deleatFlag) {
LpGoodsInFormationExample example = LpGoodsInFormationExample.create();
example.and().andShipMessageIdEqualTo(leavePortReport.getShipMessageId());
lpGoodsInFormationService.deleteByExample(example);
}
}
}
3.3.跨系统发送数据 3.3.跨系统发送数据
自定义一个按钮,按钮功能代码实现如下:
//------------前台请求-------------
$scope.addTmTaskVebTmOrderTask = function(){
var tmTaskIds = Arrays.extract($scope.tmTaskOPCheckedRows, 'tmTaskId').join(',');
if(tmTaskIds.length == 0){
GillionMsg.alert("提示","请选择需要发送的数据!");
return;
}
var record = $scope.tmTaskOPCheckedRows;
for(var i=0;i<record.length;i++){
if(record[i].planStatus=="5"){
GillionMsg.alert("提示","存在任务状态已完成,不允许发送任务书!");
return;
}
}
var params = {};
params.tmTaskIds = tmTaskIds;
var tip = layer.load(0, {shade: false});
$http.post($config.ctx + '/ebVebTmOrderTask/addTmTask', params).success(function (data) {
layer.close(tip);
if (data.success != undefined && data.success == true) {
$scope.getTmTaskOPPages();
GillionMsg.alert("提示",data.msg);
return;
}
});
}
//-----------------控制层转换-----------------
@RequestMapping(value = "ebVebTmOrderTask/addTmTask")
@ResponseBody
@SuppressWarnings("unchecked")
public void addTmTaskVebTmOrderTask(@RequestBody String params, HttpServletRequest request,
HttpServletResponse response) throws Exception {
net.sf.json.JSONObject jsonObecjt = net.sf.json.JSONObject.fromObject(params);
String tmOrderIdList = jsonObecjt.get("tmTaskIds").toString();
String[] tmTaskIds = tmOrderIdList.split(",");
//循环一条一条数据发送
for(String tmTaskId :tmTaskIds){
try{
ebTmOrTaskCustomService.addTmTaskVebTmOrderTask(Long.valueOf(tmTaskId));
//找出当条记录:更新TM_TASK.IS_SEND_TK=Y
TmTaskCopy tmTask=tmTaskCopyService.get(Long.valueOf(tmTaskId));
if(!"Y".equals(tmTask.getIsSendTk())){
tmTask.setIsSendTk("Y");
tmTaskCopyService.updateByPrimaryKey(tmTask);
}
}catch (Exception e){
logger.error("---------------发送任务书失败!e的错误信息---------------" + e.getMessage());
throw new BusinessException("发送任务书失败!");
}
}
ResponseUtils.flushSuccess(response, "发送任务书成功!");
//---------------------服务层逻辑处理--------------------------
public void addTmTaskVebTmOrderTask(Long tmTaskId){
//请求网服接口的ip地址
String ipUrl = AppConfig.getString("fmsWeb.url.ip");
//请求网服接口的方法地址
String tmTaskSaveUrl = AppConfig.getString("fmsWeb.tmTaskSaveUrl.address");
//1.获取map数据集
Map<String, Object> mapTmTask = new TreeMap<String, Object>();//转换TreeMap
Map<String, Object> mapTmOrder = new TreeMap<String, Object>();
TmTask tmTask = tmTaskService.get(tmTaskId);
String sqlTmOrder = "SELECT * FROM TM_ORDER WHERE TM_ORDER_ID = ?";
TmOrder tmOrder = jdbcTemplate.queryForObject(sqlTmOrder, BeanPropertyRowMapper.newInstance(TmOrder.class), tmTask.getTmOrderId());
String sqlMfOrder = "SELECT * FROM MF_ORDER WHERE MF_ORDER_ID = ?";
MfOrder mfOrder = jdbcTemplate.queryForObject(sqlMfOrder, BeanPropertyRowMapper.newInstance(MfOrder.class), tmTask.getSourceOrderId());
//拒绝的情况 把拒绝改成计划已制作
BeanMap beanMapTmTask = BeanMap.create(tmTask);
mapTmTask.putAll(beanMapTmTask);
removeNullValue(mapTmTask);
BeanMap beanMapTmOrder = BeanMap.create(tmOrder);
mapTmOrder.putAll(beanMapTmOrder);
removeNullValue(mapTmOrder);
mapTmTask.put("eiTmOrder",mapTmOrder);
//2.获取随机数、证书
mapTmTask = mfCommonService.encrypt(mapTmTask);
//3.对外请求接口
//4.对返回值进行处理
try{
System.out.println("---------发送任务书数据:----------" + JSONObject.fromObject(mapTmTask).toString());
String responseResult = mfCommonService.doPost(ipUrl + tmTaskSaveUrl, JSONObject.fromObject(mapTmTask).toString());//对外请求接口
logger.error("---------------获取返回的数据responseResult---------------" + responseResult);
if ((Boolean) JSONObject.fromObject(responseResult).get("success")) {
logger.error("---------------发送任务书成功!---------------");
} else {
String string = JSONObject.fromObject(responseResult).get("errorMessages").toString();
logger.error("--------------任务书编号:【"+tmTask.getTaskNo() + "】,发送任务书失败,失败原因:" + string);
}
}catch (Exception e) {
logger.error("---------------发送失败的错误信息---------------" + e.getMessage());
}
}
4.版本更新 4. 版本更新
4.1.版本:5.5.0,2019.06.05
*
*