package com.ycsoft.sysmanager.component.config;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.config.TAcctitemToProd;
import com.ycsoft.beans.config.TBusiDoc;
import com.ycsoft.beans.config.TInvoicePrintitem;
import com.ycsoft.beans.config.TPrintitem;
import com.ycsoft.beans.config.TPublicAcctitem;
import com.ycsoft.beans.prod.PProd;
import com.ycsoft.business.dao.config.TAcctitemToProdDao;
import com.ycsoft.business.dao.config.TInvoicePrintitemDao;
import com.ycsoft.business.dao.config.TPrintitemDao;
import com.ycsoft.business.dao.config.TPublicAcctitemDao;
import com.ycsoft.business.dao.config.TTemplateDao;
import com.ycsoft.business.dao.prod.PProdDao;
import com.ycsoft.commons.abstracts.BaseComponent;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.exception.ComponentException;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.commons.store.TemplateConfig;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.sysmanager.dto.config.PublicAcctItemDto;
import com.ycsoft.sysmanager.web.commons.interceptor.WebOptr;
@Component
public class PubAcctItemComponent extends BaseComponent {
private TPrintitemDao tPrintitemDao;
private TPublicAcctitemDao tPublicAcctitemDao;
private TAcctitemToProdDao tAcctitemToProdDao;
private PProdDao pProdDao;
private TInvoicePrintitemDao tInvoicePrintitemDao;
private TTemplateDao tTemplateDao;
/**
* 查询公用账目信息
* @return
* @throws Exception
*/
public List<PublicAcctItemDto> queryAllPubAcctItems() throws Exception{
List<TPublicAcctitem> acctItemList = tPublicAcctitemDao.queyrAll();
List<TPrintitem> printItemList = tPrintitemDao.findAll();
Map<String,TPrintitem> printMap = CollectionHelper.converToMapSingle(printItemList, "printitem_id");
List<PublicAcctItemDto> resultList = new ArrayList<PublicAcctItemDto>();
for(TPublicAcctitem acctItem : acctItemList){
PublicAcctItemDto pubAcctItemDto = new PublicAcctItemDto();
BeanUtils.copyProperties(acctItem, pubAcctItemDto);
//赋值打印名称
TPrintitem print = printMap.get(acctItem.getPrintitem_id());
if(print != null){
pubAcctItemDto.setPrintitem_name(print.getPrintitem_name());
}
//赋值产品ID和名称,多个值以逗号隔开
List<TAcctitemToProd> AcctToPList = tAcctitemToProdDao.queryById(acctItem.getAcctitem_id());
String prodIds = "";
String prodNames = "";
for(int i=0;i<AcctToPList.size();i++){
if(i != AcctToPList.size() -1){
prodIds = StringHelper.append(prodIds,AcctToPList.get(i).getProd_id(),",");
prodNames = StringHelper.append(prodNames,AcctToPList.get(i).getProd_name(),",");
}else{
prodIds = StringHelper.append(prodIds,AcctToPList.get(i).getProd_id());
prodNames = StringHelper.append(prodNames,AcctToPList.get(i).getProd_name());
}
}
pubAcctItemDto.setProdIds(prodIds);
pubAcctItemDto.setProdNames(prodNames);
resultList.add(pubAcctItemDto);
}
return resultList;
}
/**
* 查询所有产品
* @return
* @throws Exception
*/
public List<PProd> queryAllProds() throws Exception{
return pProdDao.findAll();
}
/**
* 查询所有打印项
* @return
* @throws Exception
*/
public List<TPrintitem> queryAllPrintitems() throws Exception{
return tPrintitemDao.findAll();
}
/**
* 保存或修改账目
* @param publicAcctitem
* @param prodIds
* @throws Exception
*/
public void savePublicAcctItem(TPublicAcctitem publicAcctitem,String[] prodIds) throws Exception{
if(StringHelper.isNotEmpty(publicAcctitem.getAcctitem_id())){//修改
tPublicAcctitemDao.update(publicAcctitem);
}else{//保存
publicAcctitem.setAcctitem_id(tPublicAcctitemDao.getAcctItemdId());
publicAcctitem.setAcctitem_type(SystemConstants.ACCT_TYPE_SPEC);
tPublicAcctitemDao.save(publicAcctitem);
}
String acctItemId = publicAcctitem.getAcctitem_id();
tAcctitemToProdDao.deleteById(acctItemId);
for (String element : prodIds) {
TAcctitemToProd entity = new TAcctitemToProd();
entity.setAcctitem_id(acctItemId);
entity.setProd_id(element);
tAcctitemToProdDao.save(entity);
}
}
/**
* 保存打印项
* @return
* @throws Exception
*/
public void savePrintItem(String printitemName,List<TBusiDoc> docList) throws Exception{
TPrintitem print = new TPrintitem();
print.setPrintitem_id(getPrintItemId());
print.setPrintitem_name(printitemName);
tPrintitemDao.save(print);
List<TInvoicePrintitem> list = new ArrayList<TInvoicePrintitem>();
String id = tTemplateDao.getTemplateId(WebOptr
.getOptr().getCounty_id(), TemplateConfig.Template.INVOICE
.toString());
for(TBusiDoc dto:docList){
TInvoicePrintitem invoicePrintitem = new TInvoicePrintitem();
invoicePrintitem.setTemplate_id(id);
invoicePrintitem.setPrintitem_id(print.getPrintitem_id());
invoicePrintitem.setDoc_type(dto.getDoc_type());
list.add(invoicePrintitem);
}
tInvoicePrintitemDao.save(list.toArray(new TInvoicePrintitem[list.size()]));
}
private String getPrintItemId() throws JDBCException{
return tPrintitemDao.findSequence().toString();
}
public TPrintitemDao getTPrintitemDao() {
return tPrintitemDao;
}
public void setTPrintitemDao(TPrintitemDao printitemDao) {
tPrintitemDao = printitemDao;
}
public TPublicAcctitemDao getTPublicAcctitemDao() {
return tPublicAcctitemDao;
}
public void setTPublicAcctitemDao(TPublicAcctitemDao publicAcctitemDao) {
tPublicAcctitemDao = publicAcctitemDao;
}
public TAcctitemToProdDao getTAcctitemToProdDao() {
return tAcctitemToProdDao;
}
public void setTAcctitemToProdDao(TAcctitemToProdDao acctitemToProdDao) {
tAcctitemToProdDao = acctitemToProdDao;
}
public PProdDao getPProdDao() {
return pProdDao;
}
public void setPProdDao(PProdDao prodDao) {
pProdDao = prodDao;
}
public void setTInvoicePrintitemDao(TInvoicePrintitemDao invoicePrintitemDao) {
tInvoicePrintitemDao = invoicePrintitemDao;
}
/**
* @param templateDao the tTemplateDao to set
*/
public void setTTemplateDao(TTemplateDao templateDao) {
tTemplateDao = templateDao;
}
}