/** * */ package jp.agentec.sinaburocast.action.admin.member; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Properties; import jp.agentec.sinaburocast.action.AbstractAction; import jp.agentec.sinaburocast.common.SinaburoConstant; import jp.agentec.sinaburocast.common.annotation.OperationHistoryAno; import jp.agentec.sinaburocast.common.util.PropertyUtil; import jp.agentec.sinaburocast.common.util.SinaburoUtil; import jp.agentec.sinaburocast.common.util.SinaburoViewUtil; import jp.agentec.sinaburocast.dto.GroupDetailDto; import jp.agentec.sinaburocast.entity.AdminUser; import jp.agentec.sinaburocast.entity.DeliveryGroup; import jp.agentec.sinaburocast.entity.DeliveryGroupMember; import jp.agentec.sinaburocast.entity.Prefecture; import jp.agentec.sinaburocast.form.admin.member.DeliveryGroupSearchForm; import jp.agentec.sinaburocast.service.DeliveryGroupMemberService; import jp.agentec.sinaburocast.service.DeliveryGroupService; import jp.agentec.sinaburocast.service.MemberService; import jp.agentec.sinaburocast.service.PrefectureService; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; import org.apache.struts.Globals; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.util.TokenProcessor; import org.seasar.framework.util.StringUtil; import org.seasar.struts.annotation.ActionForm; import org.seasar.struts.annotation.Execute; import org.seasar.struts.util.ResponseUtil; /** * * 配信グループ検索 * @author kim-hs * */ public class DeliveryGroupSearchAction extends AbstractAction { private final Logger logger = Logger.getLogger(getClass()); @ActionForm public DeliveryGroupSearchForm deliveryGroupSearchForm; public DeliveryGroupService deliveryGroupService; public DeliveryGroupMemberService deliveryGroupMemberService; public MemberService memberService; public PrefectureService prefectureService; /** * 初期表示 */ @Execute(validator = false, reset="clearAll") public String index() { session.removeAttribute("groupList"); return "/admin/member/deliveryGroupSearch.html"; } /** * グループ検索 * @throws ParseException */ @Execute(validator = false, reset="clearSearch") public String groupSearchResult() throws ParseException { //session.setAttribute("groupList", groupList); //session.removeAttribute("groupList"); // トークン発行 TokenProcessor.getInstance().saveToken(request); if(StringUtil.isNotBlank(deliveryGroupSearchForm.fromDay) && !SinaburoUtil.checkDate(deliveryGroupSearchForm.fromDay)){ addErrorMessage("dateError", "errors.E033"); addErrorMessage("dateError_1", "errors.E033_1"); addErrorMessage("dateError_2", "errors.E033_2"); return "/admin/member/deliveryGroupSearch.html"; }else if(StringUtil.isNotBlank(deliveryGroupSearchForm.toDay) && !SinaburoUtil.checkDate(deliveryGroupSearchForm.toDay)){ addErrorMessage("dateError", "errors.E033"); addErrorMessage("dateError_1", "errors.E033_1"); addErrorMessage("dateError_2", "errors.E033_2"); return "/admin/member/deliveryGroupSearch.html"; } if (!StringUtil.isBlank(deliveryGroupSearchForm.fromDay)) { if (StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { addError(SinaburoViewUtil.getMessage("errors.E018")); return "/admin/member/deliveryGroupSearch.html"; } } if (!StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { if (StringUtil.isBlank(deliveryGroupSearchForm.fromDay)) { addError(SinaburoViewUtil.getMessage("errors.E017")); return "/admin/member/deliveryGroupSearch.html"; } // addError(SinaburoViewUtil.getMessage("errors.E018")); // return "/admin/member/memberReport.html"; } if (!StringUtil.isBlank(deliveryGroupSearchForm.fromDay) && !StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { // if (SinaburoUtil.differenceDays(deliveryGroupSearchForm.toDay,deliveryGroupSearchForm.fromDay) > 90) { // addError(SinaburoViewUtil.getMessage("errors.E019")); // return "/admin/member/deliveryGroupSearch.html"; // } if (SinaburoUtil.differenceDays(deliveryGroupSearchForm.toDay,deliveryGroupSearchForm.fromDay) < 0) { addError(SinaburoViewUtil.getMessage("errors.E020")); return "/admin/member/deliveryGroupSearch.html"; } } List<GroupDetailDto> groupList = new ArrayList<GroupDetailDto>(); // memberList = memberService.findByMemberList(null, memberSearchForm.pageNo, memberSearchForm,false); groupList = deliveryGroupService.findByMemberGroupList(null, deliveryGroupSearchForm.pageNo, deliveryGroupSearchForm, false); session.setAttribute("groupList", groupList); return "/admin/member/deliveryGroupSearch.html"; } /** * グループ検索ページング * @throws ParseException */ @Execute(validator = false, urlPattern = "groupSearchResult/{pageNo}", reset="clearPage") public String memberSearchResultPage() throws ParseException { // トークン発行 TokenProcessor.getInstance().saveToken(request); if (!StringUtil.isBlank(deliveryGroupSearchForm.fromDay)) { if (StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { addError(SinaburoViewUtil.getMessage("errors.E018")); return "/admin/member/deliveryGroupSearch.html"; } // addError(SinaburoViewUtil.getMessage("errors.E017")); // return "/admin/member/memberReport.html"; } if (!StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { if (StringUtil.isBlank(deliveryGroupSearchForm.fromDay)) { addError(SinaburoViewUtil.getMessage("errors.E017")); return "/admin/member/deliveryGroupSearch.html"; } // addError(SinaburoViewUtil.getMessage("errors.E018")); // return "/admin/member/memberReport.html"; } if (!StringUtil.isBlank(deliveryGroupSearchForm.fromDay) && !StringUtil.isBlank(deliveryGroupSearchForm.toDay)) { if (SinaburoUtil.differenceDays(deliveryGroupSearchForm.toDay,deliveryGroupSearchForm.fromDay) > 90) { addError(SinaburoViewUtil.getMessage("errors.E019")); return "/admin/member/deliveryGroupSearch.html"; } if (SinaburoUtil.differenceDays(deliveryGroupSearchForm.toDay,deliveryGroupSearchForm.fromDay) < 0) { addError(SinaburoViewUtil.getMessage("errors.E020")); return "/admin/member/deliveryGroupSearch.html"; } } List<GroupDetailDto> groupList = new ArrayList<GroupDetailDto>(); // memberList = memberService.findByMemberList(null, memberSearchForm.pageNo, memberSearchForm,false); groupList = deliveryGroupService.findByMemberGroupList(null, deliveryGroupSearchForm.pageNo, deliveryGroupSearchForm, false); session.setAttribute("groupList", groupList); return "/admin/member/deliveryGroupSearch.html"; } /** * 配信グループ編集、再抽出に遷移 * @return */ @Execute(validator = false) public String deliveryGroupEdit() { // トークン発行 TokenProcessor.getInstance().saveToken(request); //String kk = deliveryGroupSearchForm.groupId; DeliveryGroup deliveryGroup = deliveryGroupService.findById(Integer.parseInt(deliveryGroupSearchForm.groupId)); deliveryGroupSearchForm.editGroupName = deliveryGroup.deliveryGroupName; deliveryGroupSearchForm.editMemo = deliveryGroup.memo; List<DeliveryGroup> deliveryGroupList = deliveryGroupService.findAllOrderById(Integer.parseInt(deliveryGroupSearchForm.groupId)); session.setAttribute("deliveryGroupList", deliveryGroupList); return "/admin/member/deliveryGroupEdit.html"; } @Execute(validator = false) public String deliveryGroupEditError() { // トークン発行 TokenProcessor.getInstance().saveToken(request); //String kk = deliveryGroupSearchForm.groupId; // DeliveryGroup deliveryGroup = deliveryGroupService.findById(Integer.parseInt(deliveryGroupSearchForm.groupId)); // deliveryGroupSearchForm.editGroupName = deliveryGroup.deliveryGroupName; // deliveryGroupSearchForm.editMemo = deliveryGroup.memo; // List<DeliveryGroup> deliveryGroupList = deliveryGroupService.findAllOrderById(Integer.parseInt(deliveryGroupSearchForm.groupId)); // session.setAttribute("deliveryGroupList", deliveryGroupList); return "/admin/member/deliveryGroupEdit.html"; } /** * 配信グループ編集、再抽出 * @return */ @Execute(validator = true,input = "/admin/member/deliveryGroupSearch/deliveryGroupEditError") @OperationHistoryAno(operationTypeId=SinaburoConstant.OperationType.DELETE,target="配信グループ編集",detail="更新",screenId=SinaburoConstant.screenId.CDG0002) public String deliveryGroupMemberEdit() { // トークン確認 if (!TokenProcessor.getInstance().isTokenValid(request, true)) { return "/error/doubleAction.html"; } AdminUser adminUser = getAdmin(); DeliveryGroup info = deliveryGroupService.findById(Integer.parseInt(deliveryGroupSearchForm.groupId)); info.deliveryGroupName = deliveryGroupSearchForm.editGroupName; info.memo = deliveryGroupSearchForm.editMemo; info.updateDate = SinaburoUtil.getTimestamp(); deliveryGroupService.update(info, adminUser.loginId); return "/admin/member/deliveryGroupEditEnd.html"; } /** * 配信グループ編集、再抽出 * @return */ //@Execute(validator = false) @Execute(validator = true,input = "/admin/member/deliveryGroupSearch/deliveryGroupEditError") @OperationHistoryAno(operationTypeId=SinaburoConstant.OperationType.DELETE,target="配信グループ再抽出",detail="新規",screenId=SinaburoConstant.screenId.CDG0002) public String deliveryGroupRemake() { // トークン確認 if (!TokenProcessor.getInstance().isTokenValid(request, true)) { return "/error/doubleAction.html"; } AdminUser adminUser = getAdmin(); //配信グループリスト再抽出 List<DeliveryGroupMember> addList = new ArrayList<DeliveryGroupMember> (); List <DeliveryGroupMember> list1 = deliveryGroupMemberService.findAllOrderByIdAll(Integer.parseInt(deliveryGroupSearchForm.groupId)); List <DeliveryGroupMember> list2 = deliveryGroupMemberService.findAllOrderByIdAll(Integer.parseInt(deliveryGroupSearchForm.targetList)); for (DeliveryGroupMember member : list1) { //if(!list2.contains(member)){ if(!contains(list2,member)){ //if(!addList.contains(member)){ addList.add(member); //} } } if (addList.size() == 0) { ActionMessages messages = (ActionMessages)request.getAttribute(Globals.ERROR_KEY); if (messages == null) { messages = new ActionMessages(); } messages.add("Nomember", new ActionMessage(SinaburoViewUtil.getMessage("errors.E022"))); request.setAttribute(Globals.ERROR_KEY, messages); //addError(SinaburoViewUtil.getMessage("errors.E022")); TokenProcessor.getInstance().saveToken(request); return "/admin/member/deliveryGroupEdit.html"; } DeliveryGroup deliveryGroup = new DeliveryGroup(); deliveryGroup.deliveryGroupName = deliveryGroupSearchForm.targetNewName; deliveryGroup.delFlg = 0; int result = deliveryGroupService.insertDeliveryGroupRe(deliveryGroup,addList,adminUser.loginId); if(result < 1){ addError(SinaburoViewUtil.getMessage("errors.S000")); return "/admin/member/deliveryGroupEdit.html"; } return "/admin/member/deliveryGroupRenewalEnd.html"; } /** * 配信グループ削除 * @return */ @Execute(validator = false) @OperationHistoryAno(operationTypeId=SinaburoConstant.OperationType.DELETE,target="配信グループ削除",detail="削除",screenId=SinaburoConstant.screenId.CDG0001) public String deliverygroupDelete() { // トークン確認 // if (!TokenProcessor.getInstance().isTokenValid(request, true)) { // // return "/error/doubleAction.html"; // } AdminUser adminUser = getAdmin(); int result = deliveryGroupService.deliteDeliveryGroup(deliveryGroupSearchForm.groupId, adminUser.loginId); if(result < 1){ request.setAttribute(SinaburoConstant.notRegistOperationHistoryKey.notRegist, SinaburoConstant.notRegistOperationHistoryKey.notRegist); addError(SinaburoViewUtil.getMessage("info.I001")); return "/admin/member/deliveryGroupSearch.html"; } List<GroupDetailDto> groupList = new ArrayList<GroupDetailDto>(); // memberList = memberService.findByMemberList(null, memberSearchForm.pageNo, memberSearchForm,false); groupList = deliveryGroupService.findByMemberGroupList(null, deliveryGroupSearchForm.pageNo, deliveryGroupSearchForm, false); session.setAttribute("groupList", groupList); addError(SinaburoViewUtil.getMessage("info.I002")); return "/admin/member/deliveryGroupSearch.html"; } /** * 配信グループの会員リストダウンロード * @return * @throws UnsupportedEncodingException * @throws Exception */ @Execute(validator=false) @OperationHistoryAno(operationTypeId=SinaburoConstant.OperationType.DOWNLOAD,target="配信グループ会員リスト",detail="ダウンロード",screenId=SinaburoConstant.screenId.CDG0002) public String memberGroupDownload() throws UnsupportedEncodingException, Exception { StringBuffer str = new StringBuffer(); str.append("\"会員ID\"\t\"ログインID\"\t\"パスワード\"\t\"氏\"\t\"名\"\t\"氏(カナ)\"\t\"名(カナ)\"\t\"PCメールアドレス\"\t\"携帯メールアドレス\"\t\"電話\"\t\"性別\"\t\""+ "生年月日\"\t\"年代\"\t\"郵便番号\"\t\"都道府県\"\t\"市区町村\"\t\"町名・番地\"\t\"建物名\"\t\"ポイント\"\t\"メモ\"\t\"削除フラグ\"\t\"退会有無\"\t\"退会日時\"\t\"退会理由区分\"\t\"退会理由コメント\"" +"\r\n"); int offSet=0; List<DeliveryGroupMember> list = deliveryGroupMemberService.findAllOrderByIdAllList(Integer.parseInt(deliveryGroupSearchForm.groupId), offSet); List<Prefecture> prefectureInfo = prefectureService.findAllOrderById(); //都道府県 HashMap<Integer,String> map = new HashMap<Integer,String>(); for (Prefecture data : prefectureInfo) { map.put(data.prefectureId,data.prefecture); } //100件ずつ分けて処理する。 do{ for (DeliveryGroupMember report : list) { str.append("\""+report.memberId+"\"\t\""+report.member.loginId+"\"\t\""+report.member.password+"\"\t\""+report.member.firstName+"\"\t\""+report.member.lastName+"\"\t\""+report.member.firstNameKana+"\"\t\""+report.member.lastNameKana); str.append("\"\t\""+report.member.pcEmail+"\"\t\""+report.member.mbEmail+"\"\t\""+report.member.telno+"\"\t\""); if (report.member.genderCd != null) { if (report.member.genderCd == SinaburoConstant.GenderType.MAN) { str.append("男"); } else if (report.member.genderCd == SinaburoConstant.GenderType.WOMAN) { str.append("女"); } else { str.append(""); } } str.append("\"\t\""+report.member.birthday); String kdk = getOld(report.member.birthday); str.append("\"\t\""+kdk); str.append("\"\t\""+report.member.zipCode); str.append("\"\t\""+map.get(report.member.prefectureId)); str.append("\"\t\""+report.member.cityName+"\"\t\""+report.member.areaName+"\"\t\""+report.member.buildingName); str.append("\"\t\""+report.member.pointNum); if (!StringUtil.isBlank(report.member.memo)) { str.append("\"\t\""+report.member.memo.replace("\\r\\n", "")); } else { str.append("\"\t\""+report.member.memo); } str.append("\"\t\""+"0"); if(report.memberWithdraw == null) { str.append("\"\t\"0"); str.append("\"\t\"\"\t\"\"\t\"\""); } else { str.append("\"\t\"1"); str.append("\"\t\""+SinaburoUtil.dateToString(report.memberWithdraw.insertDate)); if (!StringUtil.isBlank(report.memberWithdraw.reasonComment)) { str.append("\"\t\""+getReason_type(report.memberWithdraw.reasonType)); } else { str.append("\"\t\""); } if (!StringUtil.isBlank(report.memberWithdraw.reasonComment)) { str.append("\"\t\""+report.memberWithdraw.reasonComment.replace("\r\n", "")+"\""); } else { str.append("\"\t\""+report.memberWithdraw.reasonComment+"\""); } } str.append("\r\n"); } list = deliveryGroupMemberService.findAllOrderByIdAllList(Integer.parseInt(deliveryGroupSearchForm.groupId), offSet+=100); }while(!CollectionUtils.isEmpty(list)); String contents = str.toString().replace("null", ""); //20170508 SJIS文字化け対応 //char[] c = contents.toCharArray(); //for (int i = 0; i < c.length; i++) { // char d = c[i]; // if (d == '\uff0d') c[i] = '\u2212'; //} //contents = new String(c); contents = SinaburoUtil.toSJIS(contents); ResponseUtil.download(URLEncoder.encode("member_list.tsv", "UTF-8"), contents.getBytes("Windows-31J")); //ResponseUtil.download(URLEncoder.encode("member_list.tsv", "UTF-8"), contents.getBytes("Shift_JIS")); //response.setContentType("Content-Type content=\"text/html; charset=\"UTF-8\""); return null; } /** * * @param src * @param compare * @return */ private boolean contains(List<DeliveryGroupMember> src,DeliveryGroupMember compare){ for (DeliveryGroupMember deliveryGroupMember : src) { if (deliveryGroupMember.memberId.equals(compare.memberId)) return true; } return false; } /** * 年齢を返す * @param birth_day yyyyMMdd 形式の誕生日 * @return 年齢 * @throws ParseException */ public String getOld(String birth_day) throws ParseException { if(StringUtil.isBlank(birth_day)) return ""; SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); Calendar cal = Calendar.getInstance(); cal.setTime(df.parse(birth_day)); Date now = new Date(); if (cal.getTime().after(now)) { return ""; // マイナスは0 } Calendar nowCal = Calendar.getInstance(); nowCal.setTime(now); String nowYmd = df.format(now); String old = ((Long.parseLong(nowYmd) - Long.parseLong(birth_day)) / 100000L) * 10+""; return old; } /** * 退会理由設定 * @param type * @return */ public String getReason_type(int type) { Properties prop = PropertyUtil.getProperties("application_ja",false); String withDrawCheckBoxComment0 = prop.get("withDraw.checkBoxComment0").toString(); String withDrawCheckBoxComment1 = prop.get("withDraw.checkBoxComment1").toString(); String withDrawCheckBoxComment2 = prop.get("withDraw.checkBoxComment2").toString(); String result=""; int test = type; ArrayList<String> list = new ArrayList<String>(); if(test - 4 >= 0){ list.add(withDrawCheckBoxComment2); test -= 4; } if(test - 2 >= 0){ list.add(withDrawCheckBoxComment1); test -= 2; } if(test - 1 >= 0){ list.add(withDrawCheckBoxComment0); test -= 1; } if(!list.isEmpty()){result=list.get(list.size() -1);} for(int i=list.size()-2;i >= 0;i--){ result+=":"+list.get(i); } return result; } }