扩展

1.扩展Controller1.扩展Controller



一、 说明
在某些情况下,项目组需要根据自己的业务需求编写前端代码后,直接请求到自己的控制器上。
二、 例子
1、 先自定义个js,此步骤可以参考【自定义js】。
举个例子,此处写了个自定义的方法请求控制器。

/*
            修改类型
         */
        $scope.custExtendCtrTestLixq301Db = function(){
            if($scope.testLixq301DbCheckedRows.length !=1){
                GillionMsg.alert("提示信息","请勾选一条记录!");
                return;
            }
            var params={};
            params.id = $scope.testLixq301DbCheckedRows[0].testLixq301Id;
            params.cascade=false;
            $http.get($config.ctx
                + '/testLixq301Db/modifyTestCaseType',{params:params}).success(function(data){
                    if(data.success != undefined && data.success == true) {
                        $scope.getTestLixq301DbPages();
                    }
                    },1);

        };

扩展控制器-例子1
2、 在工程中定义编写自己扩展的的Controller文件
2.1. 文件存放路径为:在你要扩展的控制器如下图的3中,新增个custom文件。将文件放在custom目录下。
2.2. 文件地址:建议是在要扩展的名称中添加Ext,如下图的3和2名称差别。
2.3. 对于要扩展的文件:要添加如下图4的注解,类要继承如下图5的方法,另外如下图6中的方法需要重载,属性要定义。
扩展控制器-例子2

@Controller
@SuppressWarnings("all")
public class TestLixq301DbExtController extends BaseAbstractController {
    protected static final String boName = "TestLixq301Db";
    /* (non-Javadoc)
 * @see com.gillion.framework.core.web.BaseAbstractController#getBoName()
 */
    @Override
    public String getBoName()
    {
        return boName;
    }

    @Autowired
    private LocalValidatorFactoryBean validator;


    @Autowired
    protected TestLixq301DbService testLixq301DbService;

3、 编写自己的方法
举个栗子:

@RequestMapping(value = "testLixq301Db/modifyTestCaseType")
    public void modifyTestCaseType(@RequestParam(value="id") Long id,@RequestParam(value="cascade") Boolean cascade,  HttpServletResponse response) throws Exception
    {
        TestLixq301Db testLixq301Db=testLixq301DbService.get(id, cascade);
        if("lixq6".equals(testLixq301Db.getTestCaseName())&& "1".equals(testLixq301Db.getTestCaseType())){
            testLixq301Db.setTestCaseType("2");
            testLixq301Db.setRowStatus(16);
            testLixq301DbService.update(testLixq301Db);
        }else{
            throw new BusinessException("名称不为:lixq6且类型不为:一级,不修改数据!");

        }
        ResponseUtils.flushSuccess(response, "请求成功!", "testLixq301Db", testLixq301Db);
    }

扩展控制器-例子3
4、 效果
举个栗子:
扩展控制器-例子4

2.扩展Service2.扩展Service

2.1. 功能说明

平台实现的功能一般是增删查改的功能,没有对应的业务逻辑。而真正的项目的保存,修改保存,查询、删除,批量删除前、后可能会有些业务逻辑需要处理,这个时候就可以通过扩展Service实现。

2.2. 传入参数说明

不同的系统方法,调用自定义服务类方法时传入参数说明:

  • 新增保存,修改保存,get方法,传入当前对象,可看生成的代码上传入的值
  •   public void validContract4Confirm(MfOrder mfOrder){ }
    
  • 删除方法,传入的是主键id
  •   public void deletePre(Long id){ }
    
  • 批量删除,传入的是方法主键数组ids
  •   public void deleteBefore(Long[] ids){ }
    
  • find方法,传入的是example组合条件参数。云平台框架调用查询前调用Service类时,会自动传入example查询条件参数。例如:
  •   public void find(BaseExample example){ }
    
  • 一般传入的参数是方法本身的入参参数直接传到到自定义类的方法中。
  • 2.3. 范例说明

    此处以删除前扩展service服务为例子

    配置

    1. 编写service的java文件
      1)文件存放路径为:在你要扩展的service中,新增个custom文件。将文件放在custom目录下。
      2)文件地址:建议是在要扩展的名称中添加Ext,和平台生成的ServiceImpl文件区别。
      扩展服务类-例子1

    3)service为接口,继承IBaseService,在接口中定义自己的方法。

    public interface TestLixq301DbExtService extends IBaseService<Long,TestLixq301Db,TestLixq301DbExample> {
        public void deletePre(Long id);
    }
    

    4)在service实现类中加入@Service注解,且实现类要继承BaseServiceImpExt,然后在自己的服务编写自己的逻辑代码。

    @Service
    @SuppressWarnings("all")
    public class TestLixq301DbExtServiceImpl extends BaseServiceImplExt<Long,TestLixq301Db,TestLixq301DbExample>
            implements TestLixq301DbExtService {
    
        @Override
        public void deletePre(Long id){
            TestLixq301Db testLixq301Db=new TestLixq301Db();
            TestLixq301DbService testLixq301DbService = SpringContextHolder.getBean(TestLixq301DbService.class);
            testLixq301Db=testLixq301DbService.get(id);
            if("1".equals(testLixq301Db.getOrderType())){
                throw new BusinessException("订单类型为OrderType1时,不允许删除!");
            }
    
        }
    }
    

    2.对象建模–业务对象–业务对象管理:编辑业务对象,点击【业务对象扩展】tab页,新增一笔记录,填写扩展Service文件名称,类型为:Java Service,路径为扩展service在工程中的路径
    扩展1

    扩展2

    3.编辑业务对象,在【方法定义】tab页找到删除方法,并进行编辑,在【调用规则表】tab页新增一笔记录,扩展名称为扩展Service的名称,执行类型为:Java Service,执行内容为Service中的方法名称,调用时机为执行之前
    扩展3

    代码

         public void delete(Long id){
            testLixq301DbExtService.deletePre(id);
            List<Long> testLixq301Ids = Lists.newArrayList(id);
            TestLixq301DbExample testLixq301DbExample = TestLixq301DbExample.create();
            testLixq301DbExample.and().andCreateCondition(TestLixq301Db.TESTLIXQ301ID,"testLixq301Id",Operation.IN,Arrays.asList(id));
            if (!testLixq301Ids.isEmpty()){
                testLixq301DetailDbService.deleteWithParent(testLixq301Ids);
            }
            super.delete(id);
         }
    

    RowStatus说明 RowStatus说明



    1、初始值,没有改变过。
    public final static int ROWSTATUS_UNCHANGED = 2;
    2、新增的状态。
    public final static int ROWSTATUS_ADDED = 4;
    3、删除的状态。
    public final static int ROWSTATUS_DELETED = 8;
    4、修改过的状态。
    public final static int ROWSTATUS_MODIFIED = 16;
    5、新加载时的状态。
    public final static int ROWSTATUS_LOADING = 32;
    6、每行的状态,包括四种状态。
    @Transient
    private int rowStatus = ROWSTATUS_UNCHANGED;
    7、判断实体是否处于修改状态(包含添加,修改,删除)
    @Transient
    @JsonIgnore
    public boolean isDirty()
    {
    return this.rowStatus == ROWSTATUS_ADDED || this.rowStatus == ROWSTATUS_DELETED || this.rowStatus == ROWSTATUS_MODIFIED;
    }
    8、根据实体的前一个状态设置为修改后的状态,”Detached and Added to Added”,”Unchaged to Modify”
    public void setModifyStatus()
    {
    if (getRowStatus() == BaseObject.ROWSTATUS_DETACHED || getRowStatus() == BaseObject.ROWSTATUS_ADDED)
    {
    setRowStatus(BaseObject.ROWSTATUS_ADDED);
    }
    else
    {
    setRowStatus(BaseObject.ROWSTATUS_MODIFIED);
    }
    }

    扩展JS中引项目组JS代码扩展JS中引项目组JS代码


    一、关键字

    1. 引入公共js、项目组js文件引入

    二、注意点

    1. 3.0.0.0+版本支持
    2. 本例子是针对分布式服务编写的,如果是单系统的引入js文件处方式需微调

    三、效果

    1. 项目组抽取的公共代码,例如每个基础数据界面都有共通的按钮,生效,失效,逻辑是一样的,差异仅仅是传入参数不一致,此时可以抽取一份公共的js文件,其他对象只需要引入此份js文件,调用里面的方法即可。

    四、配置

    1. 项目组需要根据实际抽取相应的功能js文件,此份文件需要遵循requirejs的格式,例如下图所示
      项目组在扩展JS引入项目组公共js-配置1

    2. 将编写好的文件放入项目路径下面,例如:
      xiangyu_dev\xy_www\static\app\custom\action\effectAction.js

    3. 打开具体对象的二次开发扩展js文件1)引入文件;2)定义引入变量;3)调用函数;如下图所示。
      项目组在扩展JS引入项目组公共js-配置2

    五、代码