package com.ycsoft.sysmanager.web.action.config; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ycsoft.beans.config.TRuleEdit; import com.ycsoft.beans.system.SSysChange; import com.ycsoft.commons.abstracts.BaseAction; import com.ycsoft.commons.constants.DictKey; import com.ycsoft.commons.constants.SysChangeType; import com.ycsoft.commons.exception.ActionException; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.commons.store.MemoryDict; import com.ycsoft.commons.tree.TreeBuilder; import com.ycsoft.commons.tree.TreeNode; import com.ycsoft.daos.helper.BeanHelper; import com.ycsoft.sysmanager.component.config.RuleComponent; import com.ycsoft.sysmanager.component.system.ParamComponent; import com.ycsoft.sysmanager.dto.config.RuleDefineDto; import com.ycsoft.sysmanager.dto.config.RuleEditDto; public class RuleAction extends BaseAction { /** * */ private static final long serialVersionUID = -4755713479110498142L; private RuleComponent ruleComponent; private ParamComponent paramComponent; private RuleDefineDto rule; private String ruleId; private String comboQueryText; private String model_name; private String tableName; private String resultColumn; private String selectColumn; private String dataType; private String query; /** * 根据数据类型查询对应规则属性 * @return * @throws Exception */ public String queryRulePropByDataRightType() throws Exception { getRoot().setRecords(ruleComponent.queryRulePropByDataRightType(dataType)); return JSON_RECORDS; } /** * 根据用户选择的数据类型,动态查询数据 * @return * @throws Exception */ public String queryDynamicData() throws Exception { getRoot().setRecords(ruleComponent.queryDynamicData(tableName, resultColumn, selectColumn)); return JSON_RECORDS; } /** * 查询所有数据类型 * @return * @throws Exception */ public String queryAllSDataType() throws Exception { getRoot().setRecords(ruleComponent.queryAllSDataType()); return JSON_RECORDS; } /** * 地址树查询 * @return * @throws Exception */ public String findAllAddress() throws Exception { List list = paramComponent.findAllAddress(comboQueryText,optr.getCounty_id()); List<TreeNode> addTree = TreeBuilder.createTree(list); getRoot().setRecords(addTree); return JSON_RECORDS; } /** * 明细规则配置 * @return * @throws Exception */ public String updateDetailRule() throws Exception { RuleEditDto former = ruleComponent.queryRuleForCollectChangeInfo(rule); String ruleid = ruleComponent.updateDetailRule(rule); rule.setRule_id(ruleid); RuleEditDto newOne = ruleComponent.queryRuleForCollectChangeInfo(rule); saveSysChange(former,newOne); return JSON; } /** * 手工规则配置 * @return * @throws Exception */ public String updateHandRule() throws Exception { RuleEditDto former = ruleComponent.queryRuleForCollectChangeInfo(rule); rule.setRule_id(ruleComponent.updateHandRule(rule)); RuleEditDto newOne = ruleComponent.queryRuleForCollectChangeInfo(rule); saveSysChange(former,newOne); return JSON; } /** * 保存或修改条件规则 * @return * @throws Exception */ public String updateRuleAndRuleEdit() throws Exception { String ruleInfo = request.getParameter("ruleEditDto"); Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); RuleEditDto ruleEditDto = gson.fromJson(ruleInfo, RuleEditDto.class); //规则对象 RuleDefineDto rule = ruleEditDto.getRule(); //规则编辑对象 List<TRuleEdit> ruleEdits = ruleEditDto.getRuleEdits(); RuleEditDto former = ruleComponent.queryRuleForCollectChangeInfo(rule); rule.setRule_id(ruleComponent.updateRuleAndRuleEdit(rule, ruleEdits)); RuleEditDto theNewOne = ruleComponent.queryRuleForCollectChangeInfo(rule); saveSysChange(former,theNewOne); return JSON_SUCCESS; } private void saveSysChange(RuleEditDto former, RuleEditDto theNewOne) throws Exception{ if(former ==null && theNewOne == null){ throw new ActionException("比较的两个对象都为空!"); } if(former ==null && theNewOne !=null){ former = new RuleEditDto(); }else if(theNewOne ==null && former !=null){ theNewOne = new RuleEditDto(); } RuleDefineDto oldRuleObj = former.getRule(); if(null !=oldRuleObj){ oldRuleObj.setOptr_id(MemoryDict.getDictName(DictKey.OPTR, oldRuleObj.getOptr_id())); } RuleDefineDto newRuleObj = theNewOne.getRule(); if(null !=newRuleObj){ String optrId = newRuleObj.getOptr_id(); newRuleObj.setOptr_id(MemoryDict.getDictName(DictKey.OPTR, optrId)); } List<SSysChange> changes = new ArrayList<SSysChange>(); String [] basicChangeFields = new String [] {"rule_id","rule_name","remark","rule_type","data_type","cfg_type","pre_billing_rule","optr_id","eff_date","exp_date"}; String basicChange = BeanHelper.beanchange(oldRuleObj, newRuleObj,basicChangeFields); //两个肯定最多只有一个为空,因此下面的方法可行 String key = theNewOne ==null ? oldRuleObj.getRule_id() : theNewOne.getRule().getRule_id(); String keyDesc = theNewOne ==null ? oldRuleObj.getRule_name() : theNewOne.getRule().getRule_name(); String optrId = getOptr().getOptr_id(); if(!StringHelper.isEmpty(basicChange)){ //两个肯定最多只有一个为空,因此下面的方法可行 SSysChange change = new SSysChange(SysChangeType.RULE.toString(), ruleComponent.getDoneCOde(), key, keyDesc, "规则基本定义", basicChange, optrId, new Date()); changes.add(change); } String detailChange = BeanHelper.beanchange(oldRuleObj, newRuleObj,"rule_str"); if(!StringHelper.isEmpty(detailChange)){ //两个肯定最多只有一个为空,因此下面的方法可行 SSysChange change = new SSysChange(SysChangeType.RULE.toString(), ruleComponent.getDoneCOde(), key, keyDesc, "规则详细内容", detailChange, optrId, new Date()); changes.add(change); } String countyChange = BeanHelper.beanchange(oldRuleObj, newRuleObj,"county_name"); if(!StringHelper.isEmpty(countyChange)){ //两个肯定最多只有一个为空,因此下面的方法可行 SSysChange change = new SSysChange(SysChangeType.RULE.toString(), ruleComponent.getDoneCOde(), key, keyDesc, "规则适用分公司", countyChange, optrId, new Date()); changes.add(change); } if(!changes.isEmpty()){ ruleComponent.getSSysChangeDao().save(changes.toArray(new SSysChange[changes.size()])); } } public String queryRuleEditByRuleId() throws Exception{ getRoot().setRecords(ruleComponent.queryRuleEditByRuleId(ruleId)); return JSON_RECORDS; } /** * 规则属性 * @return * @throws Exception */ public String queryRuleProp() throws Exception { getRoot().setRecords(ruleComponent.queryRuleProp(comboQueryText)); // getRoot().setRecords(tRuleComponent.queryRuleProp(model_name)); return JSON_RECORDS; } /** * 规则对应的 引用对象 * @param rule_id 规则id * @return * @throws Exception */ public String queryRuleObjByRuleId() throws Exception{ getRoot().setRecords(ruleComponent.queryRuleObjByRuleId(ruleId)); return JSON_RECORDS; } public String getTruleByRuleId() throws Exception{ getRoot().setSimpleObj(ruleComponent.getTruleByRuleId(ruleId)); return JSON_SIMPLEOBJ; } public String queryAllRules() throws Exception { getRoot().setPage(ruleComponent.queryAllRules(query,dataType,optr.getCounty_id(),start,limit)); return JSON_PAGE; } public String queryRuleCounty() throws Exception { getRoot().setRecords(ruleComponent.queryRuleCounty(optr)); return JSON_RECORDS; } public void setTRuleComponent(RuleComponent ruleComponent) { ruleComponent = ruleComponent; } public void setRuleId(String ruleId) { this.ruleId = ruleId; } public void setComboQueryText(String comboQueryText) { this.comboQueryText = comboQueryText; } public void setModel_name(String model_name) { this.model_name = model_name; } public void setParamComponent(ParamComponent paramComponent) { this.paramComponent = paramComponent; } public RuleDefineDto getRule() { return rule; } public void setRule(RuleDefineDto rule) { this.rule = rule; } public void setTableName(String tableName) { this.tableName = tableName; } public void setResultColumn(String resultColumn) { this.resultColumn = resultColumn; } public void setSelectColumn(String selectColumn) { this.selectColumn = selectColumn; } public void setRuleComponent(RuleComponent ruleComponent) { this.ruleComponent = ruleComponent; } public void setDataType(String dataType) { this.dataType = dataType; } public void setQuery(String query) { this.query = query; } }