/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.content.particular.service;
import java.io.File;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.ewcms.content.particular.BaseException;
import com.ewcms.content.particular.dao.ApprovalRecordDAO;
import com.ewcms.content.particular.dao.IndustryCodeDAO;
import com.ewcms.content.particular.dao.ProjectArticleDAO;
import com.ewcms.content.particular.dao.ProjectBasicDAO;
import com.ewcms.content.particular.dao.ZoningCodeDAO;
import com.ewcms.content.particular.model.ApprovalRecord;
import com.ewcms.content.particular.model.IndustryCode;
import com.ewcms.content.particular.model.ProjectArticle;
import com.ewcms.content.particular.model.ProjectBasic;
import com.ewcms.content.particular.model.ProjectBasic.Nature;
import com.ewcms.content.particular.model.ProjectBasic.Shape;
import com.ewcms.content.particular.model.ZoningCode;
import com.ewcms.content.particular.util.XmlConvert;
import com.ewcms.core.site.SiteFacable;
import com.ewcms.core.site.model.Organ;
@Service
public class ProjectBasicService implements ProjectBasicServiceable {
@Autowired
private ProjectArticleDAO projectArticleDAO;
@Autowired
private ProjectBasicDAO projectBasicDAO;
@Autowired
private ZoningCodeDAO zoningCodeDAO;
@Autowired
private ApprovalRecordDAO approvalRecordDAO;
@Autowired
private IndustryCodeDAO industryCodeDAO;
@Autowired
private SiteFacable siteFac;
@Override
public Long addProjectBasic(ProjectBasic projectBasic) throws BaseException {
String code = generateCode(projectBasic);
ProjectBasic entity = projectBasicDAO.findProjectBasicByCode(code);
if (entity != null) throw new BaseException("已存在相同的项目编号", "已存在相同的项目编号");
projectBasic.setCode(code);
setZoningCode(projectBasic);
setApprovalRecord(projectBasic);
setIndustryCode(projectBasic);
setOrgan(projectBasic);
projectBasicDAO.persist(projectBasic);
return projectBasic.getId();
}
private String generateCode(ProjectBasic projectBasic){
String zoningCode_code = projectBasic.getZoningCode().getCode();
String organizationCode_code = projectBasic.getOrganizationCode();
Calendar ca = Calendar.getInstance();
ca.setTime(projectBasic.getBuildTime());
String year = String.valueOf(ca.get(Calendar.YEAR));
String unitId = projectBasic.getUnitId();
String code = zoningCode_code + organizationCode_code + year + unitId;
return code;
}
@Override
public Long updProjectBasic(ProjectBasic projectBasic) throws BaseException {
String code_new = generateCode(projectBasic);
String code_old = projectBasic.getCode();
projectBasic.setCode(code_new);
setZoningCode(projectBasic);
setApprovalRecord(projectBasic);
setIndustryCode(projectBasic);
setOrgan(projectBasic);
projectBasic.setRelease(false);
if (code_new.equals(code_old)){
projectBasicDAO.merge(projectBasic);
}else{
ProjectBasic entity = projectBasicDAO.findProjectBasicByCode(code_new);
if (entity != null) throw new BaseException("已存在相同的项目编号", "已存在相同的项目编号");
List<ProjectArticle> articles = projectBasicDAO.findProjectArticleByBasicId(code_old);
if (articles != null && !articles.isEmpty()){
for (ProjectArticle article : articles){
article.setProjectBasic(projectBasic);
projectArticleDAO.merge(article);
}
}else{
projectBasicDAO.merge(projectBasic);
}
}
return projectBasic.getId();
}
private void setZoningCode(ProjectBasic projectBasic){
String zoningCode_code = projectBasic.getZoningCode().getCode();
Assert.notNull(zoningCode_code);
ZoningCode zoningCode = zoningCodeDAO.findZoningCodeByCode(zoningCode_code);
Assert.notNull(zoningCode);
projectBasic.setZoningCode(zoningCode);
}
private void setApprovalRecord(ProjectBasic projectBasic){
String approvalRecord_code = projectBasic.getApprovalRecord().getCode();
ApprovalRecord approvalRecord = null;
if (approvalRecord_code != null && approvalRecord_code.length() > 0){
approvalRecord = approvalRecordDAO.findApprovalRecordByCode(approvalRecord_code);
}
projectBasic.setApprovalRecord(approvalRecord);
}
private void setIndustryCode(ProjectBasic projectBasic){
String industryCode_code = projectBasic.getIndustryCode().getCode();
Assert.notNull(industryCode_code);
IndustryCode industryCode = industryCodeDAO.findIndustryCodeByCode(industryCode_code);
Assert.notNull(industryCode);
projectBasic.setIndustryCode(industryCode);
}
private void setOrgan(ProjectBasic projectBasic){
Integer organId = projectBasic.getOrgan().getId();
Organ organ = siteFac.getOrgan(organId);
projectBasic.setOrgan(organ);
}
@Override
public void delProjectBasic(Long id) {
projectBasicDAO.removeByPK(id);
}
@Override
public ProjectBasic findProjectBasicById(Long id) {
return projectBasicDAO.get(id);
}
@Override
public List<ProjectBasic> findProjectBasicByPageAndRows(Integer page, Integer rows, String name){
return projectBasicDAO.findProjectBasicByPageAndRows(page, rows, name);
}
@Override
public Long findProjectBasicTotal(String name){
return projectBasicDAO.findProjectBasicTotal(name);
}
@Override
public void addProjectBasicByImportXml(File file, Integer channelId, String fileType){
List<Map<String,Object>> list = XmlConvert.importXML(file, fileType);
if (list.isEmpty()) return;
for (Map<String, Object> map : list){
ProjectBasic projectBasic = new ProjectBasic();
String zoningCode_code = (String) map.get("行政区划代码");
ZoningCode zoningCode = zoningCodeDAO.findZoningCodeByCode(zoningCode_code);
if (zoningCode == null) continue;
projectBasic.setZoningCode(zoningCode);
String organizationCode = (String) map.get("组织机构代码");
projectBasic.setOrganizationCode(organizationCode);
String buildTime = (String) map.get("建设时间");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
projectBasic.setBuildTime(dateFormat.parse(buildTime));
} catch (ParseException e) {
continue;
}
String unitId = (String) map.get("建设单位项目编号");
projectBasic.setUnitId(unitId);
String generateCode = generateCode(projectBasic);
projectBasic.setCode(generateCode);
ProjectBasic projectBasic_db = projectBasicDAO.findProjectBasicByCode(generateCode);
if (projectBasic_db != null){
projectBasic.setId(projectBasic_db.getId());
projectBasic.setOrgan(projectBasic_db.getOrgan());
}
String bildNature = (String) map.get("建设性质");
for (Nature nature : Nature.values()){
if (nature.getDescription().trim().equals(bildNature.trim())){
projectBasic.setBildNature(nature);
break;
}
}
String industryCode_code = (String) map.get("行业编码");
IndustryCode industryCode = industryCodeDAO.findIndustryCodeByCode(industryCode_code);
if (industryCode == null) continue;
projectBasic.setIndustryCode(industryCode);
String approvalRecord_code = (String) map.get("审批备案机关编号");
ApprovalRecord approvalRecord = approvalRecordDAO.findApprovalRecordByCode(approvalRecord_code);
projectBasic.setApprovalRecord(approvalRecord);
projectBasic.setChannelId(channelId);
String name = (String) map.get("项目名称");
projectBasic.setName(name);
String investmentScale = (String) map.get("投资规模");
projectBasic.setInvestmentScale(investmentScale);
String overview = (String) map.get("项目概况");
projectBasic.setOverview(overview);
String buildUnit= (String) map.get("建设单位");
projectBasic.setBuildUnit(buildUnit);
String unitPhone= (String) map.get("建设单位联系电话");
projectBasic.setUnitPhone(unitPhone);
String unitAddress = (String) map.get("建设单位地址");
projectBasic.setUnitAddress(unitAddress);
String category = (String) map.get("项目类别");
projectBasic.setCategory(category);
String address = (String) map.get("项目地址");
projectBasic.setAddress(address);
String contact = (String) map.get("项目联系人");
projectBasic.setContact(contact);
String phone = (String) map.get("项目联系人电话");
projectBasic.setPhone(phone);
String email = (String) map.get("项目联系人电子邮箱");
projectBasic.setEmail(email);
String shape = (String) map.get("形式");
if (shape != null){
for (Shape value : Shape.values()){
if (value.getDescription().trim().equals(shape.trim())){
projectBasic.setShape(value);
break;
}
}
}
String documentId = (String) map.get("文号");
projectBasic.setDocumentId(documentId);
String participation = (String) map.get("参建单位");
projectBasic.setParticipation(participation);
if (projectBasic.getId() == null){
projectBasicDAO.persist(projectBasic);
}else{
projectBasicDAO.merge(projectBasic);
}
}
}
public Document exportXml(List<Long> projectBasicIds){
Document document = DocumentHelper.createDocument();
Element root = document.addElement("MetaDatas");
Element metaViewData = root.addElement("MetaViewData");
if (projectBasicIds.isEmpty()) return document;
for (Long projectBasicId : projectBasicIds){
ProjectBasic projectBasic = projectBasicDAO.get(projectBasicId);
Element projects = metaViewData.addElement("PROPERTIES");
Element code = projects.addElement("项目编号");
code.addText(projectBasic.getCode() == null ? "" : projectBasic.getCode());
Element name = projects.addElement("项目名称");
name.addText(projectBasic.getName() == null ? "" : projectBasic.getName());
Element buildTime = projects.addElement("建设时间");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
if (projectBasic.getBuildTime() != null){
buildTime.addText(dateFormat.format(projectBasic.getBuildTime()));
}else{
buildTime.addText("");
}
Element investmentScale = projects.addElement("投资规模");
investmentScale.addText(projectBasic.getInvestmentScale() == null ? "" : projectBasic.getInvestmentScale());
Element overview = projects.addElement("项目概况");
overview.addText(projectBasic.getOverview() == null ? "" : projectBasic.getOverview());
Element buildUnit= projects.addElement("建设单位");
buildUnit.addText(projectBasic.getBuildUnit() == null ? "" : projectBasic.getBuildUnit());
Element unitPhone= projects.addElement("建设单位联系电话");
unitPhone.addText(projectBasic.getUnitPhone() == null ? "" : projectBasic.getUnitPhone());
Element unitAddress = projects.addElement("建设单位地址");
unitAddress.addText(projectBasic.getUnitAddress() == null ? "" : projectBasic.getUnitAddress());
Element zoningCode_code= projects.addElement("行政区划代码");
if (projectBasic.getZoningCode() != null)
zoningCode_code.addText(projectBasic.getZoningCode().getCode() == null ? "" : projectBasic.getZoningCode().getCode());
else
zoningCode_code.addText("");
Element organizationCode = projects.addElement("组织机构代码");
organizationCode.addText(projectBasic.getOrganizationCode() == null ? "" : projectBasic.getOrganizationCode());
Element industryCode_code = projects.addElement("行业编码");
if (projectBasic.getIndustryCode() != null)
industryCode_code.addText(projectBasic.getIndustryCode().getCode() == null ? "" : projectBasic.getIndustryCode().getCode());
else
industryCode_code.addText("");
Element category = projects.addElement("项目类别");
category.addText(projectBasic.getCategory() == null ? "" : projectBasic.getCategory());
Element unitId = projects.addElement("建设单位项目编号");
unitId.addText(projectBasic.getUnitId() == null ? "" : projectBasic.getUnitId());
Element approvalRecord_code = projects.addElement("审批备案机关编号");
if (projectBasic.getApprovalRecord() != null)
approvalRecord_code.addText(projectBasic.getApprovalRecord().getCode() == null ? "" : projectBasic.getApprovalRecord().getCode());
else
approvalRecord_code.addText("");
Element address = projects.addElement("项目地址");
address.addText(projectBasic.getAddress() == null ? "" : projectBasic.getAddress());
Element bildNature = projects.addElement("建设性质");
if (projectBasic.getBildNature() != null)
bildNature.addText(projectBasic.getBildNature().getDescription() == null ? "" : projectBasic.getBildNature().getDescription());
else
bildNature.addText("");
Element contact = projects.addElement("项目联系人");
contact.addText(projectBasic.getContact() == null ? "" : projectBasic.getContact());
Element phone = projects.addElement("项目联系人电话");
phone.addText(projectBasic.getPhone() == null ? "" : projectBasic.getPhone());
Element email = projects.addElement("项目联系人电子邮箱");
email.addText(projectBasic.getEmail() == null ? "" : projectBasic.getEmail());
}
return document;
}
@Override
public void pubProjectBasic(List<Long> projectBasicIds) {
if (projectBasicIds.isEmpty()) return;
for (Long projectBasicId : projectBasicIds){
ProjectBasic projectBasic = projectBasicDAO.get(projectBasicId);
if (projectBasic.getRelease() || projectBasic.getOrgan() == null) continue;
projectBasic.setRelease(true);
projectBasicDAO.merge(projectBasic);
}
}
@Override
public void unPubProjectBasic(List<Long> projectBasicIds){
if (projectBasicIds.isEmpty()) return;
for (Long projectBasicId : projectBasicIds){
ProjectBasic projectBasic = projectBasicDAO.get(projectBasicId);
if (!projectBasic.getRelease()) continue;
projectBasic.setRelease(false);
projectBasicDAO.merge(projectBasic);
}
}
}