package jp.agentec.sinaburocast.service; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; import javax.annotation.Resource; import jp.agentec.sinaburocast.action.admin.member.MemberSearchAction; import jp.agentec.sinaburocast.common.SinaburoConstant; import jp.agentec.sinaburocast.csv.OrganizationCsv; import jp.agentec.sinaburocast.dto.OrganizationDto; import jp.agentec.sinaburocast.dxo.OrganizationDxo; import jp.agentec.sinaburocast.entity.AdminUser; import jp.agentec.sinaburocast.entity.Organization; import jp.agentec.sinaburocast.entity.PointDonation; import jp.agentec.sinaburocast.form.admin.support.OrganizationSearchForm; import org.apache.velocity.tools.generic.DateTool; import org.seasar.framework.beans.util.Beans; import org.seasar.framework.container.annotation.tiger.Component; import org.seasar.framework.container.annotation.tiger.InstanceType; import org.seasar.framework.util.StringUtil; @Component(instance=InstanceType.SINGLETON) public class OrganizationService extends AbstractService<Organization> { public static final String ID_SEQ_NAME = "organization_id_seq"; public PointDonationService pointDonationService; public MemberService memberService; public EnqueteService enqueteService; @Resource public OrganizationDxo organizationDxo; /** * IDを発行して、登録する。 */ public int insertOrganization(Organization organization, String insId) { organization.organizationId= getSeqNextVal(Integer.class, ID_SEQ_NAME); return super.insert(organization, insId); } public Organization findById(Integer organizationId) { return select().id(organizationId).getSingleResult(); } public List<Organization> findAllOrderById() { return select().orderBy("organizationId asc").getResultList(); } public List<Organization> findAllOrderByNo() { return select().orderBy("organizationNo asc").getResultList(); } /** * 団体一覧を検索する。 * @param organizationSearchForm * @return */ public ArrayList<OrganizationDto> findAllByPaging(OrganizationSearchForm organizationSearchForm) { // 件数取得 Long counter = select().getCount(); organizationSearchForm.setPaging(null, organizationSearchForm.pageNo, counter); // 結果取得 ArrayList<OrganizationDto> organizationDtoList = (ArrayList<OrganizationDto>)organizationDxo.convert(select().orderBy("organizationId asc").offset(organizationSearchForm.getOffSet("")).limit(organizationSearchForm.getLimit("")).getResultList()); // 合計ポイント算出 for (OrganizationDto organizationDto : organizationDtoList) { Integer pointSum = pointDonationService.findPointSumByOrganizationId(organizationDto.organizationId); if (pointSum == null) { organizationDto.pointSum = 0; } else { organizationDto.pointSum = pointSum; } } return organizationDtoList; } /** * 市民活動団体一括登録 * ポイント寄付情報「t_point_donation」を全削除する。 * 団体マスタ「m_organization」を前削除する。 * CSVデータにもとづいて団体マスタ「m_organization」を登録する。 * @return */ public int organizationShelfRegist(List<OrganizationCsv> organizationCsvList,AdminUser adminUserInfo) { //市民活動団体全部削除 List<Organization> organizationList = this.findAllOrderById(); for (Organization organization : organizationList) { delete(organization); } //ポイント寄付情報全部削除 List<PointDonation> pointDonationList = pointDonationService.findAll(); for (PointDonation pointDonation : pointDonationList) { pointDonationService.delete(pointDonation); } int totalCount =0; for (int i=0;i<organizationCsvList.size();i++) { OrganizationCsv organizationCsv = organizationCsvList.get(i); if(StringUtil.equals("NG", organizationCsv.okNg)){ continue; } Organization organization = Beans.createAndCopy( Organization.class,organizationCsv).execute(); totalCount += insertOrganization(organization, adminUserInfo.loginId); } return totalCount; } /** * 団体一覧・ポイント寄付情報を返す。 * @param organizationSearchForm * @return */ public List<Organization> getFindAllAndDonation(){ return select().leftOuterJoin("pointDonationList").orderBy("organizationNo asc,insId asc").getResultList(); } public String getOrganizationForCsv(OrganizationSearchForm organizationSearchForm,MemberSearchAction memberSearchAction ) throws UnsupportedEncodingException, Exception{ StringBuilder headerSb = new StringBuilder(); StringBuilder dataSb = new StringBuilder(); //List<BeanMap> enqueteResultList = null;//getEnqueteResult(enqueteId); List<Organization> organizationList = getFindAllAndDonation(); //日時 団体番号 団体名 付与ポイント数 if(organizationList.isEmpty()){ return ""; } ArrayList<Integer> memberIdList = new ArrayList<Integer>(); DateTool dateTool = new DateTool(); //データ設定 for (int i = 0; i < organizationList.size(); i++) { Organization data = organizationList.get(i); if(i == 0){ headerSb.append("日時\t"); headerSb.append("団体番号\t"); headerSb.append("団体名\t"); headerSb.append("付与ポイント数\t"); headerSb.append("{{{0}}}"); } //String insertDate = dateTool.format("yyyy/MM/dd HH:mm:ss", data.insertDate); Integer organizationNo = data.organizationNo; String organizationName = data.organizationName; for(int j=0 ; data.pointDonationList != null && j < data.pointDonationList.size(); j++){ PointDonation pointDonation = data.pointDonationList.get(j); String pointInsertDate = dateTool.format("yyyy/MM/dd HH:mm:ss", pointDonation.insertDate); Integer pointPointNum = pointDonation.pointNum; Integer pointMemberId = pointDonation.memberId; dataSb.append(pointInsertDate+"\t"); dataSb.append(organizationNo+"\t"); dataSb.append(organizationName+"\t"); dataSb.append(pointPointNum+"\t"); dataSb.append("{{{"+pointMemberId+"}}}\r\n"); if(!memberIdList.contains(pointMemberId)){ memberIdList.add(pointMemberId); } } } /**会員情報取得*/ String memberInfo = enqueteService.getMemberDownloadContents(memberService.getMemberList(memberIdList),false, true); memberInfo = memberInfo.replace("\"", ""); String [] lines = memberInfo.split(SinaburoConstant.newLine.RN); memberInfo = null; TreeMap<String,String> lineMap = new TreeMap<String,String>(); for(int i=1;i<lines.length;i++){ String [] line = lines[i].split("\t"); lineMap.put(line[0],lines[i]); } headerSb.append(SinaburoConstant.newLine.RN+dataSb); String result = headerSb.toString(); result=result.replace("{{{0}}}", lines[0]); java.util.Iterator ite = lineMap.entrySet().iterator(); while (ite.hasNext()){ Object o = ite.next(); java.util.Map.Entry ent = (java.util.Map.Entry)o; result=result.replace("{{{"+ent.getKey().toString()+"}}}",(String)ent.getValue()); } return result; } // public static void main(String[] args) { // System.out.println(getClipboardString()); // setClipboardString("asdf"); // System.out.println(getClipboardString()); // } }