1. 基本功能1. 基本功能
1.1. 查询前调用Service方法1.1. 查询前调用Service方法
应用场景
航运调度管理业务多船查询:
1. 航运调度业务很多界面有船舶查询条件,用户希望可以查询多条船舶,并且可以把选择的多船信息保存起来,每次查询时自动加上多船查询条件;提供多船查询的不同业务界面,希望可以设置不同的多船查询条件;
2. 项目组设计了一张基础表,用于存放用户、业务界面、对应的船舶列表;通过云平台配置查询前调用Service自定义代码实现自动拼入多船查询条件的功能。
界面效果
航次任务界面,有一个【多船选择】按钮
用户在【多船选择】界面,选择多条船舶并保存
用户保存后,基础表中记录【业务界面、用户、船舶列表】信息;用户在航次任务界面,点【查询】按钮时会默认加上多船查询条件。
1.2. 保存后调用Service方法1.2. 保存后调用Service方法
应用场景
同步更新结算业务表BcPublicOrder:
1. 货代业务表有多张,例如海运订单、空运订单、拖车订单、报关订单
2. 结算中心的费用清单挂在统一结算业务表
3. 货代业务表保存后,同步更新结算业务表
实现效果
海运出口制作界面,用户点【保存】按钮时,后台自动更新关联表信息
1.3. 删除前调用Service方法1.3. 删除前调用Service方法
应用场景
业务单删除前校验
1. 已存在结算信息的不允许删除
2. 状态为已提交的不允许删除
实现效果
出口委托单界面,用户点【删除】按钮时,删除前判断该业务单是否可删除。
1.4. 自定义扩展覆盖查询逻辑1.4. 自定义扩展覆盖查询逻辑
平台支持配置自定义扩展覆盖查询逻辑,即自定义查询后不需要修改html页面上的URL地址也可以实现数据显示。例如表格的数据是自定义扩展查询后的结果,覆盖了原来的查询逻辑。
2. 配置方法2. 配置方法
2.1. 查询前调用Service方法2.1. 查询前调用Service方法
配置
- 对象建模–业务对象–业务对象管理:编辑业务对象,点击【业务对象扩展】tab页,新增一笔记录,填写扩展Service文件名称,类型为:Java Service,路径为扩展service在工程中的路径。
- 编辑业务对象,在【方法定义】tab页找到查询方法,并进行编辑,在【调用规则表】tab页新增一笔记录,扩展名称为扩展Service的名称,执行类型为:Java Service,执行内容为Service中的方法名称,调用时机为执行之前。
- 编写Service类java代码,自定义Service类MultiFindFilter.java中实现find方法,代码可以参考3.1. 查询前调用Service方法。
2.2. 保存后调用Service方法2.2. 保存后调用Service方法
配置
- 对象建模–业务对象–业务对象管理:编辑业务对象,点击【业务对象扩展】tab页,新增一笔记录,填写扩展Service文件名称,类型为:Java Service,路径为扩展service在工程中的路径。
- 编辑业务对象,在【方法定义】tab页找到查询方法,并进行编辑,在【调用规则表】tab页新增一笔记录,扩展名称为扩展Service的名称,执行类型为:Java Service,执行内容为Service中的方法名称,调用时机为执行之后。
- 编写Service类java代码,自定义Service类MfOrderLogicServiceImpl.java中实现getOrderProcedureMFE方法,实现的逻辑是订单保存后更新其他关联表的数据。云平台框架调用保存后调用Service类时,会自动传入实体对象作为参数。
2.3. 删除前调用Service方法2.3. 删除前调用Service方法
配置
- 配置业务对象扩展:在业务对象的【业务对象扩展】配置扩展Service类信息,填写【扩展名称】=Service类名,【扩展类型】=Java Service,【路径】=Service类包路径
2. 配置删除前调用Service:在【出口委托单】业务对象的【方法定义】配置删除前调用Service方法,在【调用规则表】子对象中新增调用规则记录,填写【扩展名称】为上一步业务对象的扩展名称,【调用时机】=执行之前,【执行类型】=Java Service,【执行内容】= deleteBefore(自定义Service类定义的方法名)
3. 编写Service类java代码,自定义Service类FbMfOrderOExpDeleteServiceImpl.java中实现deleteBefore方法,实现的逻辑是订单删除前判断是否满足可删除条件。云平台框架调用删除前调用Service类时,会自动传入主键ids参数。
2.4. 自定义扩展覆盖查询逻辑2.4. 自定义扩展覆盖查询逻辑
配置
- 对象建模–业务对象–业务对象管理:编辑业务对象–子对象关系,新增一笔数据,配置子对象关系,根据需求配置。
- 在子业务对象下的业务对象扩展配置扩展接口类的地址。
- 编辑子业务对象–方法定义下的查询方法,切换至调用规则表tab页,新增数据,配置【调用时机选择】选择覆盖方法,【扩展名称】填写业务对象扩展中配置的名称,【执行类型】JAVA Service。
- 自定义代码可以参考3.4. 自定义扩展覆盖查询逻辑。
3. 常用扩展3. 常用扩展
3.1. 查询前调用Service方法
- 编写Service类java代码,自定义Service类MultiFindFilter.java中实现find方法,实现的逻辑是如果对应页面有配置多船选择,则在查询条件中加入多船查询条件。云平台框架调用查询前调用Service类时,会自动传入example查询条件参数。
Service类的代码参考如下:
/**
* 多船选择查询过滤
* Created by user on 2017/3/31.
*/
@Service
public class MultiVesselFindFilter {
@Autowired
VopSysMultiShipSelectedService vopSysMultiShipSelectedService;
public void find(BaseExample example){
//
boolean flag = true ;
String menuNo = "";
IUser user = UserContextHolder.getCurrentUser();
RequestAndResponseContextHolder.request();
if(example instanceof VocVoyageTaskExample){
VocVoyageTaskExample exampleActual = (VocVoyageTaskExample)example;
menuNo = "vocVoyageTaskManage.html";
if(exampleActual.getOredCriteria() != null && exampleActual.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleActual.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VwVocVoyPlanOnStopExample){
//2017-4-12 zhengtd 增加停航船舶界面
VwVocVoyPlanOnStopExample exampleVoyPlanOnStop = (VwVocVoyPlanOnStopExample)example;
menuNo = "vwVocVoyPlanOnStopManage.html";
if(exampleVoyPlanOnStop.getOredCriteria() != null && exampleVoyPlanOnStop.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleVoyPlanOnStop.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VwVocVoyPlanOnPortExample){
//2017-4-12 zhengtd 增加在港船舶界面
VwVocVoyPlanOnPortExample exampleVoyPlanOnPort = (VwVocVoyPlanOnPortExample)example;
menuNo = "vwVocVoyPlanOnPortManage.html";
if(exampleVoyPlanOnPort.getOredCriteria() != null && exampleVoyPlanOnPort.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleVoyPlanOnPort.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VwVocAllShoreRptExample){
//2017-4-12 zhengtd 增加岸端电报录入界面
VwVocAllShoreRptExample exampleAllShoreRpt = (VwVocAllShoreRptExample)example;
menuNo = "vwVocAllShoreRptManage.html";
if(exampleAllShoreRpt.getOredCriteria() != null && exampleAllShoreRpt.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleAllShoreRpt.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VwVocVoyPlanUnvoyExample){
//2017-4-12 zhengtd 增加非营运船舶界面
VwVocVoyPlanUnvoyExample exampleVoyPlanUnvoy = (VwVocVoyPlanUnvoyExample)example;
menuNo = "vwVocVoyPlanUnvoyManage.html";
if(exampleVoyPlanUnvoy.getOredCriteria() != null && exampleVoyPlanUnvoy.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleVoyPlanUnvoy.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VocRptEmailsExample){
VocRptEmailsExample vocRptEmailsExample = (VocRptEmailsExample)example;
menuNo = "vocRptEmailsManage.html";
if(vocRptEmailsExample.getOredCriteria()!=null && vocRptEmailsExample.getOredCriteria().size()>0){
List<Criterion> criterions = vocRptEmailsExample.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}
else if(example instanceof VwAddOilPlanExample){
//2017-8-18 luoaj 增加加油计划界面
VwAddOilPlanExample exampleAddOilPlan = (VwAddOilPlanExample)example;
menuNo = "vwAddOilPlanManage.html";
if(exampleAddOilPlan.getOredCriteria() != null && exampleAddOilPlan.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleAddOilPlan.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}else if(example instanceof VwTraPortChargePortExample){
//2017-8-24
VwTraPortChargePortExample exampleTraPortChargePort = (VwTraPortChargePortExample)example;
menuNo = "vwTraPortChargePortManage.html";
if(exampleTraPortChargePort.getOredCriteria() != null && exampleTraPortChargePort.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleTraPortChargePort.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}
else if(example instanceof VwTraPortEstBalanceExample){
//2017-09-18
//预估余额冲销界面
VwTraPortEstBalanceExample vwTraPortEstBalanceExample = (VwTraPortEstBalanceExample)example;
menuNo = "vwTraPortEstBalanceManage.html";
if(vwTraPortEstBalanceExample.getOredCriteria() != null && vwTraPortEstBalanceExample.getOredCriteria().size() > 0)
{
List<Criterion> criterions = vwTraPortEstBalanceExample.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}
else if(example instanceof VwPortChargeHeaderExample){
//2017-10-16 luoaj 港使费预估查询页面
VwPortChargeHeaderExample exampleVwPortChargeHeader = (VwPortChargeHeaderExample)example;
menuNo = "vwPortChargeHeaderManage.html";
if(exampleVwPortChargeHeader.getOredCriteria() != null && exampleVwPortChargeHeader.getOredCriteria().size() > 0)
{
List<Criterion> criterions = exampleVwPortChargeHeader.getOredCriteria().get(0).getAllCriteria();
flag = insetParam(criterions,menuNo);
}
}
else{
flag = false;
}
if(flag){
VopSysMultiShipSelectedExample vopSysMultiShipSelectedExample = VopSysMultiShipSelectedExample.create();
vopSysMultiShipSelectedExample.and().andUsrCodeEqualTo(user.getUsername())
.andMenuNoEqualTo(menuNo);
int count = vopSysMultiShipSelectedService.countByExample(vopSysMultiShipSelectedExample);
if(count > 0){
example.and().andCreateCondition(" VESSEL_CODE in (select smss.vessel_code from SYS_MULTI_SHIP_SELECTED smss where smss.usr_code = '"+user.getUsername()+"' and smss.menu_no = '"+menuNo+"')");
}
}
}
public boolean insetParam(List<Criterion> criterions,String menuNo){
if(criterions != null && criterions.size() > 0){
for(Criterion criterion : criterions){
System.out.println(criterion.getPropertyName());
if("vesselCode".equals(criterion.getPropertyName())){
return false;
}
}
}
return true;
}
}
3.4. 自定义扩展覆盖查询逻辑3.4. 自定义扩展覆盖查询逻辑
自定义扩展接口类代码
package com.gillion.base.freightcg.service.custom;
import com.gillion.platform.framework.core.query.DefaultQueryService;
/**
* Created on 2018/8/15.
*/
@SuppressWarnings("all")
public interface queryExtService extends DefaultQueryService{
}
自定义扩展实现类的代码
package com.gillion.base.freightcg.service.custom;
import com.gillion.base.freightcg.domain.BcFreightBf;
import com.gillion.base.freightcg.domain.BcFreightBfExample;
import com.gillion.base.freightcg.domain.BcFreightChangeItem;
import com.gillion.base.freightcg.domain.BcFreightChangeItemExample;
import com.gillion.base.freightcg.service.BcFreightBfService;
import com.gillion.base.freightcg.service.BcFreightChangeItemService;
import com.gillion.platform.framework.core.Constants;
import com.gillion.platform.framework.core.query.OrderColumn;
import com.gillion.platform.framework.core.query.Page;
import com.gillion.platform.framework.core.query.PageRequest;
import com.gillion.platform.framework.core.query.SearchColumn;
import com.gillion.platform.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.gillion.platform.framework.core.web.BaseMultiActionController.removeSearchColumn;
/**
* Created by liyy on 2018/8/15.
*/
@Service
@SuppressWarnings("all")
public class queryExtServiceImpl implements queryExtService{
@Autowired
protected BcFreightChangeItemService bcFreightChangeItemService;
@Autowired
protected BcFreightBfService bcFreightBfService;
@Override
public void query(HttpServletRequest request, Map<String, Object> result, List<SearchColumn> searchColumns, List<OrderColumn> orderColumns, PageRequest pageRequest, String gridKey, String s1) {
String jobOrderNo = null;
BcFreightBfExample example = BcFreightBfExample.create(searchColumns);
BcFreightChangeItemExample bcFreightChangeItemExample = BcFreightChangeItemExample.create();
for(SearchColumn searchColumn:searchColumns){
if(searchColumn.getPropertyName().equals("jobOrderNo")){
jobOrderNo = searchColumn.getValue();
break;
}
}
if(StringUtils.isNotBlank(jobOrderNo)){
bcFreightChangeItemExample.createCriteria().andJobOrderNoEqualTo(jobOrderNo);
List<BcFreightChangeItem> bcFreightChangeItemmList = bcFreightChangeItemService.selectByExample(bcFreightChangeItemExample);
List<String> list = new ArrayList<String>();
for(BcFreightChangeItem bcFreightChangeItem : bcFreightChangeItemmList){
if(StringUtils.isNotBlank(bcFreightChangeItem.getBcFreightId())) {
list.add(bcFreightChangeItem.getBcFreightId());
}
}
if(list.size()>0) {
example.createCriteria().andBcFreightIdIn(list);
}
}
example.addOrderByClause(BcFreightBf.class, orderColumns);
List<BcFreightBf> bcFreightBfs = new ArrayList<BcFreightBf>();
if(pageRequest.isQueryPage())
{
Page<BcFreightBf> page = bcFreightBfService.find(pageRequest, example);
bcFreightBfs = page.getRecords();
result.put(Constants.TOTAL, page.getTotalRecord());
}
else
{
bcFreightBfs = bcFreightBfService.find(example);
result.put(Constants.TOTAL, bcFreightBfs.size());
}
// 1 ---BcFreightBf
result.put("bcFreightBfs", bcFreightBfs);
}
}