/**
*
*/
package com.ycsoft.business.service.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Service;
import com.ycsoft.beans.config.TBusiDocTemplatefile;
import com.ycsoft.beans.config.TPrintitem;
import com.ycsoft.beans.core.common.CDoneCodeInfo;
import com.ycsoft.beans.core.print.CDoc;
import com.ycsoft.beans.invoice.RInvoice;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.business.cache.PrintContentConfiguration;
import com.ycsoft.business.commons.abstracts.BaseBusiComponent;
import com.ycsoft.business.commons.pojo.BusiParameter;
import com.ycsoft.business.component.config.BusiConfigComponent;
import com.ycsoft.business.component.core.PrintComponent;
import com.ycsoft.business.dto.config.TaskQueryWorkDto;
import com.ycsoft.business.dto.config.TemplateConfigDto;
import com.ycsoft.business.dto.core.fee.FeeDto;
import com.ycsoft.business.dto.core.fee.MergeFeeFormDto;
import com.ycsoft.business.dto.core.print.CInvoiceDto;
import com.ycsoft.business.dto.core.print.DocDto;
import com.ycsoft.business.dto.core.print.InvoiceFromDto;
import com.ycsoft.business.dto.core.print.PrintItemDto;
import com.ycsoft.business.dto.print.BusiDocPrintConfigDto;
import com.ycsoft.business.dto.print.BusiDocPrintItemDto;
import com.ycsoft.business.dto.print.PrintFeeitemDto;
import com.ycsoft.business.service.IDocService;
import com.ycsoft.commons.constants.BusiCodeConstants;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.DateHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.commons.store.MemoryPrintData;
import com.ycsoft.sysmanager.dto.resource.invoice.InvoiceDto;
/**
* @author liujiaqi
*
*/
@Service
public class DocService extends BaseBusiService implements IDocService {
protected BusiConfigComponent busiConfigComponent;
private BaseBusiComponent baseBusiComponent;
private PrintComponent printComponent;
public List<CInvoiceDto> queryInvoiceByCustId(String custId) throws Exception{
return printComponent.queryInvoiceByCustId(custId);
}
public List<TaskQueryWorkDto> queryTaskByCustId(String custId)throws Exception{
return taskComponent.queryTaskByCustId(custId);
}
public List<CDoneCodeInfo> queryDocByCustId(String custId) throws Exception {
return printComponent.queryDocByCustId(custId);
}
public List<CDoc> queryBusiConfirmDocByCustId(String custId) throws Exception {
return printComponent.queryBusiConfirmDocByCustId(custId);
}
/**
*
* @param custId
* @param doneCodes 业务doneCode
* @throws Exception
*/
public void saveDoc(String custId,String docSn, String[] doneCodes) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();//打印doneCode
// String docSn = printComponent.gDocSn();
printComponent.saveServiceDoc(custId,doneCode, docSn);//保存打印doneCode和打印项数据
printComponent.saveDocItem(docSn, doneCodes);//保存业务doneCode和打印项数据
saveAllPublic(doneCode,getBusiParam());
}
public void saveChangeInvoice(List<FeeDto> fees ) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
if(null != fees && fees.size() == 1 && StringHelper.isEmpty(fees.get(0).getFee_sn())){
FeeDto fee = fees.get(0);
//修改收费记录中的发票号
feeComponent.changeFeeInvoice(fee.getNew_invoice_code(), fee.getNew_invoice_book_id(), fee.getNew_invoice_id(),
fee.getInvoice_code(), fee.getInvoice_id());
}else{
feeComponent.changeFeeInvoice(fees);
for(FeeDto feeDto : fees){
invoiceComponent.saveInvoicePropChange(doneCode, feeDto
.getInvoice_id(), feeDto.getInvoice_code(), feeDto
.getNew_invoice_id(), feeDto.getNew_invoice_code());
}
}
invoiceComponent.useInvoice(fees);
invoiceComponent.cancelUseInvoice(fees);
saveAllPublic(doneCode,getBusiParam());
}
public void saveChangeInvoice(CInvoiceDto oldInvoice,CInvoiceDto newInvoice,String docSn) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
//修改发票打印记录对应的发票号
printComponent.changeInvoice(oldInvoice,newInvoice,docSn);
//修改收费记录中的发票号
feeComponent.changeFeeInvoice(newInvoice.getInvoice_code(), newInvoice.getInvoice_book_id(), newInvoice.getInvoice_id(),
oldInvoice.getInvoice_code(), oldInvoice.getInvoice_id());
//根据发票号查找原发票信息
RInvoice invoice = invoiceComponent.queryById(oldInvoice.getInvoice_id(),oldInvoice.getInvoice_code());
//修改新发票状态为使用状态、金额、出票方式为原发票对应的信息
invoiceComponent.useInvoice(newInvoice.getInvoice_code(), newInvoice.getInvoice_id(), invoice.getInvoice_mode(),invoice.getAmount());
//修改原发票的状态,金额为0,出 票方式为空
invoiceComponent.cancelUseInvoice(oldInvoice);
invoiceComponent.saveInvoicePropChange(doneCode, oldInvoice
.getInvoice_id(), oldInvoice.getInvoice_code(), newInvoice
.getInvoice_id(), newInvoice.getInvoice_code());
// if(!oldInvoice.getDoc_type().equals(newInvoice.getDoc_type())){
// invoiceComponent.updateDocType(docSn, newInvoice.getDoc_type());
// }
this.getBusiParam().setOperateObj(oldInvoice.getInvoice_id()+"=>"+newInvoice.getInvoice_id());
saveAllPublic(doneCode,getBusiParam());
}
public void saveManuallyEditMInvoice(CInvoiceDto oldInvoice,CInvoiceDto newInvoice,String fee_sn) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
//根据发票号查找原发票信息
if(StringHelper.isEmpty(newInvoice.getInvoice_id() ) || StringHelper.isEmpty(newInvoice.getInvoice_code() ) ){
throw new ServicesException("传入的新发票号码或者代码为空!");
}
RInvoice oldRin = null;
if(StringHelper.isNotEmpty(oldInvoice.getInvoice_id()) && StringHelper.isNotEmpty(oldInvoice.getInvoice_code())){
oldRin = invoiceComponent.queryById(oldInvoice.getInvoice_id(), oldInvoice.getInvoice_code());
}
RInvoice newRin = invoiceComponent.queryById(newInvoice.getInvoice_id(), newInvoice.getInvoice_code());
boolean isNewInvoice = false;
//如果不存在,直接入库
if(newRin == null ){
newRin = new RInvoice();
newRin.setInvoice_id(newInvoice.getInvoice_id());
newRin.setInvoice_book_id(newInvoice.getInvoice_code());
newRin.setInvoice_code(newInvoice.getInvoice_code());
newRin.setInvoice_type("2");
newRin.setDepot_id(getOptr().getDept_id());
newRin.setStatus(SystemConstants.INVOICE_STATUS_USE);
newRin.setAmount(0);
newRin.setInvoice_mode("M");
newRin.setFinance_status(SystemConstants.INVOICE_STATUS_IDLE);
newRin.setCreate_time(new Date());
newRin.setInvoice_amount(0);
newRin.setIs_loss(SystemConstants.BOOLEAN_FALSE);
isNewInvoice = true;
}
invoiceComponent.saveManuallyEditMInvoice(newRin,oldRin,fee_sn,isNewInvoice);
saveAllPublic(doneCode,getBusiParam());
}
public Map<String, ?> queryPrintContent(String custId, CDoc doc, String suffix, String invoiceId, String invoiceCode)throws Exception{
Map<String,Object> map = new HashMap<String,Object>();
//查询单据的配置
TBusiDocTemplatefile busiDoc = busiConfigComponent.queryBusiDoc(doc.getDoc_type());
map.put("printType", busiDoc.getPrint_type());
map.put("docType", busiDoc.getDoc_type());
//map.put("data", {});
if(busiDoc.getPrint_type().equals("NOPRINT")&&StringHelper.isNotEmpty(busiDoc.getChange_doc_type())){
map.put("docType", busiDoc.getChange_doc_type());
}
//获取数据,包括单据的模板内容及模板对应的数据
String content = PrintContentConfiguration.getTemplate(suffix + busiDoc.getTemplate_filename());
int balance = 0;//现金余额
List<InvoiceFromDto> list = feeComponent.queryInvoiceByDocSn(doc.getDoc_sn(), invoiceId, invoiceCode);
if(list != null && list.size() > 0){
InvoiceFromDto ifdto = list.get(0);
balance = ifdto.getBalance();
if(balance == 0 ){
balance = acctComponent.queryXJBalanceByCustId(custId);
}
}else{
balance = acctComponent.queryXJBalanceByCustId(custId);
}
Map<String, Object> data = new HashMap<String, Object>();
data.put("doc", doc);
data.put("custid", custId);
data.put("balance", balance);
data.put("invoiceId", invoiceId);
data.put("invoiceCode", invoiceCode);
printComponent.fillData(data,busiDoc.getMethod_name());
//设置数据,返回
map.put("content", content);
map.put("data", data);
return map;
}
public List<PrintItemDto> queryPrintItemByDoc(String docSn, String custType, String invoiceId, String invoiceCode) throws Exception{
return feeComponent.queryPrintitemBySn(docSn,custType, invoiceId, invoiceCode);
}
/* (non-Javadoc)
* @see com.ycsoft.business.service.IDocService#queryPrintItemByDoneCode(java.lang.String)
*/
public List<PrintItemDto> queryPrintItemByDoneCode(String doneCode)
throws Exception {
String genInvioceManual = printComponent.queryTemplateConfig(TemplateConfigDto.Config.GEN_INVOICE_MANUAL.toString());
if (SystemConstants.BOOLEAN_FALSE.equals(genInvioceManual)) {
return printComponent.queryUnPrintItemByDoneCode(doneCode);
} else {
return null;
}
}
/**
* 根据打印编号查询
* @param printitemId
* @return
* @throws Exception
*/
public List<TPrintitem> queryPrintItemById(String printitemId) throws Exception{
List<TPrintitem> printitemList = new ArrayList<TPrintitem>();
TPrintitem printitem = printComponent.queryPrintItemById(printitemId);
if(null != printitem){
printitemList.add(printitem);
}
return printitemList;
}
/**
* 修改打印项
* @param printitem
* @throws Exception
*/
public void editPrintitem(String printitemId,String printitemMame) throws Exception{
TPrintitem printitem = new TPrintitem();
printitem.setPrintitem_id(printitemId);
printitem.setPrintitem_name(printitemMame);
printComponent.editPrintitem(printitem);
}
public Map<String, ?> queryConfigPrintContent(String custId,String[] doneCode)throws Exception{
Map<String,Object> map = new HashMap<String,Object>();
//查询单据的配置
TBusiDocTemplatefile busiDoc = busiConfigComponent.queryBusiDoc(SystemConstants.DOC_TYPE_CONFIG);
//获取数据,包括单据的模板内容及模板对应的数据
String content = PrintContentConfiguration.getTemplate(busiDoc.getTemplate_filename());
Map<String, Object> data = new HashMap<String, Object>();
data.put("custid", custId);
data.put("doneCodes", doneCode);
printComponent.fillData(data,busiDoc.getMethod_name());
//设置数据,返回
map.put("content", content);
map.put("data", data);
return map;
}
public Map<String, ?> queryPrintContent(String custId, String[] doneCode,CDoc doc) throws Exception {
Map<String,Object> map = new HashMap<String,Object>();
//查询单据的配置
TBusiDocTemplatefile busiDoc = busiConfigComponent.queryBusiDoc(doc.getDoc_type());
//获取数据,包括单据的模板内容及模板对应的数据
String content = PrintContentConfiguration.getTemplate(busiDoc.getTemplate_filename());
Map<String, Object> data = new HashMap<String, Object>();
data.put("doc", doc);
data.put("custid", custId);
data.put("doneCodes", doneCode);
printComponent.fillData(data,busiDoc.getMethod_name());
//设置数据,返回
map.put("content", content);
map.put("data", data);
return map;
}
public void savePrintItem(List<MergeFeeFormDto> lst) throws Exception{
Integer doneCode = doneCodeComponent.gDoneCode();
printComponent.saveDoc( lst, getBusiParam().getCust().getCust_id(), doneCode,getBusiParam().getBusiCode());
saveAllPublic(doneCode,getBusiParam());
}
public List<CDoneCodeInfo> queryPrintConfig(String custId,String[] doneCodes)throws Exception{
return printComponent.queryPrintConfig(custId,doneCodes);
}
public List<DocDto> queryUnPrintInvoice(String custId) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
BusiParameter param = getBusiParam();
param.getCust().setCust_id(custId);
printComponent.saveDoc(feeComponent.queryAutoMergeFees(custId), custId, doneCode,BusiCodeConstants.PRINT);
String genInvioceManual = printComponent.queryTemplateConfig(TemplateConfigDto.Config.GEN_INVOICE_MANUAL.toString());
if (SystemConstants.BOOLEAN_TRUE.equals(genInvioceManual)) {
return printComponent.queryInvoiceType(doneCode,custId);
} else{
return printComponent.queryDocInvoice(doneCode);
}
}
/* (non-Javadoc)
* @see com.ycsoft.business.service.IDocService#saveDocItemManual(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
public String saveDocItemManual(String docType, String doneCode,
String custId, String[] docItems) throws Exception {
//删除doneCode对应的doc
// this.printComponent.deleteDoc(doneCode);
//生成新的doc
String docSn = this.printComponent.saveDoc(Integer.parseInt(doneCode),BusiCodeConstants.PRINT, custId, new String[]{docType});
//更新items对应的doc
printComponent.updateDocItem(docItems, docSn);
return docSn;
}
public List<DocDto> queryYHZZPrintInvoice(String custId) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
BusiParameter param = getBusiParam();
param.getCust().setCust_id(custId);
printComponent.saveDoc(feeComponent.queryYHZZAutoMergeFees(custId), custId, doneCode,BusiCodeConstants.PRINT);
return printComponent.queryDocInvoice(doneCode);
}
public List<DocDto> queryUnitUnPrintInvoice(String unitCustId)
throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
BusiParameter param = getBusiParam();
param.getCust().setCust_id(unitCustId);
printComponent.saveDoc(feeComponent.queryAutoMergeUnitFees(unitCustId), unitCustId, doneCode,BusiCodeConstants.PRINT);
List<DocDto> docList = null;
String genInvioceManual = printComponent.queryTemplateConfig(TemplateConfigDto.Config.GEN_INVOICE_MANUAL.toString());
if (SystemConstants.BOOLEAN_TRUE.equals(genInvioceManual)) {
docList = printComponent.queryInvoiceType(doneCode,unitCustId);
} else{
docList = printComponent.queryDocInvoice(doneCode);
}
return docList;
}
public void editInvoiceStatus(String invoiceId,String invoiceCode,String newStatus) throws Exception{
invoiceComponent.editInvoiceStatus(invoiceId,invoiceCode,newStatus);
}
/**
* 根据发票id查询发票详细信息
* @param invoiceId
* @return
* @throws Exception
*/
public InvoiceDto queryInvoiceByInvoiceId(String invoiceId,String invoiceCode)
throws Exception{
return invoiceComponent.queryInvoiceByInvoiceId(invoiceId,invoiceCode);
}
public List<RInvoice> queryInvoiceById(String invoiceId) throws Exception{
return invoiceComponent.queryInvoiceById(invoiceId);
}
public boolean saveInvoice(String invoiceId, String invoiceCode,
List<InvoiceFromDto> invoices) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
int balance = acctComponent.queryXJBalanceByCustId(getBusiParam().getCust().getCust_id());
boolean oldFlag = false;
String docSn = invoices.get(0).getDoc_sn();
List<String> invoiceIdList = CollectionHelper.converValueToList(invoices, "invoice_id");
if(invoiceIdList.contains(invoiceId)){
oldFlag = true;
}
if(BusiCodeConstants.PRINT.equals(getBusiParam().getBusiCode())){
//验证发票是否可用
for (InvoiceFromDto i : invoices) {
invoiceComponent.checkInvoice(i.getInvoice_id(), i.getDoc_type(), SystemConstants.INVOICE_MODE_AUTO);
}
}
//验证能不能跳收据号
boolean flay = invoiceComponent.checkInvoiceOptr(invoiceIdList,getOptr().getOptr_id());
if(!oldFlag){
for (InvoiceFromDto i : invoices) {
printComponent.saveInvoice(doneCode, i, balance);
invoiceComponent.updateInvoiceInfo(i.getInvoice_code(), i .getInvoice_id(), SystemConstants.INVOICE_MODE_AUTO, i .getAmount());
//重载操作员未打印的费用
//List<String> feeSnList = feeComponent.queryUnPrintFeeByOptr(optrId);
//MemoryPrintData.reloadOptrFee(optrId, feeSnList);
}
}
//有原发票 则取消
if (!oldFlag && StringHelper.isNotEmpty(invoiceId)
&& StringHelper.isNotEmpty(invoiceCode)) {
//多张发票重打
if(null != invoices && invoices.size() > 1){
List<InvoiceFromDto> invoiceList = feeComponent.queryOldInvoiceByDocSn(doneCode, docSn);
for(InvoiceFromDto dto : invoiceList){
invoiceComponent.invalidInvoice(doneCode, dto.getInvoice_id(), dto.getInvoice_code());
}
}else{
invoiceComponent.invalidInvoice(doneCode, invoiceId, invoiceCode);
}
}
if(StringHelper.isNotEmpty(invoiceId)){
this.getBusiParam().setOperateObj(invoiceId);
}
if(invoiceIdList!=null&&invoiceIdList.size()>0){
String _ids="";
for(String _id: invoiceIdList ){
_ids+=" "+_id;
}
this.getBusiParam().setOperateObj(_ids);
}
saveAllPublic(doneCode,getBusiParam());
return flay;
}
public CInvoiceDto queryReprintInvoice(String invoiceId, String invoiceCode) throws Exception {
return printComponent.queryReprintInvoice(invoiceId,invoiceCode);
}
public List<DocDto> queryUnPrintUnitPre(String feeSn) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
printComponent.saveDoc(feeComponent.queryAutoMergeFees(new String[]{feeSn}), null, doneCode,BusiCodeConstants.PRINT);
String genInvioceManual = printComponent.queryTemplateConfig(TemplateConfigDto.Config.GEN_INVOICE_MANUAL.toString());
if (SystemConstants.BOOLEAN_TRUE.equals(genInvioceManual)) {
return printComponent.queryInvoiceType(doneCode,"");
} else{
return printComponent.queryUnPrintUnitPre(feeSn);
}
}
public List<DocDto> queryFeeSnAll(String[] feeSn) throws Exception {
Integer doneCode = doneCodeComponent.gDoneCode();
printComponent.saveDoc(feeComponent.queryAutoMergeFees(feeSn), null, doneCode,BusiCodeConstants.PRINT);
return printComponent.queryDocInvoice(doneCode);
}
public void saveConfigPrint(String[] doneCode) throws Exception {
printComponent.saveConfigPrint(doneCode);
}
/**
* 查询业务单据
* @param custId
* @return
* @throws Exception
*/
public Map<String, Object> queryServiceDoc(String custId) throws Exception {
BusiDocPrintConfigDto cfg = printComponent.queryServiceDocFile();
List<BusiDocPrintItemDto> itemsPrint = new ArrayList<BusiDocPrintItemDto>();
String split=",";
String doneCodes = "";
//获得打印业务汇总
List<BusiDocPrintItemDto> itemBusi = printComponent.queryServiceSubDocBusiCode(custId,"");
List<BusiDocPrintItemDto> itemBusiF = new ArrayList<BusiDocPrintItemDto>();
BusiDocPrintItemDto pitem = null;
for(int i=0;i<itemBusi.size();i++){
BusiDocPrintItemDto bp = itemBusi.get(i);
if(StringHelper.isNotEmpty(bp.getCondition()) && "T".equals(bp.getBusi_code_span())){
//拆分条件
String[] condtionList = bp.getCondition().split(";");
bp.setCondition(condtionList[0]);
for(int j=0;j<condtionList.length-1;j++){
pitem = new BusiDocPrintItemDto();
BeanUtils.copyProperties(pitem,bp);
bp.setCondition(condtionList[j+1]);
pitem.setIndex(i+j+1);
itemBusiF.add(pitem);
}
}
};
for(BusiDocPrintItemDto bp : itemBusiF){
itemBusi.add(bp.getIndex(), bp);
}
List<String> doneCodeList = new ArrayList<String>();
for(BusiDocPrintItemDto bp : itemBusi){
//如果不进行合并
if("F".equals(bp.getBusi_code_span())){
List<BusiDocPrintItemDto> items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),"","");
for(BusiDocPrintItemDto item : items){
if(doneCodeList.contains(item.getDone_code())){
continue;
}
doneCodeList.add(item.getDone_code());
item.setInfo(item.getInfo()+item.getInfo1()+item.getInfo2()+item.getInfo3()+item.getInfo4()+item.getInfo5()+item.getInfo6()+item.getInfo7()+item.getInfo8()+item.getInfo9()+item.getInfo10());
itemsPrint.add(item);
doneCodes += item.getDone_code() + split;
}
}
//进行合并
if("T".equals(bp.getBusi_code_span())){
List<BusiDocPrintItemDto> items= new ArrayList<BusiDocPrintItemDto>();
//按用户分组无条件
if("USER".equals(bp.getGroup_column())&& StringHelper.isEmpty(bp.getCondition())){
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),"","");
}else if("USER".equals(bp.getGroup_column())){//按用户分组有条件
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),bp.getCondition(),"");
}
//按客户分组无条件
if("CUST".equals(bp.getGroup_column())&& StringHelper.isEmpty(bp.getCondition())){
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,"","","");
}else if("CUST".equals(bp.getGroup_column())){ //按客户分组有条件
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,"",bp.getCondition(),"");
}
//打印公共部分
BusiDocPrintItemDto itemHeader= new BusiDocPrintItemDto();
//合并打印项
String info="[";
int busi_count=0;
for(BusiDocPrintItemDto item : items){
if(doneCodeList.contains(item.getDone_code())){
continue;
}
doneCodeList.add(item.getDone_code());
item.setInfo(item.getInfo()+item.getInfo1()+item.getInfo2()+item.getInfo3()+item.getInfo4()+item.getInfo5()+item.getInfo6()+item.getInfo7()+item.getInfo8()+item.getInfo9()+item.getInfo10());
info+=item.getInfo()+",";
doneCodes += item.getDone_code()+",";
busi_count++;
}
if(null!=items && items.size()>0){
info = info.substring(0,info.length()-1);
info+="]";
//组装打印信息
BeanUtils.copyProperties(itemHeader,items.get(0));
String headInfo = itemHeader.getInfo();
if(StringHelper.isNotEmpty(headInfo)){
headInfo = headInfo.substring(0,headInfo.length()-1);
}
info = headInfo+split+getInfo("busi_count",busi_count+"")+split+"\"items\":"+info+"}";
itemHeader.setInfo(info);
itemsPrint.add(itemHeader);
}
}
}
//get tpl
cfg.setTpl(getTemplateFile(cfg.getTemplate_filename()));
// BusiDocPrintItemDto orderProdItem = null;
// String orderProdInfo = "[";
for (BusiDocPrintItemDto item : itemsPrint) {
if(item.getBusi_code().equals("1015")){
// orderProdItem = item;
// orderProdInfo +=item.getInfo();
}
item.setProtocol_desc(printComponent.queryProtocolInfo(item.getDone_code()));
item.setTpl(getTemplateFile(item.getTemplate_filename()));
}
// if(null!=orderProdItem){
// orderProdItem.setInfo(orderProdInfo);
// }
//付费信息
List<PrintFeeitemDto> fees = printComponent.queryFeeItems(custId,"");
//总金额
Integer total = 0;
List<Map<String, Object>> feeList = new ArrayList<Map<String, Object>>();
Map<String, List<PrintFeeitemDto>> mapByDevAndActItem = new HashMap<String, List<PrintFeeitemDto>>();
for (PrintFeeitemDto dto : fees) {
String stb_id = dto.getStb_id();
stb_id = StringHelper.isEmpty(stb_id)?"":stb_id;
String card_id = dto.getCard_id();
card_id = StringHelper.isEmpty(card_id)?"":card_id;
String modem_mac = dto.getModem_mac();
modem_mac = StringHelper.isEmpty(modem_mac)?"":modem_mac;
String acctitem_id = dto.getAcctitem_id();
String key = "s_"+stb_id + "c_" + card_id + "m_" + modem_mac +"item_" + acctitem_id ;
List<PrintFeeitemDto> list = mapByDevAndActItem.get(key);
if(list==null){
list = new ArrayList<PrintFeeitemDto>();
}
list.add(dto);
mapByDevAndActItem.put(key, list);
String doneCode = dto.getDone_code().toString();
if(!doneCodeList.contains(doneCode)){
doneCodeList.add(doneCode);
doneCodes += doneCode+",";
}
total += dto.getReal_pay();
}
for(String key : mapByDevAndActItem.keySet()){
List<PrintFeeitemDto> list = mapByDevAndActItem.get(key);
if(CollectionHelper.isEmpty(list)){
continue;
}
PrintFeeitemDto dto = list.get(0);
String invalidDateStr = DateHelper.format(dto.getInvalid_date(), DateHelper.FORMAT_YMD);
Map<String, Object> eachItem = new HashMap<String, Object>();
eachItem.put("invalid_date", invalidDateStr);
eachItem.put("list", list);
feeList.add(eachItem);
}
//设置参数
Map<String, Object> context = new HashMap<String, Object>();
context.put("print", cfg);
context.put("items", itemsPrint);
// context.put("fees", fees);//fees
context.put("fees", feeList);//fees
context.put("feeTotal", total );
context.put("today", new SimpleDateFormat("yyyy年MM月dd日 HH:mm").format(new Date()));
context.put("loginName", this.getBusiParam().getOptr().getLogin_name());
context.put("optrDeptName", this.getBusiParam().getOptr().getDept_name());
String docSn = printComponent.gDocSn();
context.put("docSn", docSn);
context.put("id", DateHelper.format(new Date(),DateHelper.FORMAT_YMD_STR)+docSn);
if(doneCodes.length()>1)
context.put("doneCodes", doneCodes.substring(0,doneCodes.length()-1));
return context;
}
/**
* 查询 重打业务单据
* @param custId
* @return
* @throws Exception
*/
public Map<String, Object> queryServiceRepeatDoc(String custId,String docSn) throws Exception {
BusiDocPrintConfigDto cfg = printComponent.queryServiceDocFile();
CDoc doc = printComponent.queryDocByDocSn(docSn).get(0);
List<BusiDocPrintItemDto> itemsPrint = new ArrayList<BusiDocPrintItemDto>();
String split=",";
//获得打印业务汇总
List<BusiDocPrintItemDto> itemBusi = printComponent.queryServiceSubDocBusiCode(custId,docSn);
List<BusiDocPrintItemDto> itemBusiF = new ArrayList<BusiDocPrintItemDto>();
BusiDocPrintItemDto pitem = null;
for(int i=0;i<itemBusi.size();i++){
BusiDocPrintItemDto bp = itemBusi.get(i);
if(StringHelper.isNotEmpty(bp.getCondition()) && "T".equals(bp.getBusi_code_span())){
//拆分条件
String[] condtionList = bp.getCondition().split(";");
bp.setCondition(condtionList[0]);
for(int j=0;j<condtionList.length-1;j++){
pitem = new BusiDocPrintItemDto();
BeanUtils.copyProperties(bp, pitem);
bp.setCondition(condtionList[j+1]);
pitem.setIndex(i+j+1);
itemBusiF.add(pitem);
}
}
};
List<String> doneCodeList = new ArrayList<String>();
for(BusiDocPrintItemDto bp : itemBusiF){
itemBusi.add(bp.getIndex(), bp);
}
for(BusiDocPrintItemDto bp : itemBusi){
//如果不进行合并
if("F".equals(bp.getBusi_code_span())){
List<BusiDocPrintItemDto> items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),"",docSn);
for(BusiDocPrintItemDto item : items){
if(doneCodeList.contains(item.getDone_code())){
continue;
}
doneCodeList.add(item.getDone_code());
item.setInfo(item.getInfo()+item.getInfo1()+item.getInfo2()+item.getInfo3()+item.getInfo4()+item.getInfo5()+item.getInfo6()+item.getInfo7()+item.getInfo8()+item.getInfo9()+item.getInfo10());
itemsPrint.add(item);
}
}
//进行合并
else if("T".equals(bp.getBusi_code_span())){
List<BusiDocPrintItemDto> items=null;
//按用户分组无条件
if("USER".equals(bp.getGroup_column())&& StringHelper.isEmpty(bp.getCondition())){
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),"",docSn);
}else if("USER".equals(bp.getGroup_column())){//按用户分组有条件
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,bp.getUser_id(),bp.getCondition(),docSn);
}
//按客户分组无条件
if("CUST".equals(bp.getGroup_column())&& StringHelper.isEmpty(bp.getCondition())){
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,"","",docSn);
}else if("CUST".equals(bp.getGroup_column())){ //按客户分组有条件
items = printComponent.queryServiceSubDocFile(bp.getBusi_code(),custId,"",bp.getCondition(),docSn);
}
//打印公共部分
BusiDocPrintItemDto itemHeader= new BusiDocPrintItemDto();
//合并打印项
String info="[";
int busi_count=0;
for(BusiDocPrintItemDto item : items){
if(doneCodeList.contains(item.getDone_code())){
continue;
}
doneCodeList.add(item.getDone_code());
item.setInfo(item.getInfo()+item.getInfo1()+item.getInfo2()+item.getInfo3()+item.getInfo4()+item.getInfo5()+item.getInfo6()+item.getInfo7()+item.getInfo8()+item.getInfo9()+item.getInfo10());
info+=item.getInfo()+",";
busi_count++;
}
if(null!=items && items.size()>0){
info = info.substring(0,info.length()-1);
info+="]";
//组装打印信息
BeanUtils.copyProperties( itemHeader,items.get(0));
String headInfo = itemHeader.getInfo();
if(StringHelper.isNotEmpty(headInfo) &&headInfo.length()>0){
headInfo = headInfo.substring(0,headInfo.length()-1);
}else{
headInfo = "";
}
info = headInfo+split+getInfo("busi_count",busi_count+"")+split+"\"items\":"+info+"}";
itemHeader.setInfo(info);
itemsPrint.add(itemHeader);
}
}
}
//get tpl
cfg.setTpl(getTemplateFile(cfg.getTemplate_filename()));
// BusiDocPrintItemDto orderProdItem = null;
// String orderProdInfo = "[";
for (BusiDocPrintItemDto item : itemsPrint) {
if("1015".equals(item.getBusi_code())){
// orderProdItem = item;
// orderProdInfo +=item.getInfo();
}
item.setProtocol_desc(printComponent.queryProtocolInfo(item.getDone_code()));
item.setTpl(getTemplateFile(item.getTemplate_filename()));
}
// if(null!=orderProdItem){
// orderProdItem.setInfo(orderProdInfo);
// }
//付费信息
List<PrintFeeitemDto> fees = printComponent.queryFeeItems(custId,docSn);
//总金额
Integer total = 0;
List<Map<String, Object>> feeList = new ArrayList<Map<String, Object>>();
Map<String, List<PrintFeeitemDto>> mapByDevAndActItem = new HashMap<String, List<PrintFeeitemDto>>();
for (PrintFeeitemDto dto : fees) {
String stb_id = dto.getStb_id();
stb_id = StringHelper.isEmpty(stb_id)?"":stb_id;
String card_id = dto.getCard_id();
card_id = StringHelper.isEmpty(card_id)?"":card_id;
String modem_mac = dto.getModem_mac();
modem_mac = StringHelper.isEmpty(modem_mac)?"":modem_mac;
String acctitem_id = dto.getAcctitem_id();
String key = "s_"+stb_id + "c_" + card_id + "m_" + modem_mac +"item_" + acctitem_id ;
List<PrintFeeitemDto> list = mapByDevAndActItem.get(key);
if(list==null){
list = new ArrayList<PrintFeeitemDto>();
}
list.add(dto);
mapByDevAndActItem.put(key, list);
total += dto.getReal_pay();
}
for(String key : mapByDevAndActItem.keySet()){
List<PrintFeeitemDto> list = mapByDevAndActItem.get(key);
if(CollectionHelper.isEmpty(list)){
continue;
}
PrintFeeitemDto dto = list.get(0);
String invalidDateStr = DateHelper.format(dto.getInvalid_date(), DateHelper.FORMAT_YMD);
Map<String, Object> eachItem = new HashMap<String, Object>();
eachItem.put("invalid_date", invalidDateStr);
eachItem.put("list", list);
feeList.add(eachItem);
}
//设置参数
Map<String, Object> context = new HashMap<String, Object>();
context.put("print", cfg);
context.put("items", itemsPrint);
context.put("fees", feeList);
context.put("feeTotal", total );
context.put("today", new SimpleDateFormat("yyyy年MM月dd日 HH:mm").format(doc.getCreate_time()));
SOptr optr = userComponent.queryOptrById(doc.getOptr_id());
context.put("loginName", optr.getLogin_name());
context.put("optrDeptName", getOptr().getDept_name());
context.put("id", DateHelper.format(doc.getCreate_time(),DateHelper.FORMAT_YMD)+docSn);
return context;
}
private String getTemplateFile(String fileName)throws Exception{
String context = PrintContentConfiguration.getTemplate(fileName);
if(context == null){
throw new IllegalArgumentException("[" + fileName + "]打印文件在内存中不存在!");
}
return context;
}
public String getInfo(String name , String value){
return "\""+name+"\""+":"+"\""+value+"\"";
}
/**
* @param busiConfigComponent the busiConfigComponent to set
*/
public void setBusiConfigComponent(BusiConfigComponent busiConfigComponent) {
this.busiConfigComponent = busiConfigComponent;
}
/**
* @param printComponent the printComponent to set
*/
public void setPrintComponent(PrintComponent printComponent) {
this.printComponent = printComponent;
}
}