Signed-off-by: mzr <1562242162@qq.com>123

This commit is contained in:
mzr 2024-12-19 12:07:28 +08:00
parent fd7c6b1f67
commit a0bc1e2131
6 changed files with 1656 additions and 8 deletions

View File

@ -0,0 +1,588 @@
package nc.ui.cm.meascostcontrast.action;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bd.framework.base.CMArrayUtil;
import nc.bd.framework.base.CMMapUtil;
import nc.bd.framework.base.CMNumberUtil2;
import nc.bs.framework.common.NCLocator;
import nc.cmpub.business.util.CMUtil;
import nc.cmpub.framework.query.CMQueryTemplateUtil;
import nc.itf.cm.meascostcontrast.IMeasCostQueryService;
import nc.ui.cm.meascostcontrast.view.MeasCostAppModel;
import nc.ui.cmpub.business.util.CMBillPanelUtils;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.bill.BillListData;
import nc.ui.pub.bill.BillListPanel;
import nc.ui.pub.bill.IBillItem;
import nc.ui.pubapp.uif2app.query2.action.DefaultQueryAction;
import nc.ui.pubapp.uif2app.view.BillListView;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.ui.uif2.IShowMsgConstant;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.vo.cm.meascostcontrast.CMCommonConst1614;
import nc.vo.cm.meascostcontrast.CMLangConst1614;
import nc.vo.cm.meascostcontrast.MeasCostItemVO;
import nc.vo.cm.meascostcontrast.MeasCostParamVO;
import nc.vo.cm.meascostcontrast.MeasCostQueryConditionVO;
import nc.vo.cm.meascostcontrast.MeasCostShowVO;
import nc.vo.cm.meascostcontrast.MeasCostUtil;
import nc.vo.cmpub.framework.report.CMConditionVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.bill.BillTempletBodyVO;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MapList;
import nc.vo.resa.factor.FactorVO;
/**
* 单位成本对比表-查询按钮
*/
@SuppressWarnings("serial")
public class MeasCostQueryAction extends DefaultQueryAction {
private NCAction refreshAction;
private NCAction printAction;
private NCAction previewAction;
private NCAction outputAction;
/**
* 动态汇总列
*/
private List<String> sumFieldCode = null;
public void setPreviewAction(NCAction previewAction) {
this.previewAction = previewAction;
}
public void setPrintAction(NCAction printAction) {
this.printAction = printAction;
}
public void setRefreshAction(NCAction refreshAction) {
this.refreshAction = refreshAction;
}
public void setOutputAction(NCAction outputAction) {
this.outputAction = outputAction;
}
private CMQueryTemplateUtil queryUtil = null;
private CMQueryTemplateUtil getQueryUtil() {
if (null == this.queryUtil) {
this.queryUtil = new CMQueryTemplateUtil();
}
return this.queryUtil;
}
private FactorVO[] filteShowFactor(FactorVO[] vos, Map<String, String> factorMapShow) {
List<FactorVO> tmp = new ArrayList<FactorVO>();
String[] factorcodes = factorMapShow.keySet().toArray(new String[0]);
for (String code : factorcodes) {
for (FactorVO vo : vos) {
if (vo.getFactorcode().equals(code)) {
tmp.add(vo);
break;
} else if (vo.getFactorcode().startsWith(code)) { // liushy7 这里还需要改动,需要看看在哪里加上的核算要素
vo.setFactorcode(code);
vo.setFactorname(factorMapShow.get(code));
tmp.add(vo);
break;
}
}
}
FactorVO[] result = tmp.toArray(new FactorVO[0]);
// 对编码进行排序
this.sortVOByCode(result);
return result;
}
/**
* 按照编码对VO进行排序
*
* @param vos
*/
private void sortVOByCode(FactorVO[] vos) {
if (vos == null || vos.length < 2) {
return;
}
Arrays.sort(vos, new Comparator<FactorVO>() {
@Override
public int compare(FactorVO o1, FactorVO o2) {
String code1 = (String) o1.getAttributeValue(FactorVO.FACTORCODE);
String code2 = (String) o2.getAttributeValue(FactorVO.FACTORCODE);
return code1.compareTo(code2);
}
});
}
@Override
protected void showQueryInfo() {
int size = this.getListView().getModel().getRowCount();
if (size > 0) {
int currentSize = size - 1;
ShowStatusBarMsgUtil.showStatusBarMsg(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("pubapp_0",
"0pubapp-0265", null, new String[] { "" + currentSize })/*
* @res "查询成功,已查到{0}张单据。"
*/, this.getModel().getContext());
} else {
ShowStatusBarMsgUtil.showStatusBarMsg(IShowMsgConstant.getQueryNullInfo(), this.getModel().getContext());
}
}
@Override
protected void executeQuery(IQueryScheme queryScheme) {
this.sumFieldCode = new ArrayList<String>();
// 取得查询条件
MeasCostParamVO paramVO = this.getMeasCostParamVO(queryScheme);
// 根据查询条件查询返回显示VO
MeasCostShowVO showVO = null;
try {
showVO = this.getQueryService().process(paramVO);
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
// 取得逻辑查询条件
Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap();
Map<String, List<String>> itemgroupMap = null;// 保存表头上下两层列的对应关系的mapList
if (showVO != null) {
Map<String, Integer> digitsMap = showVO.getDigitsMap();// 列表精度信息(单价数量金额)
// 初始化动态表头------动态列只显示有数据的列
FactorVO[] factorVOs = this.filteShowFactor(showVO.getFactorVOs(), showVO.getFactorMapShow());
if (factorVOs != null) {
itemgroupMap = this.reBuildItem(conditionMap, factorVOs, digitsMap);
}
// 初始化数据
List<MeasCostItemVO> itemVOList = showVO.getItemVOList();
if (itemVOList != null) {
MeasCostItemVO[] itemVOs = itemVOList.toArray(new MeasCostItemVO[itemVOList.size()]);
MeasCostItemVO[] result = this.dealQueryResult(itemVOs);
this.getListView().getModel().initModel(result);
BillListData billListData = this.getListView().getBillListPanel().getBillListData();
if (itemVOList.size() > 0) {
this.previewAction.setEnabled(true);
this.printAction.setEnabled(true);
this.outputAction.setEnabled(true);
}
}
}
// 如果没有取得任何数据初始化界面数据为空
else {
this.getListView().getModel().initModel(null);
this.previewAction.setEnabled(false);
this.printAction.setEnabled(false);
this.outputAction.setEnabled(false);
return;
}
// 取得动态列的显示明细区分
String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap);
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 页签编码
String tablecode = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJCODE).getTableCode();
// 表头多层的情况时设置表头上面一层的列名
if (CMArrayUtil.isNotEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) {
CMBillPanelUtils.createSingleLayMultiHeadTableForHead(billListPanel, tablecode, itemgroupMap);
}
// 刷新界面显示
this.getListView().getBillListPanel().getHeadTable().getTableHeader().invalidate();
this.getListView().getBillListPanel().getParentListPanel().getTable().getTableHeader().validate();
}
private MeasCostItemVO[] dealQueryResult(MeasCostItemVO[] itemVOs) {
if (CMArrayUtil.isEmpty(itemVOs)) {
return itemVOs;
}
MeasCostItemVO[] result = new MeasCostItemVO[itemVOs.length + 1];
UFDouble nsumncost = UFDouble.ZERO_DBL;// 合计
UFDouble nnum = UFDouble.ZERO_DBL;// 产量
Map<String, UFDouble> sumMap = new HashMap<String, UFDouble>();
for (String field : this.sumFieldCode) {
sumMap.put(field, UFDouble.ZERO_DBL);
}
int i = 0;
for (MeasCostItemVO item : itemVOs) {
if (item.getNnum() != null) {
nnum = CMNumberUtil2.add(nnum, item.getNnum());
}
if (item.getAttributeValue("nsumncost") != null) {
nsumncost = CMNumberUtil2.add(nsumncost, (UFDouble) item.getAttributeValue("nsumncost"));
}
for (String key : sumMap.keySet()) {
UFDouble oldVal = sumMap.get(key);
if (item.getAttributeValue(key) != null) {
UFDouble newVal = CMNumberUtil2.add(oldVal, (UFDouble) item.getAttributeValue(key));
sumMap.put(key, newVal);
}
}
result[i] = item;
i++;
}
MeasCostItemVO newItem = new MeasCostItemVO();
newItem.setCccode(CMLangConst1614.GET_NSUM_NAME());// res:合计
newItem.setAttributeValue("nnum", nnum);
newItem.setAttributeValue("nsumncost", nsumncost);
for (String key : sumMap.keySet()) {
newItem.setAttributeValue(key, sumMap.get(key));
}
result[itemVOs.length] = newItem;
return result;
}
/**
* 重构动态列表头
*
* @param factorVOs "核算要素"动态列初始化所需数据
* @param conditionMap 逻辑查询条件
* @param digitsMap 列表精度----单价数量金额
* @return 保存表头上下两层列的对应关系的map
*/
private Map<String, List<String>> reBuildItem(Map<String, CMConditionVO> conditionMap, FactorVO[] factorVOs,
Map<String, Integer> digitsMap) {
// 取得列的显示明细区分区分本下阶显示标准成本区分成本中心默认
String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap);
// 取得成本对象的显示方式成本对象产品产品成本分类产品基本分类
Integer ishowtype = MeasCostQueryConditionVO.PRODUCT_VALUE;
if (conditionMap.containsKey(MeasCostQueryConditionVO.ISHOWTYPE)
&& conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue() != null) {
ishowtype = Integer.valueOf(conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue());
}
// 保存基本列的list
List<BillItem> itemsList = new ArrayList<BillItem>();
// 保存两层列的对应关系
MapList<String, String> itemgroupMapList = new MapList<String, String>();
// 设置固定的前三列保存到list
this.setCodeNameItems(itemsList, ishowtype, digitsMap);
// 如果显示样式为单层单层列保存到list
if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) {
this.setSingleItems(itemsList, factorVOs, digitsMap);
}
// 如果显示样式为双层双层列的下层列保存到list并返回保存两层列的对应关系的Map
else {
itemgroupMapList = this.setDoubleItems(itemsList, factorVOs, showDetailDiff, digitsMap);
}
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 设置表头的子列
billListPanel.getBillListData().setHeadItems(itemsList.toArray(new BillItem[0]));
billListPanel.setListData(this.getListView().getBillListPanel().getBillListData());
return itemgroupMapList.toMap();
}
/**
* 设置固定列包括三个列产品编码产品名称产量
*
* @param ishowtype 显示方式成本对象产品产品成本分类产品基本分类
*/
private void setCodeNameItems(List<BillItem> itemsList, Integer ishowtype, Map<String, Integer> digitsMap) {
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 取得产品编码和产品名称这两列的列名{0产品编码列名1产品名称列名}
String[] itemNames = this.getItemNameByShowType(ishowtype);
// 设置"成本中心编码"
BillItem centercodeItem = billListPanel.getHeadItem(CMCommonConst1614.CCCODE);
centercodeItem.setName(itemNames[0]);
itemsList.add(centercodeItem);
// 设置"成本中心名称"
BillItem centernameItem = billListPanel.getHeadItem(CMCommonConst1614.CCNAME);
centernameItem.setName(itemNames[1]);
itemsList.add(centernameItem);
// 设置"产品编码"
BillItem codeItem = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJCODE);
codeItem.setName(itemNames[2]);
itemsList.add(codeItem);
// 设置"产品名称"
BillItem nameItem = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJNAME);
nameItem.setName(itemNames[3]);
itemsList.add(nameItem);
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"产品规格"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.MATERIALSPEC);
materialspecItem.setName(itemNames[4]);
itemsList.add(materialspecItem);
}
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"产品规格"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.MATERIALTYPE);
materialspecItem.setName(itemNames[5]);
itemsList.add(materialspecItem);
}
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"计量单位"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.PK_MEASDOC);
materialspecItem.setName(itemNames[6]);
itemsList.add(materialspecItem);
}
String tableCode = nameItem.getTableCode();
int decimalDigits = nameItem.getDecimalDigits();
// 设置"项目编码"
BillItem projectcodeItem = billListPanel.getHeadItem(CMCommonConst1614.PROJECTCODE);
if (projectcodeItem == null) {
projectcodeItem = CMBillPanelUtils.buildCellItems(tableCode, CMCommonConst1614.PROJECTCODE, "项目编码", 20,
decimalDigits, null);
}
BillTempletBodyVO bodyVO = nameItem.getBodyVO();
projectcodeItem.initItem(bodyVO);
projectcodeItem.setKey(CMCommonConst1614.PROJECTCODE);
projectcodeItem.setName("项目编码");
// projectcodeItem.setTableCode(tableCode);
// projectcodeItem.setDecimalDigits(decimalDigits);
// projectcodeItem.setPk_org(nameItem.getPk_org());
itemsList.add(projectcodeItem);
// 设置"项目名称"
BillItem projectnameItem = billListPanel.getHeadItem(CMCommonConst1614.PROJECTNAME);
if (projectnameItem == null) {
projectnameItem = CMBillPanelUtils.buildCellItems(tableCode, CMCommonConst1614.PROJECTNAME, "项目名称", 22,
decimalDigits, null);
projectnameItem.setName("项目名称");
}
projectnameItem.initItem(bodyVO);
projectnameItem.setKey(CMCommonConst1614.PROJECTNAME);
projectnameItem.setName("项目名称");
itemsList.add(projectnameItem);
// 设置"产量"
BillItem nnumItem = billListPanel.getHeadItem(CMCommonConst1614.NNUM);
nnumItem.setDecimalDigits(digitsMap.get(MeasCostShowVO.NumDigitsKey));
nnumItem.setDataType(IBillItem.DECIMAL);
itemsList.add(nnumItem);
}
/**
* 根据显示方式不同取前两列的列名
*
* @param ishowtype 显示方式成本对象产品产品成本分类产品基本分类
* @return 字符串数组{0产品编码列名1产品名称列名}
*/
private String[] getItemNameByShowType(Integer ishowtype) {
String[] itemName = new String[7];
itemName[0] = CMLangConst1614.GET_CENTERCODE_NAME();
itemName[1] = CMLangConst1614.GET_CENTERNAME_NAME();
// 显示方式成本对象
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_OBJECT_CODE_NAME();
itemName[3] = CMLangConst1614.GET_OBJECT_NAME();
}
// 显示方式产品
else if (MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_NAME();
}
// 显示方式产品成本分类
else if (MeasCostQueryConditionVO.PRODUCT_COST_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_COST_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_COST_NAME();
}
// 显示方式产品基本分类
else if (MeasCostQueryConditionVO.PRODUCT_BASIC_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_BASIC_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_BASIC_NAME();
}
itemName[4] = "规格";
itemName[5] = "型号";
itemName[6] = "计量单位";
return itemName;
}
/**
* 单层列时将列保存到list
*
* @param itemsList 保存基本列的list
* @param factorVOs "核算要素"动态列初始化所需数据
*/
private void setSingleItems(List<BillItem> itemsList, FactorVO[] factorVOs, Map<String, Integer> digitsMap) {
int moneyDigits = 8;
int priceDigits = 8;
if (digitsMap != null && digitsMap.size() > 0) {
// 金额精度
moneyDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.MoneyDigitsKey);
priceDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.PriceDigitsKey);
}
// 页签编码
String tablecode = this.getListView().getBillListPanel().getHeadItem(CMCommonConst1614.VCOSTOBJCODE)
.getTableCode();
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
int itemSeq = 9; // 该列是第4列
// 设置"单位成本"单列
BillItem item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, CMCommonConst1614.NCOST),
CMLangConst1614.GET_NMEASCOST_NAME(), itemSeq, priceDigits, null);
itemsList.add(item);
itemSeq++;
// 设置"合计"单列
item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, CMCommonConst1614.NCOST),
CMLangConst1614.GET_NSUM_NAME(), itemSeq, moneyDigits, null);
itemsList.add(item);
itemSeq++;
// 设置"核算要素"
for (FactorVO factorVO : factorVOs) {
String itemCode = MeasCostUtil.getItemCodeByRule(factorVO.getFactorcode(), CMCommonConst1614.NCOST);
String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME);
item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, moneyDigits, null);
itemsList.add(item);
itemSeq++;
this.sumFieldCode.add(itemCode);
}
// 设置表头的子列
billListPanel.getBillListData().setHeadItems(itemsList.toArray(new BillItem[0]));
billListPanel.setListData(this.getListView().getBillListPanel().getBillListData());
}
/**
* 双层列时将下层列保存到list并返回保存表头上下两层列的对应关系Map
*
* @param itemsList 保存基本列的list
* @param factorVOs "核算要素"动态列初始化所需数据
* @param showDetailDiff 列的显示样式区分本下阶显示标准成本区分成本中心默认
* @return 保存两层列的对应关系的Map
*/
private MapList<String, String> setDoubleItems(List<BillItem> itemsList, FactorVO[] factorVOs,
String[] showDetailDiff, Map<String, Integer> digitsMap) {
int moneyDigits = 8;
int priceDigits = 8;
if (digitsMap != null && digitsMap.size() > 0) {
// 金额精度
moneyDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.MoneyDigitsKey);
priceDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.PriceDigitsKey);
}
// 页签编码
String tablecode = this.getListView().getBillListPanel().getHeadItem(CMCommonConst1614.VCOSTOBJCODE)
.getTableCode();
MapList<String, String> itemgroupMapList = new MapList<String, String>();
int itemSeq = 9; // 该列是第4列
// 设置"单位成本"
for (int i = 0; i < showDetailDiff.length; i++) {
String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, showDetailDiff[i]);
String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]);
if (CMLangConst1614.GET_NCOST_NAME().equals(itemName)) {
itemName = CMLangConst1614.GET_ALL_NMEASCOST_NAME();
}
BillItem item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, priceDigits, null);
itemsList.add(item);
itemgroupMapList.put(CMLangConst1614.GET_NMEASCOST_NAME(), item.getKey());
itemSeq++;
}
// 设置"合计"
for (int i = 0; i < showDetailDiff.length; i++) {
String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, showDetailDiff[i]);
String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]);
BillItem item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, moneyDigits, null);
itemsList.add(item);
itemgroupMapList.put(CMLangConst1614.GET_NSUM_NAME(), item.getKey());
itemSeq++;
}
// 设置"核算要素"
for (FactorVO factorVO : factorVOs) {
String groupItemCode = factorVO.getFactorcode();
String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME);
for (int i = 0; i < showDetailDiff.length; i++) {
BillItem item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[i]),
MeasCostUtil.getItemNameByCode(showDetailDiff[i]), itemSeq, moneyDigits, null);
itemsList.add(item);
itemgroupMapList.put(itemName, item.getKey());
itemSeq++;
this.sumFieldCode.add(MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[0]));
}
}
return itemgroupMapList;
}
/**
* 前台传往后台的查询参数VO,其中包括 1.全部查询条件conditions 2.逻辑查询条件map
*
* @return 查询参数VO
*/
private MeasCostParamVO getMeasCostParamVO(IQueryScheme queryScheme) {
// 保存查询参数VO
MeasCostParamVO paramVO = new MeasCostParamVO();
// 从查询条件对话框代理取得查询条件VO数组
Map<String, CMConditionVO> conditionMap = this.getQueryUtil().getConditionVOMap(queryScheme);
// 缓存查询条件供刷新按钮使用
((MeasCostAppModel) this.getModel()).setConditionMap(conditionMap);
((MeasCostAppModel) this.getModel()).setIsDoQuery(true);
if (CMMapUtil.isNotEmpty(conditionMap)) {
this.refreshAction.setEnabled(true);
paramVO.setConditionMap(conditionMap);
}
return paramVO;
}
/**
* 得到单位成本对比表的查询服务接口
*
* @return 查询服务接口
*/
private IMeasCostQueryService getQueryService() {
return NCLocator.getInstance().lookup(IMeasCostQueryService.class);
}
/**
* 单据模板的列表视图
*/
private BillListView listView;
public BillListView getListView() {
return this.listView;
}
public void setListView(BillListView listView) {
this.listView = listView;
}
}

View File

@ -0,0 +1,572 @@
package nc.ui.cm.meascostcontrast.action;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bd.framework.base.CMArrayUtil;
import nc.bd.framework.base.CMNumberUtil2;
import nc.bs.framework.common.NCLocator;
import nc.bs.uif2.IActionCode;
import nc.cmpub.business.util.CMUtil;
import nc.itf.cm.meascostcontrast.IMeasCostQueryService;
import nc.ui.cm.meascostcontrast.view.MeasCostAppModel;
import nc.ui.cmpub.business.util.CMBillPanelUtils;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.bill.BillListPanel;
import nc.ui.pub.bill.IBillItem;
import nc.ui.pubapp.uif2app.view.BillListView;
import nc.ui.uif2.IShowMsgConstant;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.ui.uif2.actions.ActionInitializer;
import nc.vo.cm.meascostcontrast.CMCommonConst1614;
import nc.vo.cm.meascostcontrast.CMLangConst1614;
import nc.vo.cm.meascostcontrast.MeasCostItemVO;
import nc.vo.cm.meascostcontrast.MeasCostParamVO;
import nc.vo.cm.meascostcontrast.MeasCostQueryConditionVO;
import nc.vo.cm.meascostcontrast.MeasCostShowVO;
import nc.vo.cm.meascostcontrast.MeasCostUtil;
import nc.vo.cmpub.framework.report.CMConditionVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.bill.BillTempletBodyVO;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MapList;
import nc.vo.resa.factor.FactorVO;
public class MeasCostRefreshAction extends nc.ui.uif2.actions.RefreshSingleAction {
private static final long serialVersionUID = 1L;
private NCAction printAction;
private NCAction previewAction;
private NCAction outputAction;
/**
* 单据模板的列表视图
*/
private BillListView listView;
/**
* 动态汇总列
*/
private List<String> sumFieldCode = null;
public void setPreviewAction(NCAction previewAction) {
this.previewAction = previewAction;
}
public void setPrintAction(NCAction printAction) {
this.printAction = printAction;
}
public void setOutputAction(NCAction outputAction) {
this.outputAction = outputAction;
}
public BillListView getListView() {
return this.listView;
}
public void setListView(BillListView listView) {
this.listView = listView;
}
public MeasCostRefreshAction() {
super();
ActionInitializer.initializeAction(this, IActionCode.REFRESH);
}
@Override
protected boolean isActionEnable() {
return ((MeasCostAppModel) this.getModel()).getIsDoQuery();
}
@Override
public void doAction(ActionEvent e) throws Exception {
this.executeQuery();
this.showQueryInfo();
}
private void showQueryInfo() {
int size = this.getListView().getModel().getRowCount();
if (size > 0) {
int currentSize = size - 1;
// ShowStatusBarMsgUtil.showStatusBarMsg("刷新成功,共刷新" + size + "条记录。",
// this.getModel().getContext());
ShowStatusBarMsgUtil.showStatusBarMsg(
nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("pubapp_0", "0pubapp-0266", null,
new String[] { "" + currentSize })/* @res "刷新成功,共刷新{0}张单据。" */,
this.getModel().getContext());
} else {
ShowStatusBarMsgUtil.showStatusBarMsg(IShowMsgConstant.getQueryNullInfo(), this.getModel().getContext());
}
}
private void executeQuery() {
this.sumFieldCode = new ArrayList<String>();
// 取得查询条件
MeasCostParamVO paramVO = this.getMeasCostParamVO();
// 根据查询条件查询返回显示VO
MeasCostShowVO showVO = null;
try {
showVO = this.getQueryService().process(paramVO);
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
// 取得逻辑查询条件
Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap();
Map<String, List<String>> itemgroupMap = null;// 保存表头上下两层列的对应关系的mapList
if (showVO != null) {
Map<String, Integer> digitsMap = showVO.getDigitsMap();// 列表精度信息(单价数量金额)
// 初始化动态表头------动态列只显示有数据的列
FactorVO[] factorVOs = this.filteShowFactor(showVO.getFactorVOs(), showVO.getFactorMapShow());
if (factorVOs != null) {
itemgroupMap = this.reBuildItem(conditionMap, factorVOs, digitsMap);
}
// 初始化数据
List<MeasCostItemVO> itemVOList = showVO.getItemVOList();
if (itemVOList != null) {
MeasCostItemVO[] itemVOs = itemVOList.toArray(new MeasCostItemVO[itemVOList.size()]);
MeasCostItemVO[] result = this.dealQueryResult(itemVOs);
this.getListView().getModel().initModel(result);
if (itemVOList.size() > 0) {
this.previewAction.setEnabled(true);
this.printAction.setEnabled(true);
this.outputAction.setEnabled(true);
}
}
}
// 如果没有取得任何数据初始化界面数据为空
else {
this.getListView().getModel().initModel(null);
this.previewAction.setEnabled(false);
this.printAction.setEnabled(false);
this.outputAction.setEnabled(false);
return;
}
// 取得动态列的显示明细区分
String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap);
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 页签编码
String tablecode = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJCODE).getTableCode();
// 表头多层的情况时设置表头上面一层的列名
if (CMArrayUtil.isNotEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) {
CMBillPanelUtils.createSingleLayMultiHeadTableForHead(billListPanel, tablecode, itemgroupMap);
}
// 刷新界面显示
this.getListView().getBillListPanel().getHeadTable().getTableHeader().invalidate();
this.getListView().getBillListPanel().getParentListPanel().getTable().getTableHeader().validate();
}
private MeasCostItemVO[] dealQueryResult(MeasCostItemVO[] itemVOs) {
if (CMArrayUtil.isEmpty(itemVOs)) {
return itemVOs;
}
MeasCostItemVO[] result = new MeasCostItemVO[itemVOs.length + 1];
UFDouble nsumncost = UFDouble.ZERO_DBL;// 合计
UFDouble nnum = UFDouble.ZERO_DBL;// 产量
Map<String, UFDouble> sumMap = new HashMap<String, UFDouble>();
for (String field : this.sumFieldCode) {
sumMap.put(field, UFDouble.ZERO_DBL);
}
int i = 0;
for (MeasCostItemVO item : itemVOs) {
if (item.getNnum() != null) {
nnum = CMNumberUtil2.add(nnum, item.getNnum());
}
if (item.getAttributeValue("nsumncost") != null) {
nsumncost = CMNumberUtil2.add(nsumncost, (UFDouble) item.getAttributeValue("nsumncost"));
}
for (String key : sumMap.keySet()) {
UFDouble oldVal = sumMap.get(key);
if (item.getAttributeValue(key) != null) {
UFDouble newVal = CMNumberUtil2.add(oldVal, (UFDouble) item.getAttributeValue(key));
sumMap.put(key, newVal);
}
}
result[i] = item;
i++;
}
MeasCostItemVO newItem = new MeasCostItemVO();
newItem.setCccode(CMLangConst1614.GET_NSUM_NAME());// res:合计
newItem.setAttributeValue("nnum", nnum);
newItem.setAttributeValue("nsumncost", nsumncost);
for (String key : sumMap.keySet()) {
newItem.setAttributeValue(key, sumMap.get(key));
}
result[itemVOs.length] = newItem;
return result;
}
private FactorVO[] filteShowFactor(FactorVO[] vos, Map<String, String> factorMapShow) {
List<FactorVO> tmp = new ArrayList<FactorVO>();
String[] factorcodes = factorMapShow.keySet().toArray(new String[0]);
for (String code : factorcodes) {
for (FactorVO vo : vos) {
if (vo.getFactorcode().equals(code)) {
tmp.add(vo);
break;
}
}
}
FactorVO[] result = tmp.toArray(new FactorVO[0]);
// 对编码进行排序
this.sortVOByCode(result);
return result;
}
/**
* 按照编码对VO进行排序
*
* @param vos
*/
private void sortVOByCode(FactorVO[] vos) {
if (vos == null || vos.length < 2) {
return;
}
Arrays.sort(vos, new Comparator<FactorVO>() {
@Override
public int compare(FactorVO o1, FactorVO o2) {
String code1 = (String) o1.getAttributeValue(FactorVO.FACTORCODE);
String code2 = (String) o2.getAttributeValue(FactorVO.FACTORCODE);
return code1.compareTo(code2);
}
});
}
/**
* 重构动态列表头
*
* @param factorVOs "核算要素"动态列初始化所需数据
* @param conditionMap 逻辑查询条件
* @param digitsMap 列表精度----单价数量金额
* @return 保存表头上下两层列的对应关系的map
*/
private Map<String, List<String>> reBuildItem(Map<String, CMConditionVO> conditionMap, FactorVO[] factorVOs,
Map<String, Integer> digitsMap) {
// 取得列的显示明细区分区分本下阶显示标准成本区分成本中心默认
String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap);
// 取得成本对象的显示方式成本对象产品产品成本分类产品基本分类
Integer ishowtype = MeasCostQueryConditionVO.PRODUCT_VALUE;
if (conditionMap.containsKey(MeasCostQueryConditionVO.ISHOWTYPE)
&& conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue() != null) {
ishowtype = Integer.valueOf(conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue());
}
// 保存基本列的list
List<BillItem> itemsList = new ArrayList<BillItem>();
// 保存两层列的对应关系
MapList<String, String> itemgroupMapList = new MapList<String, String>();
// 设置固定的前三列保存到list
this.setCodeNameItems(itemsList, ishowtype, digitsMap);
// 如果显示样式为单层单层列保存到list
if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) {
this.setSingleItems(itemsList, factorVOs, digitsMap);
}
// 如果显示样式为双层双层列的下层列保存到list并返回保存两层列的对应关系的Map
else {
itemgroupMapList = this.setDoubleItems(itemsList, factorVOs, showDetailDiff, digitsMap);
}
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 设置表头的子列
billListPanel.getBillListData().setHeadItems(itemsList.toArray(new BillItem[0]));
billListPanel.setListData(this.getListView().getBillListPanel().getBillListData());
return itemgroupMapList.toMap();
}
/**
* 设置固定列包括三个列产品编码产品名称产量
*
* @param ishowtype 显示方式成本对象产品产品成本分类产品基本分类
*/
private void setCodeNameItems(List<BillItem> itemsList, Integer ishowtype, Map<String, Integer> digitsMap) {
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
// 取得产品编码和产品名称这两列的列名{0产品编码列名1产品名称列名}
String[] itemNames = this.getItemNameByShowType(ishowtype);
// 设置"成本中心编码"
BillItem centercodeItem = billListPanel.getHeadItem(CMCommonConst1614.CCCODE);
centercodeItem.setName(itemNames[0]);
itemsList.add(centercodeItem);
// 设置"成本中心名称"
BillItem centernameItem = billListPanel.getHeadItem(CMCommonConst1614.CCNAME);
centernameItem.setName(itemNames[1]);
itemsList.add(centernameItem);
// 设置"产品编码"
BillItem codeItem = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJCODE);
codeItem.setName(itemNames[2]);
itemsList.add(codeItem);
// 设置"产品名称"
BillItem nameItem = billListPanel.getHeadItem(CMCommonConst1614.VCOSTOBJNAME);
nameItem.setName(itemNames[3]);
itemsList.add(nameItem);
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"产品规格"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.MATERIALSPEC);
materialspecItem.setName(itemNames[4]);
itemsList.add(materialspecItem);
}
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"产品规格"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.MATERIALTYPE);
materialspecItem.setName(itemNames[5]);
itemsList.add(materialspecItem);
}
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)
|| MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
// 设置"计量单位"
BillItem materialspecItem = billListPanel.getHeadItem(CMCommonConst1614.PK_MEASDOC);
materialspecItem.setName(itemNames[6]);
itemsList.add(materialspecItem);
}
String tableCode = nameItem.getTableCode();
int decimalDigits = nameItem.getDecimalDigits();
// 设置"项目编码"
BillItem projectcodeItem = billListPanel.getHeadItem(CMCommonConst1614.PROJECTCODE);
if (projectcodeItem == null) {
projectcodeItem = CMBillPanelUtils.buildCellItems(tableCode, CMCommonConst1614.PROJECTCODE, "项目编码", 20,
decimalDigits, null);
}
BillTempletBodyVO bodyVO = nameItem.getBodyVO();
projectcodeItem.initItem(bodyVO);
projectcodeItem.setKey(CMCommonConst1614.PROJECTCODE);
projectcodeItem.setName("项目编码");
// projectcodeItem.setTableCode(tableCode);
// projectcodeItem.setDecimalDigits(decimalDigits);
// projectcodeItem.setPk_org(nameItem.getPk_org());
itemsList.add(projectcodeItem);
// 设置"项目名称"
BillItem projectnameItem = billListPanel.getHeadItem(CMCommonConst1614.PROJECTNAME);
if (projectnameItem == null) {
projectnameItem = CMBillPanelUtils.buildCellItems(tableCode, CMCommonConst1614.PROJECTNAME, "项目名称", 22,
decimalDigits, null);
projectnameItem.setName("项目名称");
}
projectnameItem.initItem(bodyVO);
projectnameItem.setKey(CMCommonConst1614.PROJECTNAME);
projectnameItem.setName("项目名称");
itemsList.add(projectnameItem);
// 设置"产量"
BillItem nnumItem = billListPanel.getHeadItem(CMCommonConst1614.NNUM);
nnumItem.setDecimalDigits(digitsMap.get(MeasCostShowVO.NumDigitsKey));
nnumItem.setDataType(IBillItem.DECIMAL);
itemsList.add(nnumItem);
}
/**
* 根据显示方式不同取前两列的列名
*
* @param ishowtype 显示方式成本对象产品产品成本分类产品基本分类
* @return 字符串数组{0产品编码列名1产品名称列名}
*/
private String[] getItemNameByShowType(Integer ishowtype) {
String[] itemName = new String[7];
itemName[0] = CMLangConst1614.GET_CENTERCODE_NAME();
itemName[1] = CMLangConst1614.GET_CENTERNAME_NAME();
// 显示方式成本对象
if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_OBJECT_CODE_NAME();
itemName[3] = CMLangConst1614.GET_OBJECT_NAME();
}
// 显示方式产品
else if (MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_NAME();
}
// 显示方式产品成本分类
else if (MeasCostQueryConditionVO.PRODUCT_COST_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_COST_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_COST_NAME();
}
// 显示方式产品基本分类
else if (MeasCostQueryConditionVO.PRODUCT_BASIC_VALUE.equals(ishowtype)) {
itemName[2] = CMLangConst1614.GET_PRODUCT_BASIC_CODE_NAME();
itemName[3] = CMLangConst1614.GET_PRODUCT_BASIC_NAME();
}
itemName[4] = "规格";
itemName[5] = "型号";
itemName[6] = "计量单位";
return itemName;
}
/**
* 单层列时将列保存到list
*
* @param itemsList 保存基本列的list
* @param factorVOs "核算要素"动态列初始化所需数据
*/
private void setSingleItems(List<BillItem> itemsList, FactorVO[] factorVOs, Map<String, Integer> digitsMap) {
int moneyDigits = 8;
int priceDigits = 8;
if (digitsMap != null && digitsMap.size() > 0) {
// 金额精度
moneyDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.MoneyDigitsKey);
priceDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.PriceDigitsKey);
}
// 页签编码
String tablecode = this.getListView().getBillListPanel().getHeadItem(CMCommonConst1614.VCOSTOBJCODE)
.getTableCode();
// 单据列表模板
BillListPanel billListPanel = this.getListView().getBillListPanel();
int itemSeq = 9; // 该列是第4列
// 设置"单位成本"单列
BillItem item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, CMCommonConst1614.NCOST),
CMLangConst1614.GET_NMEASCOST_NAME(), itemSeq, priceDigits, null);
itemsList.add(item);
itemSeq++;
// 设置"合计"单列
item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, CMCommonConst1614.NCOST),
CMLangConst1614.GET_NSUM_NAME(), itemSeq, moneyDigits, null);
itemsList.add(item);
itemSeq++;
// 设置"核算要素"
for (FactorVO factorVO : factorVOs) {
String itemCode = MeasCostUtil.getItemCodeByRule(factorVO.getFactorcode(), CMCommonConst1614.NCOST);
String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME);
item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, moneyDigits, null);
itemsList.add(item);
itemSeq++;
this.sumFieldCode.add(itemCode);
}
// 设置表头的子列
billListPanel.getBillListData().setHeadItems(itemsList.toArray(new BillItem[0]));
billListPanel.setListData(this.getListView().getBillListPanel().getBillListData());
}
/**
* 双层列时将下层列保存到list并返回保存表头上下两层列的对应关系Map
*
* @param itemsList 保存基本列的list
* @param factorVOs "核算要素"动态列初始化所需数据
* @param showDetailDiff 列的显示样式区分本下阶显示标准成本区分成本中心默认
* @return 保存两层列的对应关系的Map
*/
private MapList<String, String> setDoubleItems(List<BillItem> itemsList, FactorVO[] factorVOs,
String[] showDetailDiff, Map<String, Integer> digitsMap) {
int moneyDigits = 8;
int priceDigits = 8;
if (digitsMap != null && digitsMap.size() > 0) {
// 金额精度
moneyDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.MoneyDigitsKey);
priceDigits = digitsMap.get(nc.vo.cm.meascostcontrast.ResultVO.PriceDigitsKey);
}
// 页签编码
String tablecode = this.getListView().getBillListPanel().getHeadItem(CMCommonConst1614.VCOSTOBJCODE)
.getTableCode();
MapList<String, String> itemgroupMapList = new MapList<String, String>();
int itemSeq = 9; // 该列是第4列
// 设置"单位成本"
for (int i = 0; i < showDetailDiff.length; i++) {
String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, showDetailDiff[i]);
String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]);
if (CMLangConst1614.GET_NCOST_NAME().equals(itemName)) {
itemName = CMLangConst1614.GET_ALL_NMEASCOST_NAME();
}
BillItem item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, priceDigits, null);
itemsList.add(item);
itemgroupMapList.put(CMLangConst1614.GET_NMEASCOST_NAME(), item.getKey());
itemSeq++;
}
// 设置"合计"
for (int i = 0; i < showDetailDiff.length; i++) {
String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, showDetailDiff[i]);
String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]);
BillItem item = CMBillPanelUtils.buildCellItems(tablecode, itemCode, itemName, itemSeq, moneyDigits, null);
itemsList.add(item);
itemgroupMapList.put(CMLangConst1614.GET_NSUM_NAME(), item.getKey());
itemSeq++;
}
// 设置"核算要素"
for (FactorVO factorVO : factorVOs) {
String groupItemCode = factorVO.getFactorcode();
String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME);
for (int i = 0; i < showDetailDiff.length; i++) {
BillItem item = CMBillPanelUtils.buildCellItems(tablecode,
MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[i]),
MeasCostUtil.getItemNameByCode(showDetailDiff[i]), itemSeq, moneyDigits, null);
itemsList.add(item);
itemgroupMapList.put(itemName, item.getKey());
itemSeq++;
this.sumFieldCode.add(MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[0]));
}
}
return itemgroupMapList;
}
/**
* 前台传往后台的查询参数VO,其中包括 1.全部查询条件conditions 2.逻辑查询条件map
*
* @return 查询参数VO
*/
private MeasCostParamVO getMeasCostParamVO() {
// 缓存查询条件供刷新按钮使用
Map<String, CMConditionVO> conditionMap = ((MeasCostAppModel) this.getModel()).getConditionMap();
// 保存查询参数VO
MeasCostParamVO paramVO = new MeasCostParamVO();
paramVO.setConditionMap(conditionMap);
return paramVO;
}
/**
* 得到单位成本对比表的查询服务接口
*
* @return 查询服务接口
*/
private IMeasCostQueryService getQueryService() {
return NCLocator.getInstance().lookup(IMeasCostQueryService.class);
}
}

View File

@ -156,10 +156,10 @@ public class MeascostcontrastComServiceImpl implements IMeascostcontrastComServi
row.put(CMCommonConst1614.MATERIALSPEC, measCostItemVO.getMaterialspec()); row.put(CMCommonConst1614.MATERIALSPEC, measCostItemVO.getMaterialspec());
row.put(CMCommonConst1614.MATERIALTYPE, measCostItemVO.getMaterialtype()); row.put(CMCommonConst1614.MATERIALTYPE, measCostItemVO.getMaterialtype());
row.put(CMCommonConst1614.PK_MEASDOC, measCostItemVO.getPk_measdoc()); row.put(CMCommonConst1614.PK_MEASDOC, measCostItemVO.getPk_measdoc());
// todo 增加项目字段 // todo 增加项目字段
row.put("projectcode", measCostItemVO.getProjectcode()); row.put(CMCommonConst1614.PROJECTCODE, measCostItemVO.getProjectcode());
row.put("projectname", measCostItemVO.getProjectname()); row.put(CMCommonConst1614.PROJECTNAME, measCostItemVO.getProjectname());
if (measCostItemVO.getFactorMap() != null) { if (measCostItemVO.getFactorMap() != null) {
for (String str : measCostItemVO.getFactorMap().keySet()) { for (String str : measCostItemVO.getFactorMap().keySet()) {
if (str.equals("nmeascostncost")) {// 单位成本 if (str.equals("nmeascostncost")) {// 单位成本
@ -225,11 +225,7 @@ public class MeascostcontrastComServiceImpl implements IMeascostcontrastComServi
// MapList<String, String> itemgroupMapList = new MapList<String, String>(); // MapList<String, String> itemgroupMapList = new MapList<String, String>();
// 设置固定的前三列保存到list // 设置固定的前三列保存到list
this.setCodeNameItems(itemsList, ishowtype, digitsMap); this.setCodeNameItems(itemsList, ishowtype, digitsMap);
// todo
itemsList.add(new ColumnInfo("ĎîÄżąŕÂë", "projectcode", ColumnInfo.LEFT));
itemsList.add(new ColumnInfo("ĎîÄżĂűłĆ", "projectname", ColumnInfo.LEFT));
// 如果显示样式为单层单层列保存到list // 如果显示样式为单层单层列保存到list
if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) { if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) {
itemsList = this.setSingleItems(itemsList, factorVOs, digitsMap); itemsList = this.setSingleItems(itemsList, factorVOs, digitsMap);
@ -272,6 +268,10 @@ public class MeascostcontrastComServiceImpl implements IMeascostcontrastComServi
itemsList.add(new ColumnInfo("型号", CMCommonConst1614.MATERIALTYPE, ColumnInfo.LEFT)); itemsList.add(new ColumnInfo("型号", CMCommonConst1614.MATERIALTYPE, ColumnInfo.LEFT));
// 设置计量单位 // 设置计量单位
itemsList.add(new ColumnInfo("计量单位", CMCommonConst1614.PK_MEASDOC, ColumnInfo.LEFT)); itemsList.add(new ColumnInfo("计量单位", CMCommonConst1614.PK_MEASDOC, ColumnInfo.LEFT));
// todo
itemsList.add(new ColumnInfo("ĎîÄżąŕÂë", CMCommonConst1614.PROJECTCODE, ColumnInfo.LEFT));
itemsList.add(new ColumnInfo("ĎîÄżĂűłĆ", CMCommonConst1614.PROJECTNAME, ColumnInfo.LEFT));
} }
/** /**

View File

@ -0,0 +1,284 @@
package nc.vo.cm.meascostcontrast;
/**
* 单位成本对比表-显示控制公共常量
*
* @version 2011-6-3 上午10:33:28
* @author wanghjd
*/
public class CMCommonConst1614 {
/**
* 成本中心编码
*/
public static final String CCCODE = "cccode";
/**
* 成本中心名称
*/
public static final String CCNAME = "ccname";
/**
* 产品编码
*/
public static final String VCOSTOBJCODE = "vcostobjcode";
/**
* 产品名称
*/
public static final String VCOSTOBJNAME = "vcostobjname";
/**
* 规格
*/
public static final String MATERIALSPEC = "materialspec";
/**
* 型号
*/
public static final String MATERIALTYPE = "materialtype";
/**
* 产品计量单位
*/
public static final String PK_MEASDOC = "pk_measdoc";
/**
* 产品名称:默认主语言下的名称
*/
public static final String VCOSTOBJNAME0 = "vcostobjname0";
/**
* 项目编码
*/
public static final String PROJECTCODE = "projectcode";
/**
* 项目名称
*/
public static final String PROJECTNAME = "projectname";
/**
* 产量
*/
public static final String NNUM = "nnum";
/**
* 单位成本
*/
public static final String NMEASCOST = "nmeascost";
/**
* 合计
*/
public static final String NSUM = "nsum";
/**
* 成本
*/
public static final String NCOST = "ncost";
/**
* 金额
*/
public static final String NMONEY = "nmoney";
/**
* 成本对象ID
*/
public static final String CCOSTOBJECTID = "ccostobjectid";
/**
* 要素ID
*/
public static final String CELEMENTID = "celementid";
/**
* 作业档案ID
*/
public static final String CACTIVITYID = "cactivityid";
/**
* 作业相关
*/
public static final String BACT = "bAct";
/**
* 标准成本
*/
public static final String NSTDCOST = "nstdcost";
/**
* 耗量差异
*/
public static final String NNUMDIFF = "nnumdiff";
/**
* 价格差异
*/
public static final String NPRICEDIFF = "npricediff";
/**
* 本阶
*/
public static final String THISTYPE = "thistype";
/**
* 下阶
*/
public static final String SUBTYPE = "subtype";
/**
* 本中心成本
*/
public static final String THISCENTER = "thiscenter";
/**
* 其他中心转入
*/
public static final String OTHERCENTER = "othercenter";
/**
* 核算要素编码
*/
public static final String FACTORCODE = "factorcode";
/**
* 核算要素名称
*/
public static final String FACTORNAME = "factorname";
/**
* 核算要素名称默认主语言下的名称
*/
public static final String FACTORNAME0 = "factorname0";
/**
* 核算要素级次
*/
public static final String FACTORlEV = "factorlev";
/**
* 管控范围对应的核算要素表主键
*/
public static final String PK_FACTORASOA = "pk_factorasoa";
/**
* 核算要素总成本
*/
public static final String FACTOR_NSUM = "factornsum";
/**
* 成本对象子查询表别名
*/
public static final String CM_COSTOBJ = "cm_costobj";
/**
* 核算要素子查询表别名
*/
public static final String COST_FACTOR = "cost_factor";
/**
* 成本对象表名
*/
public static final String CM_COSTOBJECT = "cm_costobject";
/**
* 区分本下阶
*/
public static final String BSUBTYPE = "bsubtype";
/**
* 区分成本中心
*/
public static final String BFROMCOSTCENTER = "bfromcostcenter";
/**
* 单位成本-标准成本
*/
public static final String NSTDCOST_NMEASCOST = "nstdcost_nmeascost";
/**
* 单位成本-耗量差异
*/
public static final String NNUMDIFF_NMEASCOST = "nnumdiff_nmeascost";
/**
* 单位成本-价格差异
*/
public static final String NPRICEDIFF_NMEASCOST = "npricediff_nmeascost";
/**
* 合计-标准成本
*/
public static final String NSTDCOST_NSUM = "nstdcost_nsum";
/**
* 合计-耗量差异
*/
public static final String NNUMDIFF_NSUM = "nnumdiff_nsum";
/**
* 合计-价格差异
*/
public static final String NPRICEDIFF_NSUM = "npricediff_nsum";
/**
* 核算要素-标准成本
*/
public static final String NSTDCOST_FACTOR = "nstdcost_factor";
/**
* 核算要素-耗量差异
*/
public static final String NNUMDIFF_FACTOR = "nnumdiff_factor";
/**
* 核算要素-价格差异
*/
public static final String NPRICEDIFF_FACTOR = "npricediff_factor";
/**
* 成本表别名
*/
public static final String CM_COST_TABLE = "cm_cost_table";
/**
* 成本子表别名
*/
public static final String CM_COST_TABLE_B = "cm_cost_table_b";
/**
* 完工成本表 在产成本表 还原成本表
*/
public static final String PK = "PK";
/**
* 核算要素-关联信息表别名
*/
public static final String RESA_FACTOR_SUB = "resa_factor_sub";
/**
* 物料生产信息表别名1
*/
public static final String BD_MATERIALPROD_TEMP1 = "bd_materialprod_temp1";
/**
* 物料生产信息表别名2
*/
public static final String BD_MATERIALPROD_TEMP2 = "bd_materialprod_temp2";
/** 区分本下阶成本时的显示字段 */
public static String[] SUBTYPE_ITEMS = new String[] { CMCommonConst1614.NCOST, CMCommonConst1614.THISTYPE,
CMCommonConst1614.SUBTYPE };
/** 显示标准成本时的显示字段 */
public static String[] STDCOST_ITEMS = new String[] { CMCommonConst1614.NCOST, CMCommonConst1614.NSTDCOST,
CMCommonConst1614.NNUMDIFF, CMCommonConst1614.NPRICEDIFF };
/** 区分成本中心转入时的显示字段 */
public static String[] CENTERFROM_ITEMS = new String[] { CMCommonConst1614.NCOST, CMCommonConst1614.THISCENTER,
CMCommonConst1614.OTHERCENTER };
/** 默认的显示字段 */
public static String[] DEFAULT_ITEMS = new String[] { CMCommonConst1614.NCOST };
}

View File

@ -0,0 +1,102 @@
package nccloud.web.ic.outbound.sapplybill.action;
import java.util.List;
import nc.pub.templet.converter.util.helper.ExceptionUtils;
import nc.pubitf.pu.m422x.ic.m4455.IQuery422XFor4455;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.ic.pub.util.StringUtil;
import nc.vo.ic.pub.util.ValueCheckUtil;
import nc.vo.pu.m422x.entity.StoreReqAppVO;
import nc.vo.pub.BusinessException;
import nc.vo.scmpub.res.billtype.ICBillType;
import nccloud.dto.scmpub.page.entity.SCMQueryTreeFormatVO;
import nccloud.framework.core.json.IJson;
import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.ClientInfo;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.container.SessionContext;
import nccloud.framework.web.json.JsonFactory;
import nccloud.framework.web.ui.pattern.billgrid.BillGrid;
import nccloud.framework.web.ui.pattern.billgrid.BillGridOperator;
import nccloud.nc.vo.pub.pf.PullBillInfoVO;
import nccloud.pubitf.ic.pub.service.IICPubQueryService;
import nccloud.pubitf.platform.query.INCCloudQueryService;
import nccloud.pubitf.riart.businesstype.IPFBusinessTypeService;
import nccloud.web.pu.storereq.util.StoreReqScaleUtil;
public class Query422XFor4455Action implements ICommonAction {
public Object doAction(IRequest request) {
String read = request.read();
IJson json = JsonFactory.create();
SCMQueryTreeFormatVO info = (SCMQueryTreeFormatVO) json.fromJson(read, SCMQueryTreeFormatVO.class);
INCCloudQueryService queryutil = (INCCloudQueryService) ServiceLocator.find(INCCloudQueryService.class);
IQueryScheme scheme = queryutil.convertCondition(info.getQueryInfo());
Object transtype = info.getQueryInfo().getUserdefObj().get("transtype");
PullBillInfoVO[] refbillinfos = queryRefPara(transtype);
appendRefWhr(scheme, refbillinfos);
IICPubQueryService<?, ?> schemeservice = (IICPubQueryService) ServiceLocator.find(IICPubQueryService.class);
scheme = schemeservice.appendOrgPermission(scheme);
StoreReqAppVO[] vos = null;
IQuery422XFor4455 queryService = (IQuery422XFor4455) ServiceLocator.find(IQuery422XFor4455.class);
try {
vos = queryService.queryStoreReqAppsFor4455(scheme);
} catch (BusinessException e) {
ExceptionUtils.wrapException(e);
}
if (null == vos) {
return null;
}
BillGridOperator operator = new BillGridOperator(info.getTempletid(), info.getPageCode());
BillGrid[] grids = operator.toBillGrids(vos);
if (grids != null) {
StoreReqScaleUtil util = new StoreReqScaleUtil();
for (BillGrid billGrid : grids) {
util.processGrid(billGrid, false);
}
}
return grids;
}
private void appendRefWhr(IQueryScheme scheme, PullBillInfoVO[] refbillinfos) {
if (null == refbillinfos || refbillinfos.length == 0) {
return;
}
for (PullBillInfoVO info : refbillinfos) {
if ("422X".equals(info.getSrc_billtype())) {
List<String> busitypes = info.getBusitypes();
if (!ValueCheckUtil.isNullORZeroLength(busitypes)) {
scheme.put("busitypearray", busitypes.toArray(new String[0]));
List<String> tranList = info.getTranstypes();
if (!ValueCheckUtil.isNullORZeroLength(tranList)
&& !StringUtil.isSEmptyOrNull((String) tranList.get(0))) {
scheme.put("transtypearray", tranList.toArray(new String[0]));
}
}
}
}
}
private PullBillInfoVO[] queryRefPara(Object transtype) {
ClientInfo clientinfo = SessionContext.getInstance().getClientInfo();
String groupId = clientinfo.getPk_group();
String userId = clientinfo.getUserid();
IPFBusinessTypeService pfservice = (IPFBusinessTypeService) ServiceLocator.find(IPFBusinessTypeService.class);
PullBillInfoVO[] refbillinfos = null;
try {
refbillinfos = pfservice.getPullBillInfo(ICBillType.SapplyBill.getCode(),
(null == transtype) ? null : (String) transtype, groupId, userId);
} catch (BusinessException e) {
ExceptionUtils.wrapException(e);
}
return refbillinfos;
}
}

View File

@ -0,0 +1,102 @@
package nccloud.web.ic.outbound.sapplybill.action;
import java.util.List;
import nc.pub.templet.converter.util.helper.ExceptionUtils;
import nc.pubitf.pu.m422x.ic.m4455.IQuery422XFor4455;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.ic.pub.util.StringUtil;
import nc.vo.ic.pub.util.ValueCheckUtil;
import nc.vo.pu.m422x.entity.StoreReqAppVO;
import nc.vo.pub.BusinessException;
import nc.vo.scmpub.res.billtype.ICBillType;
import nccloud.dto.scmpub.page.entity.SCMQueryTreeFormatVO;
import nccloud.framework.core.json.IJson;
import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.ClientInfo;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.container.SessionContext;
import nccloud.framework.web.json.JsonFactory;
import nccloud.framework.web.ui.pattern.billgrid.BillGrid;
import nccloud.framework.web.ui.pattern.billgrid.BillGridOperator;
import nccloud.nc.vo.pub.pf.PullBillInfoVO;
import nccloud.pubitf.ic.pub.service.IICPubQueryService;
import nccloud.pubitf.platform.query.INCCloudQueryService;
import nccloud.pubitf.riart.businesstype.IPFBusinessTypeService;
import nccloud.web.pu.storereq.util.StoreReqScaleUtil;
public class QueryBljhXFor4455Action implements ICommonAction {
public Object doAction(IRequest request) {
String read = request.read();
IJson json = JsonFactory.create();
SCMQueryTreeFormatVO info = (SCMQueryTreeFormatVO) json.fromJson(read, SCMQueryTreeFormatVO.class);
INCCloudQueryService queryutil = (INCCloudQueryService) ServiceLocator.find(INCCloudQueryService.class);
IQueryScheme scheme = queryutil.convertCondition(info.getQueryInfo());
Object transtype = info.getQueryInfo().getUserdefObj().get("transtype");
PullBillInfoVO[] refbillinfos = queryRefPara(transtype);
appendRefWhr(scheme, refbillinfos);
IICPubQueryService<?, ?> schemeservice = (IICPubQueryService) ServiceLocator.find(IICPubQueryService.class);
scheme = schemeservice.appendOrgPermission(scheme);
StoreReqAppVO[] vos = null;
IQuery422XFor4455 queryService = (IQuery422XFor4455) ServiceLocator.find(IQuery422XFor4455.class);
try {
vos = queryService.queryStoreReqAppsFor4455(scheme);
} catch (BusinessException e) {
ExceptionUtils.wrapException(e);
}
if (null == vos) {
return null;
}
BillGridOperator operator = new BillGridOperator(info.getTempletid(), info.getPageCode());
BillGrid[] grids = operator.toBillGrids(vos);
if (grids != null) {
StoreReqScaleUtil util = new StoreReqScaleUtil();
for (BillGrid billGrid : grids) {
util.processGrid(billGrid, false);
}
}
return grids;
}
private void appendRefWhr(IQueryScheme scheme, PullBillInfoVO[] refbillinfos) {
if (null == refbillinfos || refbillinfos.length == 0) {
return;
}
for (PullBillInfoVO info : refbillinfos) {
if ("422X".equals(info.getSrc_billtype())) {
List<String> busitypes = info.getBusitypes();
if (!ValueCheckUtil.isNullORZeroLength(busitypes)) {
scheme.put("busitypearray", busitypes.toArray(new String[0]));
List<String> tranList = info.getTranstypes();
if (!ValueCheckUtil.isNullORZeroLength(tranList)
&& !StringUtil.isSEmptyOrNull((String) tranList.get(0))) {
scheme.put("transtypearray", tranList.toArray(new String[0]));
}
}
}
}
}
private PullBillInfoVO[] queryRefPara(Object transtype) {
ClientInfo clientinfo = SessionContext.getInstance().getClientInfo();
String groupId = clientinfo.getPk_group();
String userId = clientinfo.getUserid();
IPFBusinessTypeService pfservice = (IPFBusinessTypeService) ServiceLocator.find(IPFBusinessTypeService.class);
PullBillInfoVO[] refbillinfos = null;
try {
refbillinfos = pfservice.getPullBillInfo(ICBillType.SapplyBill.getCode(),
(null == transtype) ? null : (String) transtype, groupId, userId);
} catch (BusinessException e) {
ExceptionUtils.wrapException(e);
}
return refbillinfos;
}
}