package com.ycsoft.sysmanager.component.prod;
import java.lang.reflect.Type;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.reflect.TypeToken;
import com.ycsoft.beans.config.TAcctitemToProd;
import com.ycsoft.beans.config.TServerRes;
import com.ycsoft.beans.prod.PDictProd;
import com.ycsoft.beans.prod.PPackageProd;
import com.ycsoft.beans.prod.PPackageProdHis;
import com.ycsoft.beans.prod.PProd;
import com.ycsoft.beans.prod.PProdCounty;
import com.ycsoft.beans.prod.PProdCountyPrice;
import com.ycsoft.beans.prod.PProdCountyRes;
import com.ycsoft.beans.prod.PProdDict;
import com.ycsoft.beans.prod.PProdDictCounty;
import com.ycsoft.beans.prod.PProdDynRes;
import com.ycsoft.beans.prod.PProdResChange;
import com.ycsoft.beans.prod.PProdStaticRes;
import com.ycsoft.beans.prod.PProdTariff;
import com.ycsoft.beans.prod.PProdTariffCounty;
import com.ycsoft.beans.prod.PProdTariffDisct;
import com.ycsoft.beans.system.SArea;
import com.ycsoft.beans.system.SCounty;
import com.ycsoft.beans.system.SItemvalue;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.beans.system.SSysChange;
import com.ycsoft.business.dao.config.TAcctitemToProdDao;
import com.ycsoft.business.dao.config.TRuleDefineDao;
import com.ycsoft.business.dao.config.TServerCountyDao;
import com.ycsoft.business.dao.prod.PDictProdDao;
import com.ycsoft.business.dao.prod.PPackageProdDao;
import com.ycsoft.business.dao.prod.PPackageProdHisDao;
import com.ycsoft.business.dao.prod.PProdCountyDao;
import com.ycsoft.business.dao.prod.PProdCountyPriceDao;
import com.ycsoft.business.dao.prod.PProdCountyResDao;
import com.ycsoft.business.dao.prod.PProdDao;
import com.ycsoft.business.dao.prod.PProdDictCountyDao;
import com.ycsoft.business.dao.prod.PProdDictDao;
import com.ycsoft.business.dao.prod.PProdDynResDao;
import com.ycsoft.business.dao.prod.PProdResChangeDao;
import com.ycsoft.business.dao.prod.PProdStaticResDao;
import com.ycsoft.business.dao.prod.PProdTariffCountyDao;
import com.ycsoft.business.dao.prod.PProdTariffDao;
import com.ycsoft.business.dao.prod.PProdTariffDisctCountyDao;
import com.ycsoft.business.dao.prod.PProdTariffDisctDao;
import com.ycsoft.business.dao.prod.PPromFeeCountyDao;
import com.ycsoft.business.dao.prod.PPromotionDao;
import com.ycsoft.business.dao.prod.PResDao;
import com.ycsoft.business.dao.prod.PResgroupDao;
import com.ycsoft.business.dao.prod.PSpkgDao;
import com.ycsoft.business.dao.prod.TServerResDao;
import com.ycsoft.business.dao.system.SAreaDao;
import com.ycsoft.business.dao.system.SCountyDao;
import com.ycsoft.business.dao.system.SRoleCountyDao;
import com.ycsoft.business.dao.system.SSysChangeDao;
import com.ycsoft.business.dto.core.prod.ProdTariffDto;
import com.ycsoft.commons.abstracts.BaseComponent;
import com.ycsoft.commons.constants.BusiCmdConstants;
import com.ycsoft.commons.constants.DataRight;
import com.ycsoft.commons.constants.DictKey;
import com.ycsoft.commons.constants.FuncCode;
import com.ycsoft.commons.constants.SysChangeType;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.exception.ComponentException;
import com.ycsoft.commons.exception.ErrorCode;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.JsonHelper;
import com.ycsoft.commons.helper.NumericHelper;
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.core.JDBCException;
import com.ycsoft.daos.helper.BeanHelper;
import com.ycsoft.sysmanager.dto.config.VewRuleDto;
import com.ycsoft.sysmanager.dto.prod.PProdDictDto;
import com.ycsoft.sysmanager.dto.prod.ProdCountyResDto;
import com.ycsoft.sysmanager.dto.prod.ProdDto;
import com.ycsoft.sysmanager.dto.prod.ProdResServIdDto;
import com.ycsoft.sysmanager.dto.prod.ResDto;
import com.ycsoft.sysmanager.dto.prod.ResGroupDto;
import com.ycsoft.sysmanager.dto.tree.TreeDto;
import com.ycsoft.sysmanager.web.commons.interceptor.WebOptr;
@Component
public class ProdComponent extends BaseComponent {
private PProdDao pProdDao;// 产品定义
private PProdCountyDao pProdCountyDao;
private PProdTariffDao pProdTariffDao;
private SRoleCountyDao sRoleCountyDao;
private PResDao pResDao;
private PResgroupDao pResgroupDao;
private SAreaDao sAreaDao;
private PProdDynResDao pProdDynResDao;
private PProdStaticResDao pProdStaticResDao;
private PProdTariffDisctDao pProdTariffDisctDao;
private PDictProdDao pDictProdDao;
private PPackageProdDao pPackageProdDao;
private PPackageProdHisDao pPackageProdHisDao;
private TRuleDefineDao tRuleDefineDao;
private SCountyDao sCountyDao;
private PProdCountyResDao pProdCountyResDao;
private PProdResChangeDao pProdResChangeDao;
private PProdTariffCountyDao pProdTariffCountyDao;
private PProdTariffDisctCountyDao pProdTariffDisctCountyDao;
private TAcctitemToProdDao tAcctitemToProdDao;
private TServerResDao tServerResDao;
private PPromotionDao pPromotionDao;
private PProdDictDao pProdDictDao;
private PProdDictCountyDao pProdDictCountyDao;
private PPromFeeCountyDao pPromFeeCountyDao;
private PProdCountyPriceDao pProdCountyPriceDao;
private SSysChangeDao sSysChangeDao;
private TServerCountyDao tServerCountyDao;
@Autowired
private PSpkgDao pSpkgDao;
/**
* 查询产品树
* @param optr
* @param showExp 是否查看失效
* @return
* @throws Exception
*/
// public List<TreeNode> getProdTree(SOptr optr,String showAll,String startEffDate,
// String endEffDate, String startExpDate, String endExpDate) throws Exception {
// List<SItemvalue> servList = MemoryDict.getDicts(DictKey.SERV_ID);
// List<SItemvalue> pkgList = MemoryDict.getDicts(DictKey.PROD_TYPE);
// String countyDataRight = null;
//// if(SystemConstants.COUNTY_ALL.equals(optr.getCounty_id())){
//// countyDataRight = SystemConstants.DEFAULT_DATA_RIGHT;
//// }else{
// countyDataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
//// }
// List<PProd> prods = pProdDao.getProdByAreaId(countyDataRight,showAll, startEffDate,
// endEffDate, startExpDate, endExpDate);
// List<PProd> baseProds = null;
//// List<PProd> upkgProds = null;
// List<TreeNode> ct = null;
//// List<TreeNode> et = null;
//
// Map<String, List<PProd>> disctmap = CollectionHelper.converToMap(prods,"prod_type");
//
// baseProds = disctmap.get(SystemConstants.PROD_TYPE_BASE);
//// upkgProds = disctmap.get(SystemConstants.PROD_TYPE_USERPKG);
// //客户套餐暂时取消
//// List<PProd> cpkgProds = null;
//// List<TreeNode> dt = null;
//// cpkgProds = disctmap.get(SystemConstants.PROD_TYPE_CUSTPKG);
//// if(cpkgProds!=null){
//// dt = TreeBuilder.convertToProdNodes(cpkgProds, "prod_id","prod_name");
//// }
//// for (int i = pkgList.size()-1; i>=0; i--) {
//// if(pkgList.get(i).getItem_value().equals(SystemConstants.PROD_TYPE_CUSTPKG)){
//// pkgList.remove(i);
//// }
//// }
//
// List<TreeNode> at = TreeBuilder.convertToNodes(pkgList, "item_value","item_name");
// List<TreeNode> bt = TreeBuilder.convertToNodes(servList, "item_value","item_name");
// bt.addAll(at);
//
// if(prods!=null){
// ct = TreeBuilder.convertToProdNodes(prods, "prod_id","prod_name");
// }
//// if(upkgProds!=null){
//// et = TreeBuilder.convertToProdNodes(upkgProds, "prod_id","prod_name");
//// }
//// for (int i = 0; i < pkgList.size(); i++) {
//// if(pkgList.get(i).getItem_value().equals(SystemConstants.PROD_TYPE_BASE)){
//// for (int j = 0; j < servList.size(); j++) {
//// at.get(i).getChildren().add(bt.get(j));
//// }
//// }
////
//// if(pkgList.get(i).getItem_value().equals(SystemConstants.PROD_TYPE_CUSTPKG)&&cpkgProds!=null){
//// for (int j = 0; j < cpkgProds.size(); j++) {
//// dt.get(j).setLeaf(true);
//// if (cpkgProds.get(j).getProd_type().equals(SystemConstants.PROD_TYPE_CUSTPKG)) {
//// if(optr.getArea_id().equals(SystemConstants.AREA_ALL)){
//// dt.get(j).getOthers().put("att", "prodId");
//// }else{
//// if(cpkgProds.get(j).getFor_area_id().equals(SystemConstants.AREA_ALL)){
//// dt.get(j).getOthers().put("att", "areaProdId");
//// }else{
//// dt.get(j).getOthers().put("att", "prodId");
//// }
//// }
//// dt.get(j).getOthers().put("area_id", cpkgProds.get(j).getArea_id());
//// at.get(i).getChildren().add(dt.get(j));
//// }
//// }
//// }
//// if(pkgList.get(i).getItem_value().equals(SystemConstants.PROD_TYPE_USERPKG)&&upkgProds!=null){
//// for (int j = 0; j < upkgProds.size(); j++) {
//// et.get(j).setLeaf(true);
//// if (upkgProds.get(j).getProd_type().equals(SystemConstants.PROD_TYPE_USERPKG)) {
//// if(optr.getArea_id().equals(SystemConstants.AREA_ALL)){
//// et.get(j).getOthers().put("att", "prodId");
//// }else {
//// if(upkgProds.get(j).getFor_area_id().equals(SystemConstants.AREA_ALL)){
//// et.get(j).getOthers().put("att", "areaProdId");
//// }else{
//// et.get(j).getOthers().put("att", "prodId");
//// }
//// }
//// et.get(j).getOthers().put("area_id", upkgProds.get(j).getArea_id());
//// at.get(i).getChildren().add(et.get(j));
//// }
//// }
//// }
//// }
// for (int i = 0; i < servList.size(); i++) {
// if(prods!=null){
// for (int j = 0; j < prods.size(); j++) {
// ct.get(j).setLeaf(true);
// if (servList.get(i).getItem_value().equals(prods.get(j).getServ_id())) {
// if(optr.getArea_id().equals(SystemConstants.AREA_ALL)){
// ct.get(j).getOthers().put("att", "prodId");
// }else{
// if(prods.get(j).getFor_area_id().equals(SystemConstants.AREA_ALL)){
// ct.get(j).getOthers().put("att", "areaProdId");
// }else{
// ct.get(j).getOthers().put("att", "prodId");
// }
// }
// ct.get(j).getOthers().put("area_id", prods.get(j).getArea_id());
// bt.get(i).getChildren().add(ct.get(j));
// }
//
// }
// }
// }
// return bt;
// }
public List<TreeNode> getProdTree(SOptr optr,String showAll,String startEffDate,
String endEffDate, String startExpDate, String endExpDate) throws Exception {
List<SItemvalue> servList = MemoryDict.getDicts(DictKey.SERV_ID);
List<SItemvalue> pkgList = MemoryDict.getDicts(DictKey.PROD_TYPE);
List<SItemvalue> allList = new ArrayList<SItemvalue>();
allList.addAll(servList);
allList.addAll(pkgList);
Iterator<SItemvalue> it = allList.iterator();
while(it.hasNext()){
SItemvalue tempobj = it.next();
if(tempobj.getItem_value().equals(SystemConstants.PROD_TYPE_BASE)){
//移除当前的对象
it.remove();
}
}
String countyDataRight = null;
countyDataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
List<PProd> prods = pProdDao.getProdByAreaId(countyDataRight,showAll, startEffDate,
endEffDate, startExpDate, endExpDate);
// Map<String, List<PProd>> prodtmap = CollectionHelper.converToMap(prods,"prod_type");
List<TreeNode> ct = null;
List<TreeNode> bt = TreeBuilder.convertToNodes(allList, "item_value","item_name");
if(prods!=null){
ct = TreeBuilder.convertToProdNodes(prods, "prod_id","prod_name");
}
for (int i = 0; i < allList.size(); i++) {
if(prods!=null){
for (int j = 0; j < prods.size(); j++) {
ct.get(j).setLeaf(true);
if (allList.get(i).getItem_value().equals(prods.get(j).getServ_id()) || allList.get(i).getItem_value().equals(prods.get(j).getProd_type())) {
if(optr.getArea_id().equals(SystemConstants.AREA_ALL)){
ct.get(j).getOthers().put("att", "prodId");
}else{
if(prods.get(j).getFor_area_id().equals(SystemConstants.AREA_ALL)){
ct.get(j).getOthers().put("att", "areaProdId");
}else{
ct.get(j).getOthers().put("att", "prodId");
}
}
ct.get(j).getOthers().put("area_id", prods.get(j).getArea_id());
bt.get(i).getChildren().add(ct.get(j));
}
}
}
}
return bt;
}
/**
* 地区地市资源关系树 按照TreeNode结构排列
*
* @return
* @throws Exception
*/
public List<TreeNode> getDistrictResTree(String prodId,String forareaId ) throws Exception {
List<SItemvalue> areas = new ArrayList<SItemvalue>();
List<SCounty> countys = null;
/*String areaId = optr.getArea_id();
String countyId = optr.getCounty_id();
if (SystemConstants.AREA_ALL.equals(areaId)) {
//适用地区如果是全省,
if(SystemConstants.AREA_ALL.equals(forareaId)){
countys = sCountyDao.findAll();
areas = MemoryDict.getDicts(DictKey.AREA);
}else{
countys = sCountyDao.getCountyByAreaId(forareaId);
String areaName = MemoryDict.getDictName(DictKey.AREA, forareaId);
areas.add(new SItemvalue(areaName, forareaId));
}
} else {
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
countys = sCountyDao.querySwitchCounty(dataRight);
String areaName = MemoryDict.getDictName(DictKey.AREA, areaId);
areas.add(new SItemvalue(areaName, areaId));
}*/
String dataRight = this.queryDataRightCon(WebOptr.getOptr(), DataRight.CHANGE_COUNTY.toString());
countys = sCountyDao.querySwitchCounty(dataRight);
List<String> areaIdList = sCountyDao.querySwitchArea(dataRight);
for(String areaId : areaIdList){
String areaName = MemoryDict.getDictName(DictKey.AREA, areaId);
areas.add(new SItemvalue(areaName, areaId));
}
List<TreeNode> at = TreeBuilder.convertToNodes(areas, "item_value","item_name");
List<TreeNode> bt = TreeBuilder.convertToNodes(countys, "county_id","county_name");
List<ProdCountyResDto> countyRes = null;
List<TreeNode> ct = null;
boolean isDept = false;
Map<String, String> others = new HashMap<String, String>();
if (StringHelper.isNotEmpty(prodId)) {
countyRes = pProdCountyResDao.getProdCountyResByProdId(prodId);
ct = TreeBuilder.convertToNodes(countyRes, "res_id", "res_name");
isDept = true;
}
if (isDept) {
setCounty2Res(countys, countyRes, bt, ct);
setArea2County(areas, countys, at, bt);
} else {
setArea2County(areas, countys, at, bt);
for (int i = 0; i < countys.size(); i++) {
bt.get(i).setLeaf(false);
others.put("att", "county");
bt.get(i).setOthers(others);
}
}
return at;
}
private void setCounty2Res(List<SCounty> countys,
List<ProdCountyResDto> countyRes, List<TreeNode> bt,
List<TreeNode> ct) {
Map<String, String> others = new HashMap<String, String>();
Map<String, String> othersRes = new HashMap<String, String>();
for (int i = 0; i < countys.size(); i++) {
for (int j = 0; j < countyRes.size(); j++) {
if (countys.get(i).getCounty_id().equals(countyRes.get(j).getCounty_id())) {
ct.get(j).setLeaf(false);
others.put("att", "county");
othersRes.put("att", "res");
ct.get(j).setOthers(othersRes);
bt.get(i).setOthers(others);
bt.get(i).getChildren().add(ct.get(j));
}
}
if (bt.get(i).getChildren().size() == 0) {
bt.get(i).setLeaf(false);
others.put("att", "county");
bt.get(i).setOthers(others);
}
}
}
private void setArea2County(List<SItemvalue> areas, List<SCounty> countys,
List<TreeNode> at, List<TreeNode> bt) {
Map<String, String> others = new HashMap<String, String>();
for (int i = 0; i < areas.size(); i++) {
for (int j = 0; j < countys.size(); j++) {
if (areas.get(i).getItem_value().equals(countys.get(j).getArea_id())) {
at.get(i).getChildren().add(bt.get(j));
others.put("att", "area");
at.get(i).setOthers(others);
}
}
}
}
/**
* 产品目录树
*/
public List<PProdDictDto> getPordDictTree(String prodId) throws Exception {
List<PProdDictDto> nodes = null;
if(WebOptr.getOptr().getCounty_id().equals(SystemConstants.COUNTY_ALL)){
nodes = pDictProdDao.getNodeAll();
}else{
nodes = pProdDictDao.queryProdDictByCountyId(WebOptr.getOptr().getCounty_id());
}
List<PProdDictDto> prods = null;
if (StringHelper.isNotEmpty(prodId)) {
prods = pDictProdDao.getProdNodeByProdId(prodId);
}
for (int i = 0; i < nodes.size(); i++) {
nodes.get(i).setChecked(false);
if (prods != null && !"null".equals(prods)) {
for (int j = 0; j < prods.size(); j++) {
if (nodes.get(i).getNode_id().equals(prods.get(j).getNode_id())) {
nodes.get(i).setChecked(true);
}
}
}
}
return nodes;
}
/**
* 根据地市编号查询产品目录
* @param countyId
* @return
* @throws JDBCException
*/
public List<PProdDictDto> queryProdDictByCountyId(SOptr optr) throws JDBCException{
if(optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)){
return pProdDictDao.queryProdDictAll();
}else{
return pProdDictDao.queryProdDictByCountyId(optr.getCounty_id());
}
}
/**
* 根据目录编号删除没有使用的目录
* @param nodeId
* @return
* @throws Exception
*/
public String deleteDict(String nodeId) throws Exception{
List<PDictProd> dictList = pDictProdDao.queryProdDict(nodeId);
List<PProdDict> prodList = pProdDictDao.queryDictByPid(nodeId);
if(dictList.size() > 0){
return "{'success':false,'msg':'该目录下面已经存在【"+dictList.get(0).getProd_name()+"】等["+dictList.size()+"]个产品,暂不能删除。'}";
}else if(prodList.size()>0){
return "{'success':false,'msg':'该目录下面有子目录,先删除子目录。'}";
}else{
pProdDictDao.deleteProdDict(nodeId);
pProdDictCountyDao.deleteById(nodeId);
return "{'success':true}";
}
}
/**
* 保存目录信息
*/
public void saveProdDict(PProdDict prodDict,String prodCountyIds) throws Exception{
prodDict.setNode_id(pProdDictDao.findSequence().toString());
prodDict.setArea_id(WebOptr.getOptr().getArea_id());
prodDict.setCounty_id(WebOptr.getOptr().getCounty_id());
prodDict.setOptr_id(WebOptr.getOptr().getOptr_id());
pProdDictDao.save(prodDict);
saveProdDictCounty(prodDict.getNode_id(),prodCountyIds);
}
/**
* 更新目录信息
*/
public void updateProdDict(PProdDict prodDict,String prodCountyIds) throws Exception{
pProdDictDao.update(prodDict);
//保存目录适用地区
saveProdDictCounty(prodDict.getNode_id(),prodCountyIds);
}
public void saveProdDictCounty(String nodeId,String prodCountyIds) throws JDBCException{
pProdDictCountyDao.deleteById(nodeId);
if(StringHelper.isNotEmpty(prodCountyIds)){
String[] dictCountys = prodCountyIds.split(",");
for(int i=0;i<dictCountys.length;i++){
PProdDictCounty entity = new PProdDictCounty();
entity.setNode_id(nodeId);
entity.setCounty_id(dictCountys[i]);
pProdDictCountyDao.save(entity);
}
}
}
public List<TreeDto> checkProdDictCountyTree(String nodeId,String nodepId,String type,List<TreeDto> countyList) throws Exception{
String value = "";
//add 为新增目录
if(type.equals("add")){
value = nodeId;
}else{
value = nodepId;
}
if(!nodepId.equals("-1")||(nodepId.equals("-1") && !WebOptr.getOptr().getCounty_id().equals(SystemConstants.COUNTY_ALL))){
List<PProdDictCounty> dictList = pProdDictCountyDao.queryCountyById(value);
countyList = chooseDictCounty(countyList,dictList);
}
// else if(!optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)){
// List<PProdDictCounty> dictList = pProdDictCountyDao.queryCountyById(value);
// countyList = chooseDictCounty(countyList,dictList);
// }
return countyList;
}
public List<TreeDto> chooseDictCounty(List<TreeDto> countyList,List<PProdDictCounty> dictList) throws JDBCException{
for (int j = countyList.size() - 1; j >= 0; j--) {
boolean ck = false;
for(PProdDictCounty pt : dictList){
if(pt.getCounty_id().equals(countyList.get(j).getId())){
ck = true;
}
}
if (!ck) {
countyList.remove(j);
}
}
return countyList;
}
/**
*资费、促销应用地区树
*type 格式String[] type = {"AREA","TARIFF"};type[0]有2种值:AREA,COUNTY与传入areaId值对应;
*/
public List<TreeDto> getCountyTree(SOptr optr,String[] type,String value)throws Exception{
List<TreeDto> countys = null;
List<TreeDto> selectedList = null;
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
countys = sCountyDao.getCountyTreeByDataRight(dataRight);
// if (areaId.equals(SystemConstants.AREA_ALL)||areaId.equals(SystemConstants.COUNTY_ALL)) {
// countys = sCountyDao.getCountyTree();
// }else if(type[0].toString().equals("COUNTY")){
// countys = sCountyDao.getCountyTreeByCountyId(areaId);
// }else if(type[0].toString().equals("AREA")){
// countys = sCountyDao.getCountyTreeByAreaId(areaId);
// }
if (StringHelper.isNotEmpty(value)) {
if(type[1].toString().equals("TARIFF")){//资费应用地区
selectedList = pProdTariffCountyDao.getTariffCountyBytariffId(value);
}else if(type[1].toString().equals("PROMOTION")){//促销应用地区
selectedList = pPromotionDao.getPromCountyById(value);
}else if(type[1].equals("PROD")){
selectedList = pProdCountyDao.getProdCountyById(value);
}else if(type[1].equals("ROLE")){
selectedList = sRoleCountyDao.getRoleCountyById(value);
}else if(type[1].equals("PROMOTIONTHEME")){
selectedList = pPromotionDao.getPromThemeCountyById(value);
}else if(type[1].equals("DICT")){
selectedList = pProdDictCountyDao.getProdDictCountyById(value);
}else if(type[1].equals("PROMFEE")){
selectedList = pPromFeeCountyDao.querybyPromFeeId(value);
}else if(type[1].equals("DISCT")){
selectedList = pProdTariffDisctCountyDao.getTariffDisctCountyByDisctId(value);
}else if(type[1].equals("SERVER")){
selectedList = tServerCountyDao.getServerCountyById(value);
}
}
for (int i = countys.size() - 1; i >= 0; i--) {
if(type[0].toString().equals("CHOOSE")){//去掉湖北省
if(countys.get(i).getId().equals(SystemConstants.COUNTY_ALL)
|| countys.get(i).getId().equals(SystemConstants.AREA_ALL)
|| countys.get(i).getId().equals(SystemConstants.AREA_ALL+"-1")){
countys.remove(i);
continue;
}
}
countys.get(i).setChecked(false);
if (selectedList != null) {
for (int j = 0; j < selectedList.size(); j++) {
if(countys.get(i).getId().equals(selectedList.get(j).getId())){
countys.get(i).setChecked(true);
}
}
}
}
return countys;
}
// -----产品查询-------------------------------------------------------------------------------------------------
/**
* 根据账目id查询产品信息
*
* @param acctItemId
* @return
* @throws Exception
*/
public List<PProd> queryProdByAcctItemId(String acctItemId)
throws Exception {
return pProdDao.queryProdByAcctItemId(acctItemId);
}
/**
* @Description: 查询地区
* @param optr
* @return
* @throws Exception
* @return List<SArea>
*/
public List<SArea> queryArea(SOptr optr) throws Exception {
if (optr.getLogin_name().equals(SystemConstants.SUPER_ADMIN)) {
return sAreaDao.findAll();
} else {
return sAreaDao.getAreaById(optr.getArea_id());
}
}
public List<PProd> queryProdAll(SOptr optr) throws Exception {
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
return pProdDao.getProdByAreaId(dataRight,null,null,null,null,null);
}
public List<PProd> getProdByCounty(String countyId) throws Exception {
String countyDataRight = "county_id='"+countyId+"' ";
return pProdDao.getProdByAreaId(countyDataRight,null,null,null,null,null);
}
/**
* @Description: 静态资源
* @param prodId
* @return
* @throws Exception
* @return List<PProdStaticRes>
*/
public List<ProdCountyResDto> queryStaticAllByProdId(String prodId)
throws Exception {
List<ProdCountyResDto> staticList = pProdStaticResDao.queryStaticResByprodId(prodId);
for(ProdCountyResDto dto:staticList){
List<TServerRes> ResList = tServerResDao.getServerRes(dto.getCounty_id());
Map<String, List<TServerRes>> serverResmap = CollectionHelper.converToMap(ResList, "boss_res_id");
List<TServerRes> serverList = serverResmap.get(dto.getRes_id());
if(serverList ==null) serverList = new ArrayList<TServerRes>();
String str ="";
for(TServerRes serRes: serverList){
str+=serRes.getExternal_res_id()+",";
}
str = StringHelper.delEndChar(str,1);
dto.setServerIds(str);
}
return staticList;
}
/**
* @Description: 动态资源
* @param prodId
* @return
* @throws Exception
* @return List<ResGroupDto>
*/
public List<ResGroupDto> queryDynAllByProdId(String prodId)
throws Exception {
List<ResGroupDto> dto = pProdDynResDao.queryDynByProdId(prodId);
return dto;
}
/**
* 根据产品查询资费
* @param prodId
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryTariffByProdId(String prodId,String[] prodCountyIds)throws Exception {
if(prodCountyIds.length == 1 && StringHelper.isEmpty(prodCountyIds[0])){
throw new ComponentException("请先选择应用地区!");
}
List<ProdTariffDto> list = pProdTariffDao.queryTariffByCounty(prodId,prodCountyIds);
List<ProdTariffDto> tarList = new ArrayList<ProdTariffDto>();
for(ProdTariffDto dto:list){
boolean key = true;
for(ProdTariffDto tar:tarList){
if(tar.getBilling_cycle().equals(dto.getBilling_cycle()) && tar.getRent().equals(dto.getRent())
&& tar.getBilling_type().equals(dto.getBilling_type())){
key = false;
break;
}
}
if(key){
tarList.add(dto);
}
}
return tarList;
}
/**
* 根据产品获取资费以及该资费的折扣
*/
public List<ProdTariffDto> getTariffDisctByProdId(String prodId,SOptr optr)
throws Exception {
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
if(optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)){
dataRight = "1=1";
}
List<ProdTariffDto> dtoList = pProdTariffDao.queryTariffByProdId(prodId,dataRight);
String[] tariffs = CollectionHelper.converValueToArray(dtoList,"tariff_id");
List<PProdTariffCounty> ptCountyList = new ArrayList<PProdTariffCounty>();
if(tariffs.length>0){
ptCountyList = pProdTariffCountyDao.queryTariffCountyById(tariffs);
}
Map<String, List<PProdTariffCounty>> tCountyMap = CollectionHelper.converToMap(ptCountyList,"tariff_id");
// Map<String, List<PProdTariffDisct>> disctmap = CollectionHelper.converToMap(pProdTariffDisctDao.queryDisctByPordId(prodId),
// "tariff_id");
Map<String, VewRuleDto> ruleMap = CollectionHelper.converToMapSingle(tRuleDefineDao.findRuleALL(), "rule_id");
for (ProdTariffDto pt : dtoList) {
if(StringHelper.isNotEmpty(pt.getRule_id())){
VewRuleDto rule = ruleMap.get(pt.getRule_id());
if( rule!= null ){
pt.setRule_id_text(rule.getRule_name());
}
}
if(StringHelper.isNotEmpty(pt.getBill_rule())){
VewRuleDto rule = ruleMap.get(pt.getBill_rule());
if( rule!= null ){
pt.setBill_rule_text(rule.getRule_name());
}
}
if(StringHelper.isNotEmpty(pt.getDay_rent_cal_type())){
VewRuleDto rule = ruleMap.get(pt.getDay_rent_cal_type());
if( rule!= null ){
pt.setDay_rent_cal_type_text(rule.getRule_name());
}
}
if(StringHelper.isNotEmpty(pt.getMonth_rent_cal_type())){
VewRuleDto rule = ruleMap.get(pt.getMonth_rent_cal_type());
if( rule!= null ){
pt.setMonth_rent_cal_type_text(rule.getRule_name());
}
}
if(StringHelper.isNotEmpty(pt.getUse_fee_rule())){
VewRuleDto rule = ruleMap.get(pt.getUse_fee_rule());
if( rule!= null ){
pt.setUse_fee_rule_text(rule.getRule_name());
}
}
// pt.setDisctList(disctmap.get(pt.getTariff_id()));
// pt.setCountyList(pProdTariffCountyDao.queryTariffCountyById(pt.getTariff_id()));
if(tCountyMap.get(pt.getTariff_id()) != null){
List<String> countyList = CollectionHelper.converValueToList(tCountyMap.get(pt.getTariff_id()),"county_id");
pt.setCountyList(countyList);
}
}
return dtoList;
}
/**
* @Description: 查询某个产品的所有信息
* @param prodId
* @return
* @throws Exception
* @return ProdDto
*/
public ProdDto queryProdById(String prodId,SOptr optr) throws Exception {
ProdDto dto = pProdDao.queryProdById(prodId);
if (dto != null) {
dto.setDynamicResList(queryDynAllByProdId(prodId));
dto.setStaticResList(queryStaticAllByProdId(prodId));
dto.setPackList(queryPackProdById(prodId));
dto.setProdTariffList(getTariffDisctByProdId(prodId,optr));
dto.setCountyList(queryProdCountyIds(prodId));
}
return dto;
}
public List<String> queryProdCountyIds(String prodId) throws Exception{
return pProdCountyDao.queryByProdId(prodId);
}
/**
* @Description:获取子产品信息
* @param prodId
* @return
* @throws Exception
* @return List<PPackageProd>
*/
public List<PPackageProd> queryPackProdById(String prodId) throws Exception {
List<PPackageProd> pkgProdList = pPackageProdDao.queryPackProdByProdId(prodId);
return changeProd(pkgProdList);
}
public List<PPackageProd> queryPackProdById(String pkgId,String pkgTariffId) throws Exception {
List<PPackageProd> pkgProdList = new ArrayList<PPackageProd>();
if(StringHelper.isNotEmpty(pkgTariffId)){ //修改资费
List<PPackageProd> list = pPackageProdDao.getPackProdById(pkgId,pkgTariffId);
Map<String, List<PPackageProd>> map = CollectionHelper.converToMap(
list, new String[] { "prod_id", "package_tariff_id"});
for(String key : map.keySet()){
List<PPackageProd> ppList = map.get(key);
//默认为市场分成子产品,新增 财务分成子产品
if(ppList.size() == 1){
PPackageProd pp = ppList.get(0);
PPackageProd pkgProd = new PPackageProd();
pkgProd.setPackage_id(pp.getPackage_id());
// pkgProd.setProd_id(pp.getProd_id());
// pkgProd.setPackage_tariff_id(pp.getPackage_tariff_id());
// pkgProd.setType(SystemConstants.PACKAGE_FINANCE_TYPE);
pkgProdList.add(pkgProd);
}
pkgProdList.addAll(ppList);
}
} else { //新建资费
List<PPackageProd> pList = pPackageProdDao.queryPkgProdById(pkgId);
for(PPackageProd pkg : pList){
pkg.setPackage_id(pkgId);
// pkg.setType(SystemConstants.PACKAGE_MARKET_TYPE);
pkgProdList.add(pkg);
PPackageProd pp = new PPackageProd();
pp.setPackage_id(pkgId);
// pp.setProd_id(pkg.getProd_id());
// pp.setType(SystemConstants.PACKAGE_FINANCE_TYPE);
pkgProdList.add(pp);
}
}
return changeProd(pkgProdList);
}
public List<PPackageProd> changeProd(List<PPackageProd> list) throws Exception {
for (PPackageProd pkg : list) {
if(StringHelper.isNotEmpty(pkg.getProd_list())){
List<PProd> pList = pProdDao.findByProdIds(pkg.getProd_list().split(","));
String[] prodName = CollectionHelper.converValueToArray(pList, "prod_name");
pkg.setProd_list_text(StringHelper.join(prodName, ","));
}
}
return list;
}
/**
* 查询套餐分成值操作记录
* @param packageId
* @return
* @throws JDBCException
*/
public List<PPackageProdHis> queryByPackId(String packageId) throws JDBCException{
return pPackageProdHisDao.queryByPackId(packageId);
}
/**
* 根据资费id获取产品对应的有效的折扣
*
* @param prodId
* @return
* @throws Exception
*/
public List<PProdTariffDisct> queryDisct(String tariffId, SOptr optr) throws Exception {
if (StringHelper.isNotEmpty(tariffId)) {
List<PProdTariffDisct> dto = pProdTariffDisctDao.queryDisctByTariffId(tariffId, optr.getCounty_id());
Map<String, VewRuleDto> rulemap = CollectionHelper.converToMapSingle(
tRuleDefineDao.findRuleALL(), "rule_id");
for (PProdTariffDisct pt : dto) {
if(StringHelper.isNotEmpty(pt.getRule_id())){
VewRuleDto rule = rulemap.get(pt.getRule_id());
if( rule!= null ){
pt.setRule_name(rule.getRule_name());
}
}
}
return dto;
}
return null;
}
/**
* 根据服务类型查询对应的资源,资源组,以及子产品
*/
public ProdResServIdDto queryResByServId(String ServId, String prodId,String query) throws Exception {
String countyId = WebOptr.getOptr().getCounty_id();
String areaId = WebOptr.getOptr().getArea_id();
if (StringHelper.isNotEmpty(ServId)) {
ProdResServIdDto dto = new ProdResServIdDto();
if(query.equals(SystemConstants.PROD_TYPE_BASE)){
dto.setDynamicResList(getGroupRes(ServId, prodId,countyId));
dto.setStaticResList(getStaticByServId(ServId,countyId));
}else{
String dataRight = this.queryDataRightCon(WebOptr.getOptr(), DataRight.CHANGE_COUNTY.toString());
List<ProdDto> prodList = pProdDao.queryProdByServIdArea(ServId, dataRight,query);
List<PProdCounty> prodCountyList =pProdDao.queryProdCountyByServIdArea(ServId, dataRight,query);
for(ProdDto prodDto : prodList){
List<String> countyList = new ArrayList<String>();
for(PProdCounty prodCounty : prodCountyList){
if(prodCounty.getProd_id().equals(prodDto.getProd_id())){
countyList.add(prodCounty.getCounty_id());
}
}
prodDto.setCountyList(countyList);
}
dto.setProdList(prodList);
}
return dto;
}
return null;
}
public List<ResDto> getStaticByServId(String ServId,String countyId) throws Exception{
List<TServerRes> ResList = tServerResDao.getServerRes(countyId);
Map<String, List<TServerRes>> serverResmap = CollectionHelper.converToMap(ResList, "boss_res_id");
List<ResDto> bossResList = pResDao.queryStaticByServId(ServId,countyId);
for(ResDto dto:bossResList){
List<TServerRes> serverList = serverResmap.get(dto.getRes_id());
String str ="[";
for(TServerRes serRes: serverList){
str+=serRes.getExternal_res_id()+",";
}
str = StringHelper.delEndChar(str,1);
str +="]";
dto.setServerIds(str);
}
return bossResList;
}
/**
* @Description:查询资源组,产品编号不为空的时候对应的资源数,为空的时候资源数为0
* @param prodId
* @return
* @throws Exception
* @return List<ResGroupDto>
*/
public List<ResGroupDto> getGroupRes(String ServId, String prodId,String countyId)
throws Exception {
List<ResGroupDto> dto = pResgroupDao.queryGroupResByServId(ServId,countyId);
if (StringHelper.isNotEmpty(prodId)) {
List<ResGroupDto> dyndto = pProdDynResDao.queryDynByProdId(prodId);
if (dyndto.size() > 0) {
for (int i = 0; i < dto.size(); i++) {
for (int k = 0; k < dyndto.size(); k++) {
if (dto.get(i).getGroup_id().equals(dyndto.get(k).getGroup_id())) {
dto.get(i).setRes_number(dyndto.get(k).getRes_number());
}
}
}
}
}
return dto;
}
/**
* 修改产品
* @param prodCountyIds
*
* @param resource
*/
public PProd updateProd(ProdDto prodDto, String[] dictProdIds,
String dynList, String statList, String[] prodCountyIds) throws Exception {
if(validName(prodDto.getProd_name(),prodCountyIds,prodDto.getProd_id())){
throw new ComponentException("产品名称在该应用地区已经存在!");
};
List<SSysChange> changes = new ArrayList<SSysChange>();
Integer doneCode = getDoneCOde();
Date createTime = new Date();
PProd prod = new PProd();
BeanUtils.copyProperties(prodDto, prod);
PProd theOldProd = pProdDao.findByKey(prodDto.getProd_id());
pProdDao.update(prod);
prod = pProdDao.findByKey(prodDto.getProd_id());
String content = BeanHelper.beanchange(theOldProd, prod);
if(StringHelper.isNotEmpty(content)){
SSysChange prodChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prod.getProd_id(), prod.getProd_name(), "产品定义修改", content, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(prodChange);
}
List<TreeDto> oldProdCountList = pProdCountyDao.getProdCountyById(prod.getProd_id());
if (!"null".equals(dictProdIds) && dictProdIds != null) {
pDictProdDao.deleteDictProd(prodDto.getProd_id());
pDictProdDao.addDictProd(dictProdIds, prodDto.getProd_id());
}
//保存产品适用地区
saveProdCountyId(prod.getProd_id(), prodCountyIds);
List<TreeDto> newProdCountList = pProdCountyDao.getProdCountyById(prod.getProd_id());
String countyChangeInfo = BeanHelper.listchange(oldProdCountList, newProdCountList, "id", null);
if(StringHelper.isNotEmpty(countyChangeInfo)){
SSysChange countyChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prod.getProd_id(), prod.getProd_name(), "产品适用地区", countyChangeInfo.replace("id", "county_id"), WebOptr.getOptr().getOptr_id(), createTime);
changes.add(countyChange);
}
List<ResGroupDto> dynResList = new ArrayList<ResGroupDto>();
List<ProdCountyResDto> prodCountyResDtoList = new ArrayList<ProdCountyResDto>();
List<String> aList = new ArrayList<String>();
if (StringHelper.isNotEmpty(dynList)) {
Type type = new TypeToken<List<ResGroupDto>>() {}.getType();
List<ResGroupDto> group = JsonHelper.gson.fromJson(dynList, type);
for (ResGroupDto dto : group) {
ResGroupDto groupdto = new ResGroupDto();
groupdto.setGroup_id(dto.getGroup_id());
groupdto.setRes_number(dto.getRes_number());
dynResList.add(groupdto);
}
}
if (StringHelper.isNotEmpty(statList)) {
Type type = new TypeToken<List<ProdCountyResDto>>() {}.getType();
List<ProdCountyResDto> res = JsonHelper.gson.fromJson(statList,type);
prodCountyResDtoList = res;
// 静态资源,原先存在的,修改后取消,进行删除操作,,原先不存在的进行保存
if (prodCountyResDtoList.size() > 0) {
if(SystemConstants.USER_TYPE_OTT_MOBILE.equals(theOldProd.getServ_id())){
Map<String, List<ProdCountyResDto>> map = CollectionHelper.converToMap(prodCountyResDtoList, "county_id");
Iterator it = map.keySet().iterator();
while(it.hasNext()){
String key = (String) it.next();
List<ProdCountyResDto> value = map.get(key);
if(value.size()>1){
throw new ComponentException(ErrorCode.OttMobileNotHaveMoreRes);
}
}
}
PProdResChange change = new PProdResChange();
PProdStaticRes sRes = null;
PProdCountyRes cRes = null;
List<PProdStaticRes> sResList = new ArrayList<PProdStaticRes>();
List<PProdCountyRes> cResList = new ArrayList<PProdCountyRes>();
List<PProdResChange> changeList = new ArrayList<PProdResChange>();
List<Object[]> countyList = new ArrayList<Object[]>();
List<String> staticList = new ArrayList<String>();
List<ProdCountyResDto> oldCountyResList = pProdCountyResDao.getProdCountyResByProdId(prodDto.getProd_id());
//移出传入与原来相同的资源
for (int i = prodCountyResDtoList.size() - 1; i >= 0; i--) {
if (!"null".equals(oldCountyResList)&& oldCountyResList != null) {
boolean ck = false;
for (int k = oldCountyResList.size() - 1; k >= 0; k--) {
if (prodCountyResDtoList.get(i).getRes_id().equals(oldCountyResList.get(k).getRes_id())
&& prodCountyResDtoList.get(i).getCounty_id().equals(oldCountyResList.get(k).getCounty_id())) {
oldCountyResList.remove(k);
ck = true;
}
}
if (ck) {
prodCountyResDtoList.remove(i);
}
}
}
//删除不需要的老资源,并记录
for (int j = 0; j < oldCountyResList.size(); j++) {
if (oldCountyResList.get(j).getCounty_id().equals(SystemConstants.COUNTY_ALL)) {
staticList.add(oldCountyResList.get(j).getRes_id());
} else {
aList.add(oldCountyResList.get(j).getProd_id());
aList.add(oldCountyResList.get(j).getCounty_id());
aList.add(oldCountyResList.get(j).getRes_id());
countyList.add(aList.toArray(new String[aList.size()]));
aList.clear();
}
change = new PProdResChange(prod.getProd_id(),oldCountyResList.get(j).getCounty_id(),oldCountyResList.get(j).getRes_id(), WebOptr.getOptr().getOptr_id(),SystemConstants.RECORD_CHAGNE_TYPE_DELETE);
changeList.add(change);
}
//添加新资源配置,并记录
for (int k = 0; k < prodCountyResDtoList.size(); k++) {
if (StringHelper.isNotEmpty(prodCountyResDtoList.get(k).getRes_id())) {
if (prodCountyResDtoList.get(k).getCounty_id().equals(SystemConstants.COUNTY_ALL)) {
sRes = new PProdStaticRes(prodDto.getProd_id(),prodCountyResDtoList.get(k).getRes_id());
sResList.add(sRes);
} else {
cRes = new PProdCountyRes(prodDto.getProd_id(),prodCountyResDtoList.get(k).getCounty_id(),prodCountyResDtoList.get(k).getRes_id());
cResList.add(cRes);
}
change = new PProdResChange(prod.getProd_id(),prodCountyResDtoList.get(k).getCounty_id(),prodCountyResDtoList.get(k).getRes_id(), WebOptr.getOptr().getOptr_id(),SystemConstants.RECORD_CHAGNE_TYPE_ADD);
changeList.add(change);
}
}
//删除地市资源
if (countyList.size() > 0) {
pProdCountyResDao.deleteByAll(countyList);
}
// 删除通用资源
if (!"null".equals(staticList) && staticList != null) {
pProdStaticResDao.deleteStatic(prodDto.getProd_id(),staticList);
}
// 保存县市资源
pProdCountyResDao.save(cResList.toArray(new PProdCountyRes[cResList.size()]));
// 保存通用资源
pProdStaticResDao.save(sResList.toArray(new PProdStaticRes[sResList.size()]));
// 异动
pProdResChangeDao.save(changeList.toArray(new PProdResChange[changeList.size()]));
}
}
List<Object[]> resDynList = new ArrayList<Object[]>();
PProdDynRes dynRes = null;
List<PProdDynRes> prodDynList = new ArrayList<PProdDynRes>();
if (dynResList.size() > 0) {
List<ResGroupDto> oldDynResList = pProdDynResDao.queryDynByProdId(prodDto.getProd_id());
// 动态资源已经存在,更新新数据
for (int i = dynResList.size() - 1; i >= 0; i--) {
boolean ck = false;
for (int k = oldDynResList.size() - 1; k >= 0; k--) {
if (dynResList.get(i).getGroup_id().equals(oldDynResList.get(k).getGroup_id())&& dynResList.get(i).getRes_number() == oldDynResList.get(k).getRes_number()) {
oldDynResList.remove(k);
ck = true;
}
}
if (ck) {
dynResList.remove(i);
}
}
// 动态资源原先未存在,新增新数据
for (int i = 0; i < dynResList.size(); i++) {
if (dynResList.get(i).getRes_number() != 0) {
dynRes = new PProdDynRes(prodDto.getProd_id(),dynResList.get(i).getGroup_id(),dynResList.get(i).getRes_number());
prodDynList.add(dynRes);
}
}
for (int i = 0; i < oldDynResList.size(); i++) {
aList.add(oldDynResList.get(i).getGroup_id());
aList.add(prodDto.getProd_id());
aList.add(String.valueOf(oldDynResList.get(i).getRes_number()));
resDynList.add(aList.toArray(new String[aList.size()]));
aList.clear();
}
pProdDynResDao.save(prodDynList.toArray(new PProdDynRes[prodDynList.size()]));
pProdDynResDao.deleteByAll(resDynList);
}
saveDataSyncJob(BusiCmdConstants.CHANGE_PROD, prod.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.MODIFY_PROD.toString(), prod.getProd_id(),prod.getProd_name() ,WebOptr.getOptr());
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
return prod;
}
/**
* 保存帐目和产品
*/
public void saveAcctitemByProdId(String prodId) throws Exception{
String[] acctIds = {prodId,SystemConstants.ACCTITEM_PUBLIC_ID};
TAcctitemToProd acctitem = null;
List<TAcctitemToProd> acctitemList = new ArrayList<TAcctitemToProd>();
for(String acctId:acctIds){
acctitem = new TAcctitemToProd();
acctitem.setAcctitem_id(acctId);
acctitem.setProd_id(prodId);
acctitemList.add(acctitem);
}
tAcctitemToProdDao.save(acctitemList.toArray(new TAcctitemToProd[acctitemList.size()]));
}
/**
* @Description: 保存产品
* @param prodDto
* @param prodCountyIds
* @return
* @throws Exception
* @return boolean
*/
public PProd saveProd(ProdDto prodDto, String[] dictProdIds,
String dynList, String statList, String[] prodCountyIds) throws Exception {
if(validName(prodDto.getProd_name(),prodCountyIds,prodDto.getProd_id())){
throw new ComponentException("产品名称在该应用地区已经存在!");
};
List<SSysChange> changes = new ArrayList<SSysChange>();
Integer doneCode = getDoneCOde();
String changeType = SysChangeType.PROD.toString();
Date createTime = new Date();
PProd prod = new PProd();
String prodId = pProdDao.findSequence().toString();
prodDto.setProd_id(prodId);
BeanUtils.copyProperties(prodDto, prod);
prod.setFor_area_id(prod.getArea_id());
// prod.setRefund(SystemConstants.BOOLEAN_TRUE);
// prod.setTrans(SystemConstants.BOOLEAN_TRUE);
pProdDao.save(prod);
prod = pProdDao.findByKey(prodId);
String content = BeanHelper.beanchange(null, prod);
SSysChange prodChange = new SSysChange(changeType, doneCode,
prodId, prod.getProd_name(), "产品定义", content, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(prodChange);
// 属于哪个产品目录
if (!"null".equals(dictProdIds) && dictProdIds != null) {
pDictProdDao.addDictProd(dictProdIds, prodDto.getProd_id());
}
saveAcctitemByProdId(prodDto.getProd_id());
//保存产品适用地区
saveProdCountyId(prod.getProd_id(), prodCountyIds);
if(prodCountyIds !=null && prodCountyIds.length>0){//记录适用地区变更的异动
List<String> cname = new ArrayList<String>();
for(String cid:prodCountyIds){
cname.add(MemoryDict.getDictName(DictKey.COUNTY, cid));
}
SSysChange prodCountyChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prodId, prod.getProd_name(), "适用地区变更", "county_id"+ BeanHelper.listchange(null, cname, null, null), WebOptr.getOptr().getOptr_id(), createTime);
changes.add(prodCountyChange);
}
List<PProdStaticRes> statResList = new ArrayList<PProdStaticRes>();
List<PProdCountyRes> prodCountyResList = new ArrayList<PProdCountyRes>();
PProdDynRes dynRes = null;
List<PProdDynRes> prodDynList = new ArrayList<PProdDynRes>();
if (StringHelper.isNotEmpty(dynList)) {
Type type = new TypeToken<List<PProdDynRes>>() {}.getType();
List<PProdDynRes> group = JsonHelper.gson.fromJson(dynList, type);
for (PProdDynRes dto : group) {
if (dto.getRes_number()!= 0) {
dynRes = new PProdDynRes(prodDto.getProd_id(),dto.getGroup_id(),dto.getRes_number());
prodDynList.add(dynRes);
}
}
}
if (StringHelper.isNotEmpty(statList)) {
Type type = new TypeToken<List<PProdCountyRes>>() {
}.getType();
List<PProdCountyRes> res = JsonHelper.gson.fromJson(statList, type);
if(res.size()>0){
if(SystemConstants.USER_TYPE_OTT_MOBILE.equals(prod.getServ_id())){
Map<String, List<PProdCountyRes>> map = CollectionHelper.converToMap(res, "county_id");
Iterator it = map.keySet().iterator();
while(it.hasNext()){
String key = (String) it.next();
List<PProdCountyRes> value = map.get(key);
if(value.size()>1){
throw new ComponentException(ErrorCode.OttMobileNotHaveMoreRes);
}
}
}
}
for (PProdCountyRes dto : res) {
PProdCountyRes resdto = new PProdCountyRes();
PProdStaticRes staticres = new PProdStaticRes();
if (dto.getCounty_id().equals(SystemConstants.COUNTY_ALL)) {
staticres = new PProdStaticRes(prodDto.getProd_id(),dto.getRes_id());
statResList.add(staticres);
} else {
resdto = new PProdCountyRes(prodDto.getProd_id(),dto.getCounty_id(),dto.getRes_id());
prodCountyResList.add(resdto);
}
}
}
if(prodDynList.size()>0){
pProdDynResDao.save(prodDynList.toArray(new PProdDynRes[prodDynList.size()]));
}
// 保存通用资源
pProdStaticResDao.save(statResList.toArray(new PProdStaticRes[statResList.size()]));
// 保存县市资源
pProdCountyResDao.save(prodCountyResList.toArray(new PProdCountyRes[prodCountyResList.size()]));
saveDataSyncJob(BusiCmdConstants.CREAT_PROD, prod.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.CREATE_PROD.toString(), prod.getProd_id(),prod.getProd_name(), WebOptr.getOptr());
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
return prod;
}
private void saveProdCountyId(String prodId, String[] prodCountyIds) throws Exception {
pProdCountyDao.deletebyProdId(prodId);
if(null !=prodCountyIds && prodCountyIds.length > 0){
pProdCountyDao.saveProdCountyId(prodId,prodCountyIds);
}
}
/**
* @Description: 保存套餐产品
* @param prodDto
* @param prodCountyIds
* @return
* @throws Exception
* @return boolean
*/
public PProd saveProdPack(ProdDto prodDto, String[] dictProdIds, String[] prodCountyIds) throws Exception {
if(validName(prodDto.getProd_name(),prodCountyIds,prodDto.getProd_id())){
throw new ComponentException("产品名称在该应用地区已经存在!");
};
PProd prod = new PProd();
String key = pProdDao.findSequence().toString();
Date createTime = new Date();
String changeType= SysChangeType.PROD.toString();
List<SSysChange> changes = new ArrayList<SSysChange>();
String optrId = WebOptr.getOptr().getOptr_id();
Integer doneCode = getDoneCOde();
prodDto.setProd_id(key);
BeanUtils.copyProperties(prodDto, prod);
prod.setFor_area_id(prod.getArea_id());
// prod.setRefund(SystemConstants.BOOLEAN_TRUE);
// prod.setTrans(SystemConstants.BOOLEAN_TRUE);
pProdDao.save(prod);
PProd newProd = pProdDao.findByKey(key);
SSysChange prodChange = new SSysChange(changeType, doneCode, key, newProd.getProd_name(),
"产品定义", BeanHelper.beanchange(null, newProd), optrId, createTime);
changes.add(prodChange);
saveAcctitemByProdId(prodDto.getProd_id());
// 属于哪个产品目录
if (!"null".equals(dictProdIds) && dictProdIds != null) {
pDictProdDao.addDictProd(dictProdIds, prodDto.getProd_id());
}
//保存产品适用地区
saveProdCountyId(prod.getProd_id(), prodCountyIds);
List<String> newProdCounty = pProdCountyDao.queryByProdId(key);
if(newProdCounty!=null && newProdCounty.size()>0){
SSysChange countyChange = new SSysChange(changeType, doneCode, key, newProd.getProd_name(),
"产品使用地区变更", "county_id:"+BeanHelper.listchange(null, newProdCounty, null, null), optrId, createTime);
changes.add(countyChange);
}
if (prodDto.getPackList().size() > 0) {
List<PPackageProd> pkList = new ArrayList<PPackageProd>();
for(PPackageProd pk :prodDto.getPackList()){
checkProd(pk);
pk.setPackage_id(prodDto.getProd_id());
pk.setPackage_group_id(pPackageProdDao.findSequence().toString());
pkList.add(pk);
}
pPackageProdDao.save(pkList.toArray(new PPackageProd[pkList.size()]));
String[] displayFields = new String[] {"package_group_name","user_type","prod_list","terminal_type","max_user_cnt","precent"};
String packChangeInfo = BeanHelper.listchange(null, pkList,displayFields );
if(StringHelper.isNotEmpty(packChangeInfo)){
String preAppend = "套餐内容组名称_用户类型_产品内容组_终端类型_用户数_权重";
packChangeInfo = preAppend + ":\n" + packChangeInfo;
SSysChange countyChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prod.getProd_id(), prod.getProd_name(), "套餐内容组", packChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(countyChange);
}
}
//保存操作记录
saveOperateLog(FuncCode.CREATE_PROD.toString(), prod.getProd_id(),prod.getProd_name(), WebOptr.getOptr());
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
return prod;
}
private void checkProd(PPackageProd pk) throws Exception{
if(pk.getMax_user_cnt()<1){
throw new ComponentException(ErrorCode.ProdPackMaxUserCntIsError);
}else if(StringHelper.isEmpty(pk.getPackage_group_name())){
throw new ComponentException(ErrorCode.ProdPackGroupNameIsError);
}else if(StringHelper.isEmpty(pk.getProd_list())){
throw new ComponentException(ErrorCode.ProdPackProdListIsError);
}
//产品组需要按prodid 顺序排列
String[] prodIds = pk.getProd_list().split(",");
List<PProd> list = pProdDao.queryPackProdList(prodIds);
if(prodIds.length != list.size()){
throw new ComponentException(ErrorCode.ProdNotExists);
}
String[] prodIdList = CollectionHelper.converValueToArray(list, "prod_id");
if(prodIdList.length>0){
String prodList = StringHelper.join(prodIdList, ",");
pk.setProd_list(prodList);
}
}
/**
* 修改产品
* @param prodDto
* @param dictProdIds
* @param prodCountyIds
* @return
* @throws Exception
* @return boolean
*/
public PProd updateProdPack(ProdDto prodDto, String[] dictProdIds, String[] prodCountyIds) throws Exception {
if(validName(prodDto.getProd_name(),prodCountyIds,prodDto.getProd_id())){
throw new ComponentException("产品名称在该应用地区已经存在!");
};
PProd oldProd = pProdDao.findByKey(prodDto.getProd_id());
PProd prod = new PProd();
BeanUtils.copyProperties(prodDto, prod);
pProdDao.update(prod);
PProd newProd = pProdDao.findByKey(prodDto.getProd_id());
String prodChangeInfo = BeanHelper.beanchange(oldProd, newProd);
String changeType = SysChangeType.PROD.toString();
Date createTime = new Date();
int doneCode = getDoneCOde();
List<SSysChange> changes = new ArrayList<SSysChange>();
if(StringHelper.isNotEmpty(prodChangeInfo)){
SSysChange prodChange = new SSysChange(changeType, doneCode, prod.getProd_id(),
prod.getProd_name(), "产品定义修改", prodChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(prodChange);
}
List<TreeDto> oldProdCountList = pProdCountyDao.getProdCountyById(prod.getProd_id());
if (!"null".equals(dictProdIds) && dictProdIds != null) {
pDictProdDao.deleteDictProd(prodDto.getProd_id());
pDictProdDao.addDictProd(dictProdIds, prodDto.getProd_id());
}
//保存产品适用地区
saveProdCountyId(prod.getProd_id(), prodCountyIds);
List<TreeDto> newProdCountList = pProdCountyDao.getProdCountyById(prod.getProd_id());
String countyChangeInfo = BeanHelper.listchange(oldProdCountList, newProdCountList, "id", null);
if(StringHelper.isNotEmpty(countyChangeInfo)){
SSysChange countyChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prod.getProd_id(), prod.getProd_name(), "产品适用地区", countyChangeInfo.replace("id", "county_id"), WebOptr.getOptr().getOptr_id(), createTime);
changes.add(countyChange);
}
List<PPackageProd> pkList = new ArrayList<PPackageProd>();
if (prodDto.getPackList().size() > 0) {
List<PPackageProd> oldPackList = pPackageProdDao.queryPackProdByProdId(prod.getProd_id());
for(PPackageProd pk :prodDto.getPackList()){
checkProd(pk);
pk.setPackage_id(prodDto.getProd_id());
if(StringHelper.isEmpty(pk.getPackage_group_id())){
pk.setPackage_group_id(pPackageProdDao.findSequence().toString());
}
pkList.add(pk);
}
pPackageProdDao.deletePackById(prod.getProd_id());
// 保存新传入的数据
pPackageProdDao.save(pkList.toArray(new PPackageProd[pkList.size()]));
String[] displayFields = new String[] {"package_group_name","user_type","prod_list","terminal_type","max_user_cnt","precent"};
String packChangeInfo = BeanHelper.listchange(oldPackList, pkList,displayFields );
if(StringHelper.isNotEmpty(packChangeInfo)){
String preAppend = "套餐内容组名称_用户类型_产品内容组_终端类型_用户数_权重";
packChangeInfo = preAppend + ":\n" + packChangeInfo;
SSysChange packChange = new SSysChange(SysChangeType.PROD.toString(), doneCode,
prod.getProd_id(), prod.getProd_name(), "套餐内容组", packChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(packChange);
}
}
// if(pkList.size()>0){
// List<ProdTariffDto> tarifflist = pProdTariffDao.queryTariffByProd(prod.getProd_id());
// for (ProdTariffDto dto : tarifflist) {
// deleteTariffById(dto.getTariff_id());
// }
// }
//保存操作记录
saveOperateLog(FuncCode.MODIFY_PROD.toString(), prod.getProd_id(), prod.getProd_name(), WebOptr.getOptr());
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
return prod;
}
/**
* 修改已生效的产品
* @param prodDto
* @param prodCountyIds
* @return
* @throws Exception
*/
public PProd editProd(ProdDto prodDto,String[] dictProdIds, String[] prodCountyIds) throws Exception{
if(validName(prodDto.getProd_name(),prodCountyIds,prodDto.getProd_id())){
throw new ComponentException("产品名称在该应用地区已经存在!");
};
PProd prod = new PProd();
PProd oldProd = pProdDao.findByKey(prodDto.getProd_id());
BeanUtils.copyProperties(prodDto, prod);
pProdDao.update(prod);
PProd newProd = pProdDao.findByKey(prodDto.getProd_id());
Date createTime = new Date();
String prodChangeInfo = BeanHelper.beanchange(oldProd, newProd);
String changeType = SysChangeType.PROD.toString();
int doneCode = getDoneCOde();
List<SSysChange> changes = new ArrayList<SSysChange>();
if(StringHelper.isNotEmpty(prodChangeInfo)){
SSysChange prodChange = new SSysChange(changeType, doneCode, prod.getProd_id(),
prod.getProd_name(), "产品定义修改", prodChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(prodChange);
}
// 属于哪个产品目录
if (!"null".equals(dictProdIds) && dictProdIds != null) {
pDictProdDao.deleteDictProd(prodDto.getProd_id());
pDictProdDao.addDictProd(dictProdIds, prodDto.getProd_id());
}
List<String> oldProdCounty = pProdCountyDao.queryByProdId(prod.getProd_id());
List<String> oldCountyName = new ArrayList<String>();
for(String id:oldProdCounty){
oldCountyName.add(MemoryDict.getDictName(DictKey.COUNTY, id));
}
List<String> newCountyName = new ArrayList<String>();
//保存产品适用地区
saveProdCountyId(prod.getProd_id(), prodCountyIds);
List<String> newProdCounty = pProdCountyDao.queryByProdId(prod.getProd_id());
for(String id:newProdCounty){
newCountyName.add(MemoryDict.getDictName(DictKey.COUNTY, id));
}
String countyChangeInfo = BeanHelper.listchange(oldCountyName, newCountyName, null, null);
if(StringHelper.isNotEmpty(countyChangeInfo)){
SSysChange countyChange = new SSysChange(changeType, doneCode, prod.getProd_id(),
prod.getProd_name(), "产品适用地区变更","county_id:"+countyChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(countyChange);
}
saveDataSyncJob(BusiCmdConstants.CHANGE_PROD, prod.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.MODIFY_PROD.toString(), prod.getProd_id(),prod.getProd_name(), WebOptr.getOptr());
if(changes.size()>0){
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
}
return prod;
}
/**
* @Description: 保存资费
* @param tariffdto
* @param optr
* @return
* @throws Exception
* @return boolean
*/
public void saveTariff(ProdTariffDto tariff,String packsList,String[] tariffCountyIds ,SOptr optr)
throws Exception {
Integer doneCode = getDoneCOde();
Date createTime = new Date();
List<SSysChange> changes = new ArrayList<SSysChange>();
PProdTariff oldTariff = null;
List<TreeDto> oldTariffCountyBytariffId = pProdTariffCountyDao.getTariffCountyBytariffId(tariff.getTariff_id());
PProd prod = pProdDao.findByKey(tariff.getProd_id());
if(prod.getProd_type().equals(SystemConstants.PROD_TYPE_SPKG) && StringHelper.isNotEmpty(tariff.getSpkg_sn())){
if(pSpkgDao.querySpkgBySn(tariff.getSpkg_sn()) == null){
throw new ComponentException("该协议用户配置数据不存在");
}
}else{
tariff.setSpkg_sn("");
}
// checkPrice(tariff,prod.getProd_type(),tariffCountyIds,optr);
if (StringHelper.isNotEmpty(tariff.getTariff_id())) {
oldTariff = pProdTariffDao.findByKey(tariff.getTariff_id());
pProdTariffDao.update(tariff);
if (!"null".equals(tariffCountyIds) && tariffCountyIds != null) {
pProdTariffCountyDao.deleteTariffCounty(tariff.getTariff_id());
pProdTariffCountyDao.addTariffCounty(tariffCountyIds,tariff.getTariff_id());
}else{
pProdTariffCountyDao.deleteTariffCounty(tariff.getTariff_id());
}
//产品数据同步
saveDataSyncJob(BusiCmdConstants.CHANGE_PROD, tariff.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.MODIFY_TARIFF.toString(),tariff.getTariff_id(), tariff.getTariff_name(), WebOptr.getOptr());
} else {
tariff.setArea_id(WebOptr.getOptr().getArea_id());
tariff.setCounty_id(WebOptr.getOptr().getCounty_id());
tariff.setOptr_id(WebOptr.getOptr().getOptr_id());
tariff.setCreate_time(new Date());
tariff.setTariff_id(pProdTariffDao.findSequence().toString());
pProdTariffDao.save(tariff);
if (!"null".equals(tariffCountyIds) && tariffCountyIds != null) {
pProdTariffCountyDao.addTariffCounty(tariffCountyIds,tariff.getTariff_id());
}
//产品数据同步
if(isSuccess(BusiCmdConstants.CREAT_PROD, tariff.getProd_id(), "P_Prod")){
saveDataSyncJob(BusiCmdConstants.CHANGE_PROD, tariff.getProd_id(), "P_Prod");
}else{
saveDataSyncJob(BusiCmdConstants.CREAT_PROD, tariff.getProd_id(), "P_Prod");
}
//保存操作记录
saveOperateLog(FuncCode.CREATE_TARIFF.toString(),tariff.getTariff_id(), tariff.getTariff_name(), WebOptr.getOptr());
}
PProdTariff newTariff = pProdTariffDao.findByKey(tariff.getTariff_id());
//处理字段为英文的
String[] fields = new String[] { /*"tariff_id ", */"tariff_name",
"tariff_desc", "prod_id", "tariff_type_text", "billing_type_text",
"rent" ,"month_rent_cal_type_text", "day_rent_cal_type_text",
"use_fee_rule", "bill_rule", "status_text", "area_name", "county_name",
"optr_name", "create_time", "rule_id","rule_id_text", "tariff_type_text","eff_date","exp_date","service_channel"};
List<VewRuleDto> rules = tRuleDefineDao.findRuleViewDictByType("BUSI",WebOptr.getOptr().getCounty_id());
if(oldTariff !=null){
for(VewRuleDto rule:rules){
if(StringHelper.isNotEmpty(oldTariff.getRule_id())
&& oldTariff.getRule_id().equals(rule.getRule_id())){
oldTariff.setRule_id_text(rule.getRule_name());
}
}
}
if(newTariff !=null){
for(VewRuleDto rule:rules){
if(StringHelper.isNotEmpty(newTariff.getRule_id())
&& newTariff.getRule_id().equals(rule.getRule_id())){
newTariff.setRule_id_text(rule.getRule_name());
}
}
}
// MemoryDict.getDictName(DictKey.TARIFF_TYPE, oldTariff.getTariff_type());
String tariffChangeInfo = BeanHelper.beanchange(oldTariff, newTariff,fields);
if(StringHelper.isNotEmpty(tariffChangeInfo)){
SSysChange tariffChange = new SSysChange(SysChangeType.PROD.toString(), doneCode, prod.getProd_id(),
prod.getProd_name(), "产品资费定义:" + tariff.getTariff_name() + "(" + prod.getProd_name() +")", tariffChangeInfo, WebOptr.getOptr().getOptr_id(), createTime);
changes.add(tariffChange);
}
List<TreeDto> newTariffCountyBytariffId = pProdTariffCountyDao.getTariffCountyBytariffId(tariff.getTariff_id());
List<String> oldCountyList = new ArrayList<String>();
for(TreeDto tree:oldTariffCountyBytariffId){
oldCountyList.add(MemoryDict.getDictName(DictKey.COUNTY, tree.getId()));
}
List<String> newCountyList = new ArrayList<String>();
for(TreeDto tree:newTariffCountyBytariffId){
newCountyList.add(MemoryDict.getDictName(DictKey.COUNTY, tree.getId()));
}
String countyChangeInfo = BeanHelper.listchange(oldCountyList, newCountyList);
if(StringHelper.isNotEmpty(countyChangeInfo)){
SSysChange tariffChange = new SSysChange(SysChangeType.PROD.toString(), doneCode, prod.getProd_id(),
prod.getProd_name(), "产品资费定义:" + tariff.getTariff_name() + "(" + prod.getProd_name() +")适用地区变化", countyChangeInfo.replace("id", "county_id"), WebOptr.getOptr().getOptr_id(), createTime);
changes.add(tariffChange);
}
if (StringHelper.isNotEmpty(packsList)) {
List<PPackageProdHis> PacksList = new ArrayList<PPackageProdHis>();
Type type = new TypeToken<List<PPackageProd>>() {}.getType();
List<PPackageProd> pack = JsonHelper.gson.fromJson(packsList, type);
Map<String,List<PPackageProd>> map = CollectionHelper.converToMap(pack, "type");
Integer value = 0;
for(String t : map.keySet()){
List<PPackageProd> list = map.get(t);
for(int i=0,len=list.size();i<len;i++){
PPackageProd pp = list.get(i);
PPackageProdHis packdto = new PPackageProdHis();
packdto.setPackage_id(tariff.getProd_id());
// packdto.setProd_id(pp.getProd_id());
// packdto.setTariff_id(pp.getTariff_id());
// packdto.setMax_prod_count(pp.getMax_prod_count());
// packdto.setPercent_value(pp.getPercent_value());
// packdto.setPackage_tariff_id(tariff.getTariff_id());
// packdto.setType(pp.getType());
// if(i==list.size()-1){
// if(value > 0){
// packdto.setPercent(100-value);
// }else if(value == 0 && pp.getPercent_value() == 0){
// packdto.setPercent(0);
// }
// }else{
// packdto.setPercent(calculationPercent(pp.getPercent_value(), (float)(tariff.getRent())/100));
// value +=packdto.getPercent();
// }
//
// packdto.setOptr_id(WebOptr.getOptr().getOptr_id());
// PacksList.add(packdto);
}
value = 0;
}
// pPackageProdDao.deletePackById(tariff.getProd_id(),tariff.getTariff_id());
// pPackageProdDao.save(PacksList.toArray(new PPackageProd[PacksList.size()]));
// pPackageProdHisDao.save(PacksList.toArray(new PPackageProdHis[PacksList.size()]));
}
if(changes.size()>0){
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
}
}
public Integer calculationPercent(Float num1,Float num2 ) {
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后0位
numberFormat.setMaximumFractionDigits(0);
Integer result = Integer.parseInt(numberFormat.format((num1/num2)*100));
return result;
}
/**
* @Description: 保存折扣
* @param disctlist
* @param optr
* @return
* @throws Exception
* @return boolean
*/
public void saveDisct(PProdTariffDisct disct, String[] disctCountyIds, SOptr optr)
throws Exception {
Integer doneCode = getDoneCOde();
Date createTime = new Date();
PProdTariff tariff = pProdTariffDao.findByKey(disct.getTariff_id());
PProd prod = pProdDao.findByKey(tariff.getProd_id());
List<SSysChange> changes = new ArrayList<SSysChange>();
PProdTariffDisct oldDict = pProdTariffDisctDao.findByKey(disct.getDisct_id());
if (StringHelper.isNotEmpty(disct.getDisct_id())) {
pProdTariffDisctDao.update(disct);
// //产品数据同步
// saveDataSyncJob(BusiCmdConstants.CHANGE_PROD, disct.getDisct_id(), "p_prod_tariff_disct");
//保存操作记录
saveOperateLog(FuncCode.MODIFY_DISCT.toString(),disct.getDisct_id(), disct.getDisct_name(), optr);
} else {
disct.setArea_id(optr.getArea_id());
disct.setCounty_id(optr.getCounty_id());
disct.setOptr_id(optr.getOptr_id());
disct.setCreate_time(new Date());
disct.setDisct_id(pProdTariffDisctDao.findSequence().toString());
pProdTariffDisctDao.save(disct);
// //产品数据同步
// saveDataSyncJob(BusiCmdConstants.CREAT_PROD, tariff.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.CREATE_DISCT.toString(),disct.getDisct_id(), disct.getDisct_name(), optr);
}
PProdTariffDisct newDict = pProdTariffDisctDao.findByKey(disct.getDisct_id());
String disctChangeInfo = BeanHelper.beanchange(oldDict, newDict);
if(StringHelper.isNotEmpty(disctChangeInfo)){
SSysChange disctChange = new SSysChange(SysChangeType.PROD.toString(),
doneCode, prod.getProd_id(), prod.getProd_name(),
"资费_"+tariff.getTariff_name()+ "(" + prod.getProd_name() + "):折扣_" + newDict.getDisct_name() + "(" + newDict.getDisct_id()+")",
disctChangeInfo, optr.getOptr_id(), createTime);
changes.add(disctChange);
}
List<TreeDto> oldList = pProdTariffDisctCountyDao.getTariffDisctCountyByDisctId(disct.getDisct_id());
pProdTariffDisctCountyDao.deleteDisctCounty(disct.getDisct_id());
pProdTariffDisctCountyDao.addDisctCounty(disctCountyIds, disct.getDisct_id());
List<TreeDto> newList = pProdTariffDisctCountyDao.getTariffDisctCountyByDisctId(disct.getDisct_id());
List<SCounty> oldCounty = new ArrayList<SCounty>();
for(TreeDto tree:oldList){
SCounty county = new SCounty();
county.setCounty_id(tree.getId());
county.setCounty_name(MemoryDict.getDictName(DictKey.COUNTY, tree.getId()));
oldCounty.add(county);
}
List<SCounty> newCounty = new ArrayList<SCounty>();
for(TreeDto tree:newList){
SCounty county = new SCounty();
county.setCounty_id(tree.getId());
county.setCounty_name(MemoryDict.getDictName(DictKey.COUNTY, tree.getId()));
newCounty.add(county);
}
String countyChangeInfo = BeanHelper.listchange(oldCounty, newCounty, "county_name", null);
if(StringHelper.isNotEmpty(countyChangeInfo)){
countyChangeInfo = countyChangeInfo.replace("county_name", "分公司");
if(StringHelper.isNotEmpty(countyChangeInfo)){
SSysChange countyChange = new SSysChange(SysChangeType.PROD.toString(), doneCode, prod.getProd_id(), prod.getProd_name(),
"资费_"+tariff.getTariff_name() + "(" + prod.getProd_name() +"):折扣_" + disct.getDisct_name() + "(" + disct.getDisct_id() +")" + "适用地区变更",
countyChangeInfo, optr.getOptr_id(), createTime);
changes.add(countyChange);
}
}
if(changes.size()>0){
sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()]));
}
}
/**
* @Description: 删除折扣
* @param disctId
* @return
* @throws Exception
* @return boolean
*/
public boolean deleteDisct(String disctId ) throws Exception {
if (StringHelper.isNotEmpty(disctId)) {
PProdTariffDisct disct = pProdTariffDisctDao.findByKey(disctId);
pProdTariffDisctDao.deleteDisctByDisctId(disctId);
//保存操作记录
saveOperateLog(FuncCode.DELETE_DISCT.toString(),disct.getDisct_id(), disct.getDisct_name(), WebOptr.getOptr());
return true;
}
return false;
}
/**
* @Description: 删除资费
* @param tariffId
* @param optr
* @return
* @throws Exception
* @return boolean
*/
public boolean deleteTariff(String tariffId ) throws Exception {
if (StringHelper.isNotEmpty(tariffId)) {
// pProdTariffCountyDao.deleteTariffCounty(tariffId);
PProdTariff oldTariff = pProdTariffDao.findByKey(tariffId);
PProd prod = pProdDao.findByKey(oldTariff.getProd_id());
deleteTariffById(tariffId);
//产品数据同步
PProdTariff tariff = pProdTariffDao.findByKey(tariffId);
saveDataSyncJob(BusiCmdConstants.DELETE_PROD, tariff.getProd_id(), "P_Prod");
//保存操作记录
saveOperateLog(FuncCode.DELETE_TARIFF.toString(),tariff.getTariff_id(), tariff.getTariff_name(), WebOptr.getOptr());
SSysChange tariffChange = new SSysChange(SysChangeType.PROD.toString(),getDoneCOde(), prod.getProd_id(),
prod.getProd_name(), "产品资费删除:" + tariff.getTariff_name() + "(" + prod.getProd_name() +")",
BeanHelper.beanchange(oldTariff, tariff), WebOptr.getOptr().getOptr_id(), new Date());
sSysChangeDao.save(tariffChange);
return true;
}
return false;
}
/**
* @Description: 删除产品
* @param prodId
* @return
* @throws Exception
* @return boolean
*/
public ProdDto deletePord(String prodId) throws Exception {
List<PPackageProd> pkgProdList = queryPackById(prodId);
if (pkgProdList.size() > 0) {
ProdDto prod = pProdDao.queryProdById(pkgProdList.get(0).getPackage_id());
return prod;
} else {
deletePordById(prodId);
return null;
}
}
public List<PPackageProd> queryPackById(String pkgId) throws Exception {
List<PPackageProd> pkgProdList = pPackageProdDao.queryPkgById(pkgId);
return changeProd(pkgProdList);
}
/**
* 验证所选的资源和地市是否可用
* @param resArray
* @param countyId
* @return
* @throws Exception
*/
public ResDto validRes(String resArray,String countyId) throws Exception{
String[] resList = resArray.split(",");
ResDto dto = new ResDto();
if (!"null".equals(resArray) && resArray != null) {
String src ="";
String resName = "";
Map<String, ResDto> resmap = CollectionHelper.converToMapSingle(
pResDao.getServerRes(), "res_id");
for(String d:resList){
ResDto res = resmap.get(d);
if(res.getCurrency().equals("T")){
continue;
}
if(countyId.equals(SystemConstants.COUNTY_ALL)){
src += d+",";
continue;
}else{
dto = tServerResDao.validRes(countyId,d);
}
int a = Integer.parseInt( dto.getCnt() );
if(a==0){
src += d+",";
};
}
if(StringHelper.isNotEmpty(src)){
String[] resArr = src.split(",");
List<ResDto> resdto = pResDao.queryResByResIds(resArr);
for(ResDto res:resdto){
resName += res.getRes_name()+",";
}
resName = StringHelper.delEndChar(resName, 1);
dto.setResNames(resName);
return dto;
}else{
return null;
}
}
return null;
}
/**
* 根据产品查询最低定价(包含未配置的地市)
* @param prodId
* @param optr
* @return
* @throws ComponentException
* @throws Exception
*/
public List<PProdCountyPrice> queryLowestPrice(String prodId,SOptr optr) throws ComponentException, Exception {
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
List<PProdCountyPrice> countys = pProdCountyPriceDao.queryCountyByDataRight(optr.getCounty_id(),dataRight);
List<PProdCountyPrice> prices = pProdCountyPriceDao.getLowestCounty(prodId,optr.getCounty_id(),dataRight);
for(PProdCountyPrice county:countys){
for(PProdCountyPrice price:prices){
if(county.getCounty_id().equals(price.getCounty_id())){
BeanUtils.copyProperties(price, county);
}
}
}
return countys;
}
/**
* 验证资费是否符合适用地区的最低定价
* @param tariff
* @param prodType
* @param countys
* @param optr
* @throws ComponentException
* @throws Exception
*/
public void checkPrice(ProdTariffDto tariff,String prodType,String[] countys,SOptr optr) throws ComponentException, Exception {
List<PProdCountyPrice> priceList = new ArrayList<PProdCountyPrice>();
String dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString());
if(prodType.equals(SystemConstants.PROD_TYPE_BASE)){
priceList = pProdCountyPriceDao.getLowestCountyById(tariff.getProd_id(),optr.getCounty_id(),dataRight);
}else{
priceList = pProdCountyPriceDao.getLowestCountyByPkId(tariff.getProd_id(),optr.getCounty_id(),dataRight);
}
Map<String ,List<PProdCountyPrice>> priceMap = CollectionHelper.converToMap(priceList,new String[] { "prod_id", "prod_name" });
List<String> countyList = Arrays.asList(countys);
List<String> lowestList = new ArrayList<String>();
for(String key : priceMap.keySet()){
List<PProdCountyPrice> list = priceMap.get(key);
String lowestPrice = "";
String countyName = "";
for(PProdCountyPrice price : list){
if(countyList.contains(price.getCounty_id())){
if(StringHelper.isEmpty(lowestPrice)){
if(StringHelper.isNotEmpty(price.getCounty_price())){
lowestPrice = price.getCounty_price();
}else if(StringHelper.isNotEmpty(price.getArea_price())){
lowestPrice = price.getArea_price();
}else if(StringHelper.isNotEmpty(price.getPrice())){
lowestPrice = price.getPrice();
}
countyName = price.getCounty_name();
}else{
String priceValue= "";
if(StringHelper.isNotEmpty(price.getCounty_price())){
priceValue = price.getCounty_price();
}else if(StringHelper.isNotEmpty(price.getArea_price())){
priceValue = price.getArea_price();
}else if(StringHelper.isNotEmpty(price.getPrice())){
priceValue = price.getPrice();
}
if(StringHelper.isNotEmpty(priceValue) && Integer.parseInt(priceValue)>Integer.parseInt(lowestPrice)){
lowestPrice = priceValue;
countyName = price.getCounty_name();
}
}
}
}
if(StringHelper.isNotEmpty(lowestPrice)){
lowestList.add(key+"_"+lowestPrice+"_"+countyName);
}
}
int realPrice = 0;
String src = "";
for(String dto : lowestList){
realPrice += Integer.parseInt(dto.split("_")[2].toString());
if(prodType.equals(SystemConstants.PROD_TYPE_BASE)){
src += "【"+dto.split("_")[3].toString()+"】最低价"+ NumericHelper.changeF2Y(Long.parseLong(dto.split("_")[2].toString()))+"元;";
}else{
src += "【"+dto.split("_")[3].toString()+"】"+dto.split("_")[1].toString()+"最低价"+NumericHelper.changeF2Y(Long.parseLong(dto.split("_")[2].toString()))+"元;";
}
}
if(realPrice != 0 && tariff.getBilling_cycle()*realPrice > tariff.getRent()){
throw new ComponentException("产品定价不能小于每周期"+NumericHelper.changeF2Y((long)realPrice)+"元:(" +src+")!");
}
}
/**
* 更新最低定价
* @param list
* @param prodId
* @param operator
* @throws Exception
*/
public void saveLowestPrice(List<PProdCountyPrice> list, String prodId)
throws Exception {
String[] countys = CollectionHelper.converValueToArray(list, "county_id");
List<PProdCountyPrice> oldLowestCounty = pProdCountyPriceDao.getLowestCounty(prodId, SystemConstants.COUNTY_ALL, " 1=1 ");
pProdCountyPriceDao.deleteLowestCounty(prodId,countys);
List<PProdCountyPrice> priceList = new ArrayList<PProdCountyPrice>();
PProdCountyPrice price = null;
for(PProdCountyPrice dto : list){
if(dto.getPrice() == null && dto.getArea_price() == null && dto.getCounty_price() == null)
continue;
price = new PProdCountyPrice(prodId,dto.getCounty_id(),dto.getPrice(),dto.getArea_price(),dto.getCounty_price());
priceList.add(price);
}
pProdCountyPriceDao.save(priceList.toArray(new PProdCountyPrice[priceList.size()]));
List<PProdCountyPrice> newLowestCounty = pProdCountyPriceDao.getLowestCounty(prodId,SystemConstants.COUNTY_ALL, " 1=1 ");
// JsonHelper.fromObject(oldLowestCounty).equals(JsonHelper.fromObject(newLowestCounty))
List<String> old=new ArrayList<String>();
List<String> newList=new ArrayList<String>();
for(PProdCountyPrice pcp :oldLowestCounty){
old.add(JsonHelper.fromObject(pcp));
}
for(PProdCountyPrice pcp :newLowestCounty){
newList.add(JsonHelper.fromObject(pcp));
}
String changeInfo = BeanHelper.listchange(old, newList, null, null);
if(StringHelper.isNotEmpty(changeInfo)){
PProd prod = pProdDao.findByKey(prodId);
SSysChange change = new SSysChange(SysChangeType.PROD.toString(), getDoneCOde(), prodId,
prod.getProd_name(), "产品最低限价配置", changeInfo, WebOptr.getOptr().getOptr_id(), new Date());
sSysChangeDao.save(change);
}
}
/**
* @Description: 根据资费id,删除资费,以及对于的折扣
* @param tariffId
* @throws Exception
* @return void
*/
public void deleteTariffById(String tariffId) throws Exception {
// List<PProdTariffDisct> disctlist = queryDisct(tariffId);
// for (PProdTariffDisct dto : disctlist) {
// pProdTariffDisctDao.deleteDisctByDisctId(dto.getDisct_id());
// }
pProdTariffDao.deleteTariffByTariffId(tariffId);
}
/**
* @Description: 根据产品id,删除产品,以及该产品对应的资费与折扣
* @param prodId
* @throws Exception
* @return void
*/
public void deletePordById(String prodId) throws Exception {
List<ProdTariffDto> tarifflist = pProdTariffDao.queryTariffByProd(prodId);
for (ProdTariffDto dto : tarifflist) {
deleteTariffById(dto.getTariff_id());
}
pProdDao.deleteProdByProdId(prodId);
}
public boolean checkGroupRes(String groupId, String count) throws Exception {
if (StringHelper.isNotEmpty(groupId)&& StringHelper.isNotEmpty(count)
&& pResgroupDao.checkGroupRes(groupId) <= Integer.parseInt(count)) {
return false;
} else {
return true;
}
}
public boolean validName(String prodName,String[] prodCountyIds,String prodId) throws Exception {
return pProdDao.validName(prodName,prodCountyIds,prodId);
}
public Map<String,Object> queryProdOrderByServ() throws Exception {
// List<PProd> list = pProdDao.queryProdOrderByServ();
List<PProd> list = pProdDao.findAll();
Map<String, List<PProd>> prodMap = CollectionHelper.converToMap(list, "serv_id");
Map<String , Object> map = new HashMap<String, Object>();
List<SItemvalue> allList = new ArrayList<SItemvalue>();
for (String key : prodMap.keySet()) {
if(StringHelper.isNotEmpty(key)){
List<PProd> pList = prodMap.get(key);
List<SItemvalue> sList = new ArrayList<SItemvalue>();
for(PProd dto : pList){
SItemvalue s = new SItemvalue();
s.setItem_value(dto.getProd_id());
s.setItem_name(dto.getProd_name());
sList.add(s);
}
allList.addAll(sList);
map.put(key, sList);
}
}
if(allList.size()>0){
map.put("all", allList);
}
return map;
}
public List<PPackageProd> queryPackageByProdId(String prod_id) throws Exception {
List<PPackageProd> list = pPackageProdDao.queryPackProdByProdId(prod_id);
// List<PProd> pList = pProdDao.findAll();
// Map<String, List<PProd>> map = CollectionHelper.converToMap(pList, "prod_id");
return list;
}
public PProdDao getPProdDao() {
return pProdDao;
}
public void setPProdDao(PProdDao prodDao) {
pProdDao = prodDao;
}
public void setPResDao(PResDao resDao) {
pResDao = resDao;
}
public void setPResgroupDao(PResgroupDao resgroupDao) {
pResgroupDao = resgroupDao;
}
public void setSAreaDao(SAreaDao areaDao) {
sAreaDao = areaDao;
}
public void setPProdDynResDao(PProdDynResDao prodDynResDao) {
pProdDynResDao = prodDynResDao;
}
public void setPProdStaticResDao(PProdStaticResDao prodStaticResDao) {
pProdStaticResDao = prodStaticResDao;
}
public void setPProdTariffDisctDao(PProdTariffDisctDao prodTariffDisctDao) {
pProdTariffDisctDao = prodTariffDisctDao;
}
public void setPDictProdDao(PDictProdDao dictProdDao) {
pDictProdDao = dictProdDao;
}
public void setPPackageProdDao(PPackageProdDao packageProdDao) {
pPackageProdDao = packageProdDao;
}
public void setPPackageProdHisDao(PPackageProdHisDao packageProdHisDao) {
pPackageProdHisDao = packageProdHisDao;
}
public void setTRuleDefineDao(TRuleDefineDao ruleDefineDao) {
tRuleDefineDao = ruleDefineDao;
}
public void setSCountyDao(SCountyDao countyDao) {
sCountyDao = countyDao;
}
public void setPProdCountyResDao(PProdCountyResDao prodCountyResDao) {
pProdCountyResDao = prodCountyResDao;
}
public void setPProdResChangeDao(PProdResChangeDao prodResChangeDao) {
pProdResChangeDao = prodResChangeDao;
}
public void setPProdTariffCountyDao(PProdTariffCountyDao prodTariffCountyDao) {
pProdTariffCountyDao = prodTariffCountyDao;
}
public void setTAcctitemToProdDao(TAcctitemToProdDao acctitemToProdDao) {
tAcctitemToProdDao = acctitemToProdDao;
}
public void setTServerResDao(TServerResDao tserverResDao) {
tServerResDao = tserverResDao;
}
public PProdTariffDao getPProdTariffDao() {
return pProdTariffDao;
}
public void setPProdTariffDao(PProdTariffDao prodTariffDao) {
pProdTariffDao = prodTariffDao;
}
public void setPPromotionDao(PPromotionDao promotionDao) {
pPromotionDao = promotionDao;
}
public void setPProdCountyDao(PProdCountyDao pProdCountyDao){
this.pProdCountyDao = pProdCountyDao;
}
public void setSRoleCountyDao(SRoleCountyDao roleCountyDao) {
sRoleCountyDao = roleCountyDao;
}
public void setPProdDictDao(PProdDictDao prodDictDao) {
pProdDictDao = prodDictDao;
}
public void setPProdDictCountyDao(PProdDictCountyDao prodDictCountyDao) {
pProdDictCountyDao = prodDictCountyDao;
}
public void setPPromFeeCountyDao(PPromFeeCountyDao pPromFeeCountyDao) {
this.pPromFeeCountyDao = pPromFeeCountyDao;
}
public void setPProdTariffDisctCountyDao(
PProdTariffDisctCountyDao prodTariffDisctCountyDao) {
pProdTariffDisctCountyDao = prodTariffDisctCountyDao;
}
public void setPProdCountyPriceDao(
PProdCountyPriceDao prodCountyPriceDao) {
pProdCountyPriceDao = prodCountyPriceDao;
}
public void setSSysChangeDao(SSysChangeDao sSysChangeDao) {
this.sSysChangeDao = sSysChangeDao;
}
public void setTServerCountyDao(TServerCountyDao tServerCountyDao) {
this.tServerCountyDao = tServerCountyDao;
}
}