日本华人论坛 程序编写3
日本 - package jp.co.ji.jbaas.util.seikyuhenrei;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang.ArrayUtils;
import org.apache.log4j.Logger;
import jp.co.ji.jbaas.common.CodeConst;
import jp.co.ji.jbaas.common.MapKeyConst;
import jp.co.ji.jbaas.common.SeikyuhenreiConst;
import jp.co.ji.jbaas.common.StringConst;
import jp.co.ji.jbaas.common.Validator;
import jp.co.ji.jbaas.common.bean.SeikyuHenreiBean;
import jp.co.ji.jbaas.common.bean.SystemErrorInfo;
import jp.co.ji.jbaas.context.RequestContext;
import jp.co.ji.jbaas.dao.DAOFactory;
import jp.co.ji.jbaas.exception.LogicException;
import jp.co.ji.jbaas.mail.MailConst;
import jp.co.ji.jbaas.util.common.DateUtil;
import jp.co.ji.jbaas.util.common.ListUtil;
import jp.co.ji.jbaas.util.common.MojiHenkanUtil;
import jp.co.ji.jbaas.util.common.MsgUtil;
import jp.co.ji.jbaas.util.common.StringUtil;
import jp.co.ji.jbaas.util.mail.SystemMailUtil;
import jp.co.ji.jbaas.util.mst.fusss.common.CodeMstUtil;
import jp.co.ji.jbaas.util.mst.fusss.common.GaibuSystemMaintenanceMstUtil;
import jp.co.ji.jbaas.util.seikyuhenrei.bean.SeikyuhenreiInputBean;
import jp.co.ji.jbaas.util.seikyuhenrei.bean.meisai.SeikyuHenreiMeisai;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreichukantableUtil;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreicustomUtil;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreikanriUtil;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreikanririrekiUtil;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreimeisaiUtil;
import jp.co.ji.jbaas.util.tran.fusss.common.SeikyuhenreishohinkanriUtil;
import jp.co.ji.model.fusss.common.MCdmst;
import jp.co.ji.model.fusss.common.MGaibusystemmaintenancemst;
import jp.co.ji.model.fusss.common.TSeikyuhenreichukantable;
import jp.co.ji.model.fusss.common.TSeikyuhenreikanri;
import jp.co.ji.model.fusss.common.TSeikyuhenreikanriExample;
import jp.co.ji.model.fusss.common.TSeikyuhenreikanririreki;
import jp.co.ji.model.fusss.common.TSeikyuhenreimeisai;
import jp.co.ji.model.fusss.common.TSeikyuhenreishohinkanri;
/**
* 請求返戻Util
*
* @author NSD
*
*/
public final class SeikyuhenreiUtil {
/** ログの定義 */
public static final Logger LOGGER = Logger.getLogger(SeikyuhenreiUtil.class);
/**
* コンストラクタ(インスタンス化禁止)
*/
private SeikyuhenreiUtil() {
}
/**
* 請求返戻共通チェック
*
* @param inputBean 入力情報
* @param requestIdList 要求IDリスト
* @throws Exception
*
*/
public static void doCommonCheck(SeikyuhenreiInputBean inputBean, List<String> requestIdList) throws Exception {
// 要求ID
doEmptyCheck(inputBean.getRequestID(), SeikyuhenreiConst.REQUESTID);
// 要求ID重複チェック
doRequestIdRepeatCheck(inputBean, requestIdList);
// 請求返戻区分
doEmptyExistsCheck(inputBean.getSeikyuHenreiKBN(), SeikyuhenreiConst.SEIKYUHENREIKBNLIST,
SeikyuhenreiConst.SEIKYUHENREIKBN);
// 処理種別
doEmptyExistsCheck(inputBean.getShoriShubetsu(), SeikyuhenreiConst.SHORISHUBETSULIST,
SeikyuhenreiConst.SHORISHUBETSU);
}
/**
* 要求ID重複チェック
*
* @param inputBean 入力情報
* @param requestIdList 要求IDリスト
* @throws Exception
*
*/
public static void doRequestIdRepeatCheck(SeikyuhenreiInputBean inputBean, List<String> requestIdList)
throws Exception {
// 要求ID
String requestID = inputBean.getRequestID();
// 要求ID重複チェック
doRepeatCheck(requestID, requestIdList, SeikyuhenreiConst.REQUESTID + StringConst.COLON + requestID);
}
/**
* 請求返戻管理番号重複チェック
*
* @param inputBean 入力情報
* @param seikyuhenreikanriNoList 請求返戻管理番号リスト
* @throws Exception
*
*/
public static void doSeikyuhenreiKanriNoRepeatCheck(SeikyuhenreiInputBean inputBean, List<String> seikyuhenreikanriNoList) throws Exception {
// 請求返戻管理番号
String seikyuHenreiKanriNO = inputBean.getSeikyuHenreiKanriNO();
// 請求返戻管理番号重複チェック
doRepeatCheck(seikyuHenreiKanriNO, seikyuhenreikanriNoList, SeikyuhenreiConst.SEIKYUHENREIKANRINO + StringConst.COLON + seikyuHenreiKanriNO);
}
/**
* 請求返戻管理番号重複チェック
*
* @param taisho チェック対象
* @param taishoList チェック対象リスト
* @param msg エラーメッセージ
* @throws Exception
*
*/
private static void doRepeatCheck(String taisho, List<String> taishoList, String msg) throws Exception {
if (taishoList.contains(taisho)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00035, msg));
} else {
taishoList.add(taisho);
}
}
/**
* 請求登録の共通チェック
*
* @param inputBean 入力情報
* @throws Exception
*
*/
public static void doSeikyuTorokuCommonCheck(SeikyuhenreiInputBean inputBean) throws Exception {
// 決済方法チェック
doEmptyExistsCheck(inputBean.getKessaihoho(), SeikyuhenreiConst.SHUNOHOHO_SEIKYULIST, SeikyuhenreiConst.KESSAIHOHO);
// キャリア以外の場合チェックする
if (!SeikyuhenreiConst.SHUNOHOHO_CARRIERLIST.contains(inputBean.getKessaihoho())) {
// ラインコード
doEmptyExistsCheck(inputBean.getLineCD(), SeikyuhenreiConst.LINECDLIST, SeikyuhenreiConst.LINECD);
// マイページユーザーID
doEmptyDigitsFormatCheck(inputBean.getMyPageUserID(), SeikyuhenreiConst.DIGITS_8,
SeikyuhenreiConst.HALFNUMONLY, SeikyuhenreiConst.MYPAGEUSERID);
// 決済金額
doEmptyFormatCheck(inputBean.getKessaiKingaku(), SeikyuhenreiConst.HALFNUMONLY,
SeikyuhenreiConst.KESSAIKINGAKU);
// 即時予定区分
String sokujiYoteiKBN = inputBean.getSokujiYoteiKBN();
// 即時予定区分許可リスト
List<String> sokujiYoteiKBNList = SeikyuhenreiConst.SOKUJIYOTEIKBNLIST;
// 次期配信の場合
if (SeikyuhenreiConst.SHUNOHOHO_JIKIHAISHINLIST.contains(inputBean.getKessaihoho())) {
// 即時のみ許可
sokujiYoteiKBNList = Arrays.asList(CodeConst.SokujiYoteiKbn.SOKUJI);
}
doEmptyExistsCheck(sokujiYoteiKBN, sokujiYoteiKBNList, SeikyuhenreiConst.SOKUJIYOTEIKBN);
// 即時予定区分が予定、かつ次期配信、その他以外の場合
if (CodeConst.SokujiYoteiKbn.YOTEI.equals(sokujiYoteiKBN) &&
!SeikyuhenreiConst.AGENT_RYOSHULIST.contains(inputBean.getKessaihoho()) &&
!SeikyuhenreiConst.SHUNOHOHO_SONOTALIST.contains(inputBean.getKessaihoho())) {
// 請求返戻予定日
doEmptyFormatCheck(inputBean.getSeikyuHenreiYoteiDate(), DateUtil.YYYYMMDD,
SeikyuhenreiConst.SEIKYUHENREIYOTEIDATE);
}
// 請求返戻明細リスト
doSeikyuHenreiMeisaiListCheck(inputBean.getSeikyuHenreiMeisaiList());
// 関連チェック
doKessaiKingakuRelatedCheck(inputBean);
// 他機能処理中チェック
doSeikyuhenreiShorichuCheck(inputBean.getSeikyuHenreiKanriNO(), inputBean.getShoriShubetsu(),
inputBean.getLineCD(), inputBean.getSeikyuHenreiMeisaiList());
}
}
/**
* 請求取消共通チェック
*
* @param inputBean 入力情報
* @param seikyuhenreikanriNoList 請求返戻管理番号リスト
* @throws Exception
*
*/
public static void doTorikeshiCommonCheck(SeikyuhenreiInputBean inputBean, List<String> seikyuhenreikanriNoList) throws Exception {
// 請求返戻管理番号重複チェック
SeikyuhenreiUtil.doSeikyuhenreiKanriNoRepeatCheck(inputBean, seikyuhenreikanriNoList);
// 他機能処理中チェック
doSeikyuhenreiShorichuCheck(inputBean.getSeikyuHenreiKanriNO(), inputBean.getShoriShubetsu(),
inputBean.getLineCD(), inputBean.getSeikyuHenreiMeisaiList());
}
/**
* 返戻登録の共通チェック
*
* @param inputBean 入力情報
* @throws Exception
*
*/
public static void doHenreiTorokuCommonCheck(SeikyuhenreiInputBean inputBean) throws Exception {
// ラインコード
doEmptyExistsCheck(inputBean.getLineCD(), SeikyuhenreiConst.LINECDLIST, SeikyuhenreiConst.LINECD);
// 決済金額
doEmptyFormatCheck(inputBean.getKessaiKingaku(), SeikyuhenreiConst.HALFNUMONLY,
SeikyuhenreiConst.KESSAIKINGAKU);
// 決済方法チェック
doEmptyExistsCheck(inputBean.getKessaihoho(), SeikyuhenreiConst.SHUNOHOHO_HENREILIST,
SeikyuhenreiConst.KESSAIHOHO);
// マイページユーザーID
doEmptyDigitsFormatCheck(inputBean.getMyPageUserID(), SeikyuhenreiConst.DIGITS_8,
SeikyuhenreiConst.HALFNUMONLY, SeikyuhenreiConst.MYPAGEUSERID);
// 請求返戻明細リスト
doSeikyuHenreiMeisaiListCheck(inputBean.getSeikyuHenreiMeisaiList());
// 関連チェック
doKessaiKingakuRelatedCheck(inputBean);
// 他機能処理中チェック
doSeikyuhenreiShorichuCheck(inputBean.getSeikyuHenreiKanriNO(), inputBean.getShoriShubetsu(),
inputBean.getLineCD(), inputBean.getSeikyuHenreiMeisaiList());
}
/**
* 請求登録、返戻登録共通:請求返戻明細チェック
*
* @param seikyuHenreiMeisaiList 請求返戻明細リスト
* @throws Exception
*
*/
public static void doSeikyuHenreiMeisaiListCheck(List<SeikyuHenreiMeisai> seikyuHenreiMeisaiList) throws Exception {
// 必須チェック
if (ListUtil.isEmpty(seikyuHenreiMeisaiList)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00001, SeikyuhenreiConst.SEIKYUHENREIMEISAILIST));
}
// エラーメッセージ
String errMsg = SeikyuhenreiConst.SEIKYUHENREIMEISAILIST + StringConst.DOT;
for (SeikyuHenreiMeisai meisai : seikyuHenreiMeisaiList) {
// 枝番
doEmptyDigitsFormatCheck(meisai.getEdaban(), SeikyuhenreiConst.DIGITS_5,
SeikyuhenreiConst.HALFNUMONLY, errMsg + SeikyuhenreiConst.EDABAN);
// 請求種別
doEmptyExistsCheck(meisai.getSeikyuShubetsu(), SeikyuhenreiConst.SEIKYUSHUBETSULIST, errMsg + SeikyuhenreiConst.SEIKYUSHUBETSU);
// 請求返戻区分
String seikyuHenreiKBN = meisai.getSeikyuHenreiKBN();
doEmptyExistsCheck(seikyuHenreiKBN, SeikyuhenreiConst.SEIKYUHENREIKBNLIST,
errMsg + SeikyuhenreiConst.SEIKYUHENREIKBN);
// 契約証番号
doEmptyDigitsFormatCheck(meisai.getKeiyakuShouNO(), SeikyuhenreiConst.DIGITS_10,
SeikyuhenreiConst.HALFALPHANUMONLY, errMsg + SeikyuhenreiConst.KEIYAKUSHONO);
// 操作番号
doEmptyDigitsFormatCheck(meisai.getSosaNO(), SeikyuhenreiConst.DIGITS_3, SeikyuhenreiConst.HALFNUMONLY,
errMsg + SeikyuhenreiConst.SOSANO);
// 請求返戻区分(明細)が請求の場合
if (CodeConst.SeikyuHenreiKbn.SEIKYU.equals(seikyuHenreiKBN)) {
// 払込方法
String haraikomihouhou = meisai.getHaraikomihoho();
doEmptyExistsCheck(haraikomihouhou, SeikyuhenreiConst.HARAIKOMIHOHOLIST,
errMsg + SeikyuhenreiConst.HARAIKOMIHOHO);
// 回払いの場合
if (SeikyuhenreiConst.HARAIKOMIHOHO_BUNKATSU_LIST.contains(haraikomihouhou)) {
// 払込回数
doEmptyFormatCheck(meisai.getHaraikomiKaisu(), SeikyuhenreiConst.HALFNUMONLY,
errMsg + SeikyuhenreiConst.HARAIKOMIKAISU);
// 請求回目
doEmptyFormatCheck(meisai.getSeikyuKaime(), SeikyuhenreiConst.HALFNUMONLY,
errMsg + SeikyuhenreiConst.SEIKYUKAIME);
}
}
// 決済金額
String kessaiKingakuMeisai = meisai.getKessaiKingaku();
doEmptyFormatCheck(kessaiKingakuMeisai, SeikyuhenreiConst.HALFNUMONLY,
errMsg + SeikyuhenreiConst.KESSAIKINGAKU);
}
}
/**
* 決済金額の範囲チェック
* 最小値と最大値可能
*
* @param kessaiKingaku 決済金額
* @param min 最小値
* @param max 最大値
* @throws Exception
*
*/
public static void doKessaiKingakuRangeCheck(long kessaiKingaku, int min, long max) throws Exception {
// 決済金額範囲チェック
if (kessaiKingaku < min || kessaiKingaku > max) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00005, SeikyuhenreiConst.KESSAIKINGAKU,
SeikyuhenreiConst.KYOYOKINGAKU));
}
}
/**
* 決済金額の範囲チェック
* 最小値不可、最大値可能
*
* @param kessaiKingaku 決済金額
* @param min 最小値
* @param max 最大値
* @throws Exception
*
*/
public static void doKessaiKingakuRangeCheckByNotAllowMin(long kessaiKingaku, int min, long max) throws Exception {
// 決済金額範囲チェック
// 最小値不可、最大値可能
if (kessaiKingaku <= min || kessaiKingaku > max) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00005, SeikyuhenreiConst.KESSAIKINGAKU,
SeikyuhenreiConst.KYOYOKINGAKU));
}
}
/**
* メンテナンス時間管理チェック
*
* @param systemCdList 対象システムコード
* @throws Exception
*
*/
public static void doMaintenanceChuCheck(List<String> systemCdList) throws Exception {
// メンテナンス中チェック
List<MGaibusystemmaintenancemst> maintenanceList = GaibuSystemMaintenanceMstUtil.select(systemCdList,
DateUtil.now());
if (!ListUtil.isEmpty(maintenanceList)) {
List<MCdmst> mcdList = CodeMstUtil.getCdmstByShuShubetsuCD(CodeConst.SystemCD.SHUSHUBETSUCD);
List<String> hyoujiList = mcdList.stream()
.filter(m -> systemCdList.contains(m.getShubetsuCD())) // システムコード
.map(MCdmst::getHyojiMongon) // 表示文言
.collect(Collectors.toList());
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00008, String.join(StringConst.COMMA, hyoujiList)));
}
}
/**
* 必須チェック
*
* @param item 項目
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doEmptyCheck(String item, String itemName) throws Exception {
if (StringUtil.isEmpty(item)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00001, itemName));
}
}
/**
* マスタ存在チェック
*
* @param rangeList 範囲リスト
* @param item 項目
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doExistsCheck(List<String> rangeList, String item, String itemName) throws Exception {
if (!rangeList.contains(item)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00002, itemName));
}
}
/**
* 桁数チェック(最大桁数)
*
* @param item 項目
* @param digits 桁数
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doDigitsCheck(String item, Integer digits, String itemName) throws Exception {
if (StringUtil.isNotEmpty(item)) {
if (item.getBytes(SeikyuhenreiConst.SHIFT_JIS).length > digits) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00004, itemName, digits.toString()));
}
}
}
/**
* 桁数チェック(最大桁数)
*
* @param item 項目
* @param digits 桁数
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doDigitsLenCheck(String item, Integer digits, String itemName) throws Exception {
if (StringUtil.isNotEmpty(item)) {
if (item.length() > digits) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00004, itemName, digits.toString()));
}
}
}
/**
* 桁数チェック(固定桁数)
*
* @param item 項目
* @param digits 桁数
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doFixedDigitsCheck(String item, Integer digits, String itemName) throws Exception {
if (StringUtil.isNotEmpty(item)) {
if (item.getBytes(SeikyuhenreiConst.SHIFT_JIS).length != digits) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00049, itemName, digits.toString()));
}
}
}
/**
* 文字種チェック
*
* @param item 項目
* @param format 文字種種類
* @param itemName 項目名称
* @throws Exception
*
*/
public static void doFormatCheck(String item, String format, String itemName) throws Exception {
if (StringUtil.isEmpty(item)) {
return;
}
String errMsg = MsgUtil.getMsg(MsgUtil.MSG_A_00002, itemName);
// 半角
if (SeikyuhenreiConst.HANKAKUONLY.equals(format)) {
if (!SeikyuhenreiValidator.isHankakuOnly(item)) {
throw new LogicException(errMsg);
}
}
// 半角数字
else if (SeikyuhenreiConst.HALFNUMONLY.equals(format)) {
if (!Validator.isValidNumOnly(item)) {
throw new LogicException(errMsg);
}
}
// 半角数字またハイフン
else if (SeikyuhenreiConst.HALFORHYPHEN.equals(format)) {
if (!SeikyuhenreiValidator.isHalfNumHyphenOnly(item)) {
throw new LogicException(errMsg);
}
}
// 半角英数字
else if (SeikyuhenreiConst.HALFALPHANUMONLY.equals(format)) {
if (!Validator.isValidHalfAlphaNum(item)) {
throw new LogicException(errMsg);
}
}
// 半角英数字記号
else if (SeikyuhenreiConst.HALFALPHANUMSYMBOLONLY.equals(format)) {
if (!SeikyuhenreiValidator.isHalfAlpaNumSymbolsOnly(item)) {
throw new LogicException(errMsg);
}
}
// 全角
else if (SeikyuhenreiConst.ZENKAKUONLY.equals(format)) {
if (!SeikyuhenreiValidator.isZenkakuOnly(item)) {
throw new LogicException(errMsg);
}
}
// 許容されない記号('\;)
else if (SeikyuhenreiConst.WELLNETREJECT.equals(format)) {
if (SeikyuhenreiValidator.hasWellnetRejectByteSymbols(item)) {
throw new LogicException(errMsg);
}
}
// yyyyMMddHHmmまたyyyyMMdd
else if (DateUtil.YYYYMMDDHHMM_2.equals(format) || DateUtil.YYYYMMDD.equals(format)) {
if (!DateUtil.validDate(item, format)) {
errMsg = MsgUtil.getMsg(MsgUtil.MSG_A_00006, itemName);
throw new LogicException(errMsg);
}
}
// hh:mm-hh:mm
else if (SeikyuhenreiConst.HHMMHHMM.equals(format)) {
if (!SeikyuhenreiValidator.isHHMMHHMM(item)) {
errMsg = MsgUtil.getMsg(MsgUtil.MSG_A_00006, itemName);
throw new LogicException(errMsg);
}
}
// 自由領域用チェック
else if (SeikyuhenreiConst.MERCHANTFREE.equals(format)) {
if (!SeikyuhenreiValidator.isPermission(item)) {
throw new LogicException(errMsg);
}
}
// 自由領域1docomo用チェック
else if (SeikyuhenreiConst.DOCOMO_MERCHANTFREE1.equals(format)) {
if (!SeikyuhenreiValidator.isValidator(item)) {
throw new LogicException(errMsg);
}
}
// 送金_口座名義人チェック
else {
if (!SeikyuhenreiValidator.validatorSokinkozameigi(item)) {
throw new LogicException(errMsg);
}
}
}
/**
* 必須とマスタ存在チェック
*
* @param item 対象項目
* @param rangeList 範囲リスト
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doEmptyExistsCheck(String item, List<String> rangeList, String itemName) throws Exception {
doEmptyCheck(item, itemName);
doExistsCheck(rangeList, item, itemName);
}
/**
* 必須と桁数チェック
*
* @param item 対象項目
* @param digits 桁数
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doEmptyDigitsCheck(String item, int digits, String itemName) throws Exception {
doEmptyCheck(item, itemName);
doDigitsCheck(item, digits, itemName);
}
/**
* 必須と文字種チェック
*
* @param item 対象項目
* @param format 文字種タイプ
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doEmptyFormatCheck(String item, String format, String itemName) throws Exception {
doEmptyCheck(item, itemName);
doFormatCheck(item, format, itemName);
}
/**
* 桁数チェックと文字種チェック
*
* @param item 対象項目
* @param digits 桁数
* @param format 文字種タイプ
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doDigitsFormatCheck(String item, int digits, String format, String itemName)
throws Exception {
doDigitsCheck(item, digits, itemName);
doFormatCheck(item, format, itemName);
}
/**
* 必須と桁数チェックと文字種チェック
*
* @param item 対象項目
* @param digits 桁数
* @param format 文字種タイプ
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doEmptyDigitsFormatCheck(String item, int digits, String format, String itemName)
throws Exception {
doEmptyDigitsCheck(item, digits, itemName);
doFormatCheck(item, format, itemName);
}
/**
* 必須と桁数チェック(固定桁数)と文字種チェック
*
* @param item 対象項目
* @param digits 桁数
* @param format 文字種タイプ
* @param itemName 対象項目名称
* @throws Exception
*
*/
public static void doEmptyFixedDigitsFormatCheck(String item, int digits, String format, String itemName)
throws Exception {
doEmptyCheck(item, itemName);
doFixedDigitsCheck(item, digits, itemName);
doFormatCheck(item, format, itemName);
}
/**
* 他機能処理中チェック
*
* @param seikyuHenreiKanriNO 請求返戻管理番号
* @param shoriShubetsu 処理種別
* @param lineCD ラインコード
* @param seikyuHenreiMeisaiList 請求返戻明細リスト
* @throws Exception
*
*/
public static void doSeikyuhenreiShorichuCheck(String seikyuHenreiKanriNO, String shoriShubetsu, String lineCD,
List<SeikyuHenreiMeisai> seikyuHenreiMeisaiList) throws Exception {
// 検索結果
List<SeikyuHenreiBean> rsList;
// 検索条件
Map<String, Object> param = new HashMap<String, Object>();
param.put(MapKeyConst.SHORICHUSTATUS, CodeConst.ShorichuStatus.HI_SHORICHU);
// 請求登録また返戻登録の場合
if (CodeConst.SeikyuHenreiShoriShubetsu.TOROKU.equals(shoriShubetsu)) {
param.put(MapKeyConst.LINECD, lineCD);
param.put(MapKeyConst.SEIKYUHENREIMEISAILIST, seikyuHenreiMeisaiList);
rsList = SeikyuhenreicustomUtil.selectTorokuShorichuData(param);
}
// 請求取消また返戻取消の場合
else {
param.put(MapKeyConst.SEIKYUHENREIKANRINO, seikyuHenreiKanriNO);
rsList = SeikyuhenreicustomUtil.selectTorikeshiShorichuData(param);
}
// 検索結果判定
if (!ListUtil.isEmpty(rsList)) {
// 請求返戻管理番号リスト
List<String> seikyuhenreiKanriNoList = rsList.stream().map(s -> String.valueOf(s.getSeikyuHenreiKanriNO())).distinct()
.collect(Collectors.toList());
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00096, String.join(",", seikyuhenreiKanriNoList)));
}
}
/**
* 請求登録、返戻登録共通:決済金額関連チェック
*
* @param inputBean 入力情報
* @throws Exception
*
*/
public static void doKessaiKingakuRelatedCheck(SeikyuhenreiInputBean inputBean) throws Exception {
long total = 0L;
for (SeikyuHenreiMeisai meisai : inputBean.getSeikyuHenreiMeisaiList()) {
// 決済金額
long kessaiKingakuMesai = Long.parseLong(meisai.getKessaiKingaku());
if (CodeConst.SeikyuHenreiKbn.SEIKYU.equals(meisai.getSeikyuHenreiKBN())) {
total += kessaiKingakuMesai;
} else {
total -= kessaiKingakuMesai;
}
}
long kessaikingaku = Long.parseLong(inputBean.getKessaiKingaku());
// 請求返戻区分が「返戻」の場合、合計金額が0以下のため負数へ変更
if (CodeConst.SeikyuHenreiKbn.HENREI.equals(inputBean.getSeikyuHenreiKBN())) {
kessaikingaku = -kessaikingaku;
}
// 決済金額と明細合計金額比較
if (total != kessaikingaku) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00007, SeikyuhenreiConst.KESSAIKINGAKU,
SeikyuhenreiConst.MEISAIKINGAKU_GOKEI));
}
}
/**
* 取消可能チェック
*
* @param rangeList 取消可能範囲リスト
* @param seikyuHenreiStatus 請求返戻ステータス
* @param shorishubetsu 処理種別
* @param seikyuhenreikanriNO 請求返戻管理番号
* @throws Exception
*
*/
public static void doTorikeshikanoCheck(List<String> rangeList, String seikyuHenreiStatus, String shorishubetsu,
String seikyuhenreikanriNO) throws Exception {
if (!rangeList.contains(seikyuHenreiStatus)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00045, shorishubetsu, seikyuhenreikanriNO));
}
}
/**
* 請求登録時の共通処理(決済前処理)
* 請求返戻管理登録、請求返戻明細登録、請求返戻商品登録、請求返戻管理履歴登録
*
* @param inputBean 入力情報
* @param gyoumuDate 業務日付
* @param shunoDaikoKaishaCD 収納代行会社コード
* @param saiSeikyuSaiHenreiTaishoFLG 再請求再返戻対象フラグ
* @param shiharaiKigen 支払期限
* @return 登録された請求返戻管理情報
* @throws Exception
*
*/
public static TSeikyuhenreikanri doSeikyuhenreiCommon(SeikyuhenreiInputBean inputBean, Date gyoumuDate,
String shunoDaikoKaishaCD, String saiSeikyuSaiHenreiTaishoFLG, Date shiharaiKigen) throws Exception {
// 請求返戻管理情報登録
TSeikyuhenreikanri seikyuhenreikanri = insertSeikyuhenreikanri(inputBean, gyoumuDate, shunoDaikoKaishaCD,
saiSeikyuSaiHenreiTaishoFLG, shiharaiKigen);
// 請求返戻明細と請求返戻商品管理登録
insertMeisaiAndShohinkanri(inputBean, seikyuhenreikanri.getSeikyuHenreiKanriNO());
// 請求返戻管理履歴登録
insertSeikyuhenreikanririreki(seikyuhenreikanri, gyoumuDate);
return seikyuhenreikanri;
}
/**
* 返戻登録時の共通処理(決済前処理)
* 請求返戻管理登録、請求返戻明細登録、請求返戻商品登録、請求返戻管理履歴登録
*
* @param inputBean 入力情報
* @param gyoumuDate 業務日付
* @param shunoDaikoKaishaCD 収納代行会社コード
* @param systemDate システム日付
* @return 登録された請求返戻管理情報
* @throws Exception
*
*/
public static TSeikyuhenreikanri doHenreiTorokuCommon(SeikyuhenreiInputBean inputBean, Date gyoumuDate,
String shunoDaikoKaishaCD, Date systemDate) throws Exception {
// 請求返戻管理情報登録
TSeikyuhenreikanri seikyuhenreikanri = insertHenreiTorokuSeikyuhenreikanri(inputBean, shunoDaikoKaishaCD,
systemDate);
// 請求返戻明細と請求返戻商品管理登録
insertMeisaiAndShohinkanri(inputBean, seikyuhenreikanri.getSeikyuHenreiKanriNO());
// 請求返戻管理履歴登録
insertSeikyuhenreikanririreki(seikyuhenreikanri, gyoumuDate);
// 請求返戻管理情報更新
seikyuhenreikanri = updateSeikyuhenreiStatus(seikyuhenreikanri, CodeConst.ShorichuStatus.WEB_SHORICHU);
// コミット
DAOFactory.commit();
return seikyuhenreikanri;
}
/**
* 請求返戻管理テーブル処理中更新
*
* @param seikyuhenreikanri 請求返戻管理情報
* @param shorichuStatus 処理中ステータス
* @return 登録された請求返戻管理情報
* @throws Exception
*/
public static TSeikyuhenreikanri updateSeikyuhenreiStatus(TSeikyuhenreikanri seikyuhenreikanri, String shorichuStatus) throws Exception {
// 処理中ステータス
seikyuhenreikanri.setShorichuStatus(shorichuStatus);
// 更新実行
seikyuhenreikanri = SeikyuhenreikanriUtil.update(seikyuhenreikanri);
return seikyuhenreikanri;
}
/**
* 決済金額0円処理
*
* @param inputBean 入力情報
* @param seikyuhenreikanri 請求返戻管理情報
* @param gyoumuDate 業務日付
* @param seikyuHenreiIraiDate 請求返戻依頼日
* @param seikyuhenreikaisu 請求返戻回数
* @return 結果マップ
* @throws Exception
*
*/
public static Map<String, Object> doSeikyuTorokuZeroYen(SeikyuhenreiInputBean inputBean,
TSeikyuhenreikanri seikyuhenreikanri, Date gyoumuDate, Date seikyuHenreiIraiDate, Integer seikyuhenreikaisu)
throws Exception {
// 請求返戻管理更新
updateSeikyuhenreikanri(seikyuhenreikanri, inputBean.getKessaihoho(), gyoumuDate, seikyuHenreiIraiDate,
seikyuhenreikaisu);
// 請求返戻管理履歴登録
insertSeikyuhenreikanririreki(seikyuhenreikanri, gyoumuDate);
// コミット
DAOFactory.commit();
// 応答情報を作成
return createResultMap(inputBean, SeikyuhenreiConst.RESULTCD_OK, seikyuhenreikanri.getSeikyuHenreiKanriNO(),
seikyuhenreikanri.getSeikyuHenreiStatus());
}
/**
* 請求登録時、請求返戻管理履歴登録処理
*
* @param seikyuhenreikanri 請求返戻管理情報
* @param gyoumuDate 業務日付
* @return 請求返戻管理履歴情報
* @throws Exception
*
*/
public static TSeikyuhenreikanririreki insertSeikyuhenreikanririreki(TSeikyuhenreikanri seikyuhenreikanri,
Date gyoumuDate) throws Exception {
// 該当請求返戻管理番号により最大請求返戻管理履歴通番を検索
int maxSeikyuHenreiKanriRirekiTsuban = SeikyuhenreicustomUtil
.selectMaxRirekiTsuban(seikyuhenreikanri.getSeikyuHenreiKanriNO());
// 請求返戻管理履歴
TSeikyuhenreikanririreki insertkanriRirekiBean = new TSeikyuhenreikanririreki();
insertkanriRirekiBean.setSeikyuHenreiKanriNO(seikyuhenreikanri.getSeikyuHenreiKanriNO());
insertkanriRirekiBean.setSeikyuHenreiKanriRirekiTsuban(maxSeikyuHenreiKanriRirekiTsuban + 1);
insertkanriRirekiBean.setSeikyuHenreiStatus(seikyuhenreikanri.getSeikyuHenreiStatus());
insertkanriRirekiBean.setSaiSeikyuHenreiYoteiDate(seikyuhenreikanri.getSaiSeikyuHenreiYoteiDate());
insertkanriRirekiBean.setSeikyuHenreiKanriRirekiHenkoDate(gyoumuDate);
// 登録処理とリターン
return SeikyuhenreikanririrekiUtil.insert(insertkanriRirekiBean);
}
/**
* 返戻管理履歴取得処理
*
* @param parameter (契約証番号)
* @return 請求返戻管理履歴情報
* @throws Exception
*
*/
public static List<Map<String, Object>> getSeikyuhenreikanririreki(Map<String, Object> parameter) throws Exception {
return SeikyuhenreikanririrekiUtil.get(parameter);
}
/**
* 請求登録時、請求返戻中間登録処理
*
* @param tranPkey トランテーブルキー
* @param seikyuhenreikanriNO 請求返戻管理番号
* @return 請求返戻管理履歴情報
* @throws Exception
*
*/
public static TSeikyuhenreichukantable insertSeikyuhenreichukantable(Long tranPkey, Long seikyuhenreikanriNO)
throws Exception {
// 請求返戻中間情報
TSeikyuhenreichukantable seikyuhenreichukantable = new TSeikyuhenreichukantable();
seikyuhenreichukantable.setSeikyuHenreiKanriNO(seikyuhenreikanriNO);
seikyuhenreichukantable.setKessaiBetsuKanriNO(tranPkey);
// 登録とリターン
return SeikyuhenreichukantableUtil.insert(seikyuhenreichukantable);
}
/**
* 結果マップ作成(共通部分)
*
* @param inputBean 入力情報
* @param resultCD 結果コード
* @param seikyuhenreikanriNO 請求返戻管理番号
* @param seikyuhenreiStatus 請求返戻ステータス
* @return 結果マップ
* @throws Exception
*
*/
public static Map<String, Object> createResultMap(SeikyuhenreiInputBean inputBean, String resultCD,
Long seikyuhenreikanriNO, String seikyuhenreiStatus) throws Exception {
// 結果マップ
Map<String, Object> rsMap = new HashMap<String, Object>();
rsMap.put(MapKeyConst.RESPONSEID, inputBean.getRequestID());
rsMap.put(MapKeyConst.RESULTCD, resultCD);
rsMap.put(MapKeyConst.SEIKYUHENREIKANRINO, String.valueOf(seikyuhenreikanriNO));
rsMap.put(MapKeyConst.SEIKYUHENREISTATUS, seikyuhenreiStatus);
// 結果がNGの場合、システムメール送信し、後続処理しない
if (SeikyuhenreiConst.RESULTCD_NG.equals(resultCD)) {
// 結果が失敗の場合
doFailedHandle(inputBean, seikyuhenreikanriNO, rsMap, null);
}
return rsMap;
}
/**
* 外部システム連携時例外発生処理
*
* @param inputBean 入力情報
* @param seikyuhenreikanri 請求返戻管理情報
* @param systemDate システム日付
* @param e 発生した例外
* @throws Exception
*
*/
public static void doSeikyuHenreiException(SeikyuhenreiInputBean inputBean, TSeikyuhenreikanri seikyuhenreikanri,
Date systemDate, Exception e) throws Exception {
// 請求返戻管理更新
seikyuhenreikanri.setShorichuStatus(CodeConst.ShorichuStatus.HI_SHORICHU);
seikyuhenreikanri.setErrHasseibiJi(systemDate);
SeikyuhenreikanriUtil.update(seikyuhenreikanri);
// コミット
DAOFactory.commit();
// 例外処理:システムメール送信
doFailedHandle(inputBean, seikyuhenreikanri.getSeikyuHenreiKanriNO(), null, e);
}
/**
* 失敗処理
*
* @param bean 入力情報
* @param seikyuhenreikanriNO 請求返戻管理番号
* @param output 結果情報
* @param e 発生した例外
* @throws Exception
*/
private static void doFailedHandle(SeikyuhenreiInputBean bean, Long seikyuhenreikanriNO,
Map<String, Object> output, Exception e) throws Exception {
// システム送信のフリー項目
String freeItem = getFreeItem(bean, seikyuhenreikanriNO, output, e);
// システムメール設定
SystemErrorInfo errInfo = getSystemErrorInfo(freeItem, e);
// システムメール送信
SystemMailUtil.sendSystemMail(new ArrayList<SystemErrorInfo>(Arrays.asList(errInfo)));
}
/**
* システムメールフリー項目
*
* @param bean 入力情報
* @param seikyuhenreikanriNO 請求返戻管理番号
* @param output 結果情報
* @param e 発生した例外
* @return フリー項目
*
*/
private static String getFreeItem(SeikyuhenreiInputBean bean, Long seikyuhenreikanriNO, Map<String, Object> output,
Exception e) {
// システムフリー項目
StringBuilder sb = new StringBuilder();
sb.append("要求ID:");
sb.append(bean.getRequestID());
// 処理失敗の場合
if (null != output) {
sb.append(";結果コード:");
sb.append(output.get(MapKeyConst.RESULTCD));
sb.append(";請求返戻管理番号:");
sb.append(output.get(MapKeyConst.SEIKYUHENREIKANRINO));
sb.append(";請求返戻ステータス:");
sb.append(output.get(MapKeyConst.SEIKYUHENREISTATUS));
} else {
// 処理例外の場合
sb.append(";請求返戻管理番号:");
sb.append(seikyuhenreikanriNO);
sb.append(";マイページユーザーID:");
sb.append(bean.getMyPageUserID());
sb.append(";ラインコード:");
sb.append(bean.getLineCD());
sb.append(";請求返戻区分:");
sb.append(bean.getSeikyuHenreiKBN());
sb.append(";処理種別:");
sb.append(bean.getShoriShubetsu());
sb.append(";決済方法:");
sb.append(bean.getKessaihoho());
}
return sb.toString();
}
/**
* システムメール情報設定
*
* @param freeItem フリー項目
* @param e 例外
* @return システムメール情報
* @throws Exception
*
*/
public static SystemErrorInfo getSystemErrorInfo(String freeItem, Exception e) throws Exception {
SystemErrorInfo infoBean = new SystemErrorInfo();
infoBean.setOccurTime(DateUtil.dateToString(DateUtil.now(), DateUtil.YYYYMMDDHHMMSS));
infoBean.setOccurServer(InetAddress.getLocalHost().getHostName());
infoBean.setOccurClass("");
infoBean.setId("");
infoBean.setErrorKubun(MailConst.RETURN_CODE_ABNORMAL_END);
if (null != e) {
infoBean.setMessage("外部システム連携が例外発生しました。");
infoBean.setExceptionInfo(ArrayUtils.toString(e.getStackTrace()));
} else {
infoBean.setMessage("外部システム連携が失敗しました。");
infoBean.setExceptionInfo("");
}
infoBean.setFreeItem(freeItem);
return infoBean;
}
/**
* 請求登録_請求返戻管理情報取得
*
* @param seikyuHenreiKanriNO 請求返戻管理番号
* @return 既存請求返戻管理情報
* @throws Exception
*
*/
public static TSeikyuhenreikanri getSeikyuhenreikanriInfo(String seikyuHenreiKanriNO) throws Exception {
// 請求返戻番号が空の場合
SeikyuhenreiUtil.doEmptyCheck(seikyuHenreiKanriNO, SeikyuhenreiConst.SEIKYUHENREIKANRINO);
// 検索
TSeikyuhenreikanri seikyuhenreikanri = SeikyuhenreicustomUtil.selectSeikyuhenreiByKanriNO(seikyuHenreiKanriNO);
// ない場合
if (null == seikyuhenreikanri) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00003,
SeikyuhenreiConst.SEIKYUHENREIKANRINO + StringConst.COLON + seikyuHenreiKanriNO));
}
return seikyuhenreikanri;
}
/**
* 次期配信後払入金時、請求返戻管理情報取得
*
* @param inputBean 入力パラメータ
* @return 請求返戻管理情報
* @throws Exception
*/
public static TSeikyuhenreikanri getJikihaishinAtobaraiSeikyuhenreikanriInfo(SeikyuhenreiInputBean inputBean) throws Exception {
// 検索条件
TSeikyuhenreikanriExample selectParam = new TSeikyuhenreikanriExample();
TSeikyuhenreikanriExample.Criteria criteria = selectParam.createCriteria();
// 請求返戻管理番号
criteria.andSeikyuHenreiKanriNOEqualTo(Long.parseLong(inputBean.getSeikyuHenreiKanriNO()));
// 収納代行会社コード:代理店
criteria.andShunoDaikoKaishaCDEqualTo(CodeConst.ShunoDaikoKaishaCd.AGENT);
// 収納方法_予定:現金振込また現金振込以外また前払式支払手段また残金支払い
criteria.andShunoHohoYoteiIn(SeikyuhenreiConst.SHUNOHOHO_JIKIHAISHINLIST);
// 収納方法_実績
criteria.andShunoHohoJissekiIsNull();
// エラー発生日時
criteria.andErrHasseibiJiIsNull();
// 処理中ステータス:非処理中
criteria.andShorichuStatusEqualTo(CodeConst.ShorichuStatus.HI_SHORICHU);
// 請求の場合
if (CodeConst.SeikyuHenreiKbn.SEIKYU.equals(inputBean.getSeikyuHenreiKBN())) {
// 請求返戻ステータス:「請求待ち」
criteria.andSeikyuHenreiStatusEqualTo(CodeConst.SeikyuHenreiStatus.SEIKYU_MACHI);
}
// 返戻の場合
else {
// 請求返戻ステータス:「返戻待ち」
criteria.andSeikyuHenreiStatusEqualTo(CodeConst.SeikyuHenreiStatus.HENREI_MACHI);
}
// 検索結果
List<TSeikyuhenreikanri> seikyuhenreikanriList = SeikyuhenreikanriUtil.select(selectParam);
if (ListUtil.isEmpty(seikyuhenreikanriList)) {
throw new LogicException(MsgUtil.getMsg(MsgUtil.MSG_A_00003,
SeikyuhenreiConst.SEIKYUHENREIKANRINO + StringConst.COLON + inputBean.getSeikyuHenreiKanriNO()));
}
// 請求返戻管理情報を格納
return seikyuhenreikanriList.get(0);
}
/**
* 請求取消メイン処理(コンビニ・ペイジーかつ入金待ち以外の場合)
* 返戻取消メイン処理(すべてのパターン)
*
* @param inputBean 入力情報
* @param seikyuhenreikanri 請求返戻管理情報
* @param systemDate システム日付
* @return 結果マップ
* @throws Exception
*/
public static Map<String, Object> doTorikeshiMain(SeikyuhenreiInputBean inputBean,
TSeikyuhenreikanri seikyuhenreikanri, Date systemDate) throws Exception {
// 取消日時:システム日時
seikyuhenreikanri.setTorikeshiDate(systemDate);
// 請求返戻ステータス:「取消済み」
seikyuhenreikanri.setSeikyuHenreiStatus(CodeConst.SeikyuHenreiStatus.TORIKESHI_ZUMI);
// 更新処理
SeikyuhenreikanriUtil.update(seikyuhenreikanri);
return createResultMap(inputBean, SeikyuhenreiConst.RESULTCD_OK, seikyuhenreikanri.getSeikyuHenreiKanriNO(),
seikyuhenreikanri.getSeikyuHenreiStatus());
}
/**
* 請求登録時、請求返戻管理更新処理(0円の場合)
*
* @param seikyuhenreikanri 請求返戻管理情報
* @param shunohoho 収納方法
* @param gyoumuDate 業務日付
* @param seikyuHenreiIraiDate 請求返戻依頼日
* @param seikyuhenreikaisu 請求返戻回数
* @return 請求返戻管理情報
* @throws Exception
*
*/
private static TSeikyuhenreikanri updateSeikyuhenreikanri(TSeikyuhenreikanri seikyuhenreikanri, String shunohoho,
Date gyoumuDate, Date seikyuHenreiIraiDate, Integer seikyuhenreikaisu) throws Exception {
// 請求返戻ステータス:入金済み
seikyuhenreikanri.setSeikyuHenreiStatus(CodeConst.SeikyuHenreiStatus.NYUKIN_ZUMI);
// 収納方法_実績
seikyuhenreikanri.setShunoHohoJisseki(shunohoho);
// 仮想口座の場合、請求返戻回数を更新しない
if (null != seikyuhenreikaisu) {
// 請求返戻回数
seikyuhenreikanri.setSeikyuHenreiKaisu(seikyuhenreikaisu);
}
// 決済金額:"0"
seikyuhenreikanri.setKessaiKingaku(SeikyuhenreiConst.KESSAIKINGAKU_ZERO);
// 請求返戻依頼日
seikyuhenreikanri.setSeikyuHenreiIraiDate(seikyuHenreiIraiDate);
// 入金処理日
seikyuhenreikanri.setNyukinShoriDate(gyoumuDate);
// 更新とリターン
return SeikyuhenreikanriUtil.update(seikyuhenreikanri);
}
/**
* 請求登録時、請求返戻管理登録Bean作成
*
* @param inputBean 入力情報
* @param gyoumuDate 業務日付
* @param shunoDaikoKaishaCD 収納代行会社コード
* @param saiSeikyuSaiHenreiTaishoFLG 再請求再返戻対象フラグ
* @param shiharaiKigen 支払期限
* @return 請求返戻管理登録Bean
* @throws Exception
*/
public static TSeikyuhenreikanri insertSeikyuhenreikanri(SeikyuhenreiInputBean inputBean, Date gyoumuDate,
String shunoDaikoKaishaCD, String saiSeikyuSaiHenreiTaishoFLG, Date shiharaiKigen) throws Exception {
TSeikyuhenreikanri seikyuhenreikanri = new TSeikyuhenreikanri();
// システムコード
seikyuhenreikanri.setSystemCD(RequestContext.getSystemCD());
// 処理中ステータス:非処理中
seikyuhenreikanri.setShorichuStatus(CodeConst.ShorichuStatus.HI_SHORICHU);
// 請求返戻ステータス:請求待ち
seikyuhenreikanri.setSeikyuHenreiStatus(CodeConst.SeikyuHenreiStatus.SEIKYU_MACHI);
// 請求返戻区分
seikyuhenreikanri.setSeikyuHenreiKBN(inputBean.getSeikyuHenreiKBN());
// 即時予定区分
seikyuhenreikanri.setSokujiYoteiKBN(inputBean.getSokujiYoteiKBN());
// 請求返戻金額
seikyuhenreikanri.setSeikyuHenreiKingaku(Long.parseLong(inputBean.getKessaiKingaku()));
// 請求返戻回数:"0"
seikyuhenreikanri.setSeikyuHenreiKaisu(SeikyuhenreiConst.SEIKYUHENREIKAISU_ZERO);
// 収納方法_予定
seikyuhenreikanri.setShunoHohoYotei(inputBean.getKessaihoho());
// 請求返戻予定日
if (CodeConst.SokujiYoteiKbn.SOKUJI.equals(inputBean.getSokujiYoteiKBN())) {
// 即時の場合、業務日付
seikyuhenreikanri.setSeikyuHenreiYoteiDate(gyoumuDate);
} else {
// 予定の場合
seikyuhenreikanri.setSeikyuHenreiYoteiDate(DateUtil.stringToDate(inputBean.getSeikyuHenreiYoteiDate(),
DateUtil.YYYYMMDD));
}
// 支払・送金依頼期限
seikyuhenreikanri.setShiharaiSokinIraiKigen(shiharaiKigen);
// 再請求再返戻対象フラグ
if (StringUtil.isNotEmpty(saiSeikyuSaiHenreiTaishoFLG)) {
seikyuhenreikanri.setSaiSeikyuSaiHenreiTaishoFLG(Byte.valueOf(saiSeikyuSaiHenreiTaishoFLG));
}
// 収納代行会社依頼ステータス:未処理
seikyuhenreikanri.setShunoDaikoKaishaIraiStatus(CodeConst.ShunoDaikoKaishaIraiStatus.MI_SHORI);
// 領収元区分
if (SeikyuhenreiConst.AGENT_RYOSHULIST.contains(inputBean.getKessaihoho())) {
// 代理店領収
seikyuhenreikanri.setRyoshuMotoKBN(CodeConst.RyoshuMotoKbn.AGENT_RYOSHU);
} else {
// JI領収
seikyuhenreikanri.setRyoshuMotoKBN(CodeConst.RyoshuMotoKbn.JI_RYOSHU);
}
// 収納代行会社コード
seikyuhenreikanri.setShunoDaikoKaishaCD(shunoDaikoKaishaCD);
// マイページユーザーID
seikyuhenreikanri.setMyPageUserID(Long.parseLong(inputBean.getMyPageUserID()));
// 次期配信かつHOST計上不要フラグが'true'の場合
if (SeikyuhenreiConst.SHUNOHOHO_JIKIHAISHINLIST.contains(inputBean.getKessaihoho())
&& StringConst.TRUE.equalsIgnoreCase(inputBean.getHostKeijofuyoFlg())) {
// 精算データホスト連携ステータス:連携不要
seikyuhenreikanri.setSeisanDataHostRenkeiStatus(CodeConst.SeisanDataHostRenkeiStatus.RENKEI_FUYO);
// 伝票データホスト連携ステータス:連携不要
seikyuhenreikanri.setDempyoDataHostRenkeiStatus(CodeConst.DempyoDataHostRenkeiStatus.RENKEI_FUYO);
}
// 上記以外の場合
else {
// 精算データホスト連携ステータス:未処理
seikyuhenreikanri.setSeisanDataHostRenkeiStatus(CodeConst.SeisanDataHostRenkeiStatus.MI_SHORI);
// 伝票データホスト連携ステータス:未処理
seikyuhenreikanri.setDempyoDataHostRenkeiStatus(CodeConst.DempyoDataHostRenkeiStatus.MI_SHORI);
}
return SeikyuhenreikanriUtil.insert(seikyuhenreikanri);
}
/**
* 返戻登録時、請求返戻管理登録Bean作成
*
* @param inputBean 入力情報
* @param shunoDaikoKaishaCD 収納代行会社コード
* @param systemDate システム日付
* @return 請求返戻管理登録Bean
* @throws Exception
*/
public static TSeikyuhenreikanri insertHenreiTorokuSeikyuhenreikanri(SeikyuhenreiInputBean inputBean, String shunoDaikoKaishaCD, Date systemDate)
throws Exception {
TSeikyuhenreikanri seikyuhenreikanri = new TSeikyuhenreikanri();
// システムコード
seikyuhenreikanri.setSystemCD(RequestContext.getSystemCD());
// 処理中ステータス:非処理中
seikyuhenreikanri.setShorichuStatus(CodeConst.ShorichuStatus.HI_SHORICHU);
// 請求返戻ステータス:返戻待ち
seikyuhenreikanri.setSeikyuHenreiStatus(CodeConst.SeikyuHenreiStatus.HENREI_MACHI);
// 請求返戻区分
seikyuhenreikanri.setSeikyuHenreiKBN(CodeConst.SeikyuHenreiKbn.HENREI);
// 即時予定区分
seikyuhenreikanri.setSokujiYoteiKBN(CodeConst.SokujiYoteiKbn.SOKUJI);
// 請求返戻金額
seikyuhenreikanri.setSeikyuHenreiKingaku(Long.parseLong(inputBean.getKessaiKingaku()));
// 請求返戻回数:"0"
seikyuhenreikanri.setSeikyuHenreiKaisu(SeikyuhenreiConst.SEIKYUHENREIKAISU_ZERO);
// 収納方法_予定
seikyuhenreikanri.setShunoHohoYotei(inputBean.getKessaihoho());
// 請求返戻予定日
seikyuhenreikanri.setSeikyuHenreiYoteiDate(systemDate);
// コンビニ・口座振込返戻の場合
if (SeikyuhenreiConst.SHUNOHOHO_SOKINLIST.contains(inputBean.getKessaihoho())) {
// 支払・送金依頼期限
seikyuhenreikanri.setShiharaiSokinIraiKigen(
DateUtil.stringToDate(inputBean.getSokinIraiKigen(), DateUtil.YYYYMMDDHHMM_2));
}
// 収納代行会社依頼ステータス:未処理
seikyuhenreikanri.setShunoDaikoKaishaIraiStatus(CodeConst.ShunoDaikoKaishaIraiStatus.MI_SHORI);
// 収納代行会社コード
seikyuhenreikanri.setShunoDaikoKaishaCD(shunoDaikoKaishaCD);
// マイページユーザーID
seikyuhenreikanri.setMyPageUserID(Long.parseLong(inputBean.getMyPageUserID()));
// 次期配信かつHOST計上不要フラグが'true'の場合
if (SeikyuhenreiConst.SHUNOHOHO_JIKIHAISHINLIST.contains(inputBean.getKessaihoho())
&& StringConst.TRUE.equalsIgnoreCase(inputBean.getHostKeijofuyoFlg())) {
// 精算データホスト連携ステータス:連携不要
seikyuhenreikanri.setSeisanDataHostRenkeiStatus(CodeConst.SeisanDataHostRenkeiStatus.RENKEI_FUYO);
// 伝票データホスト連携ステータス:連携不要
seikyuhenreikanri.setDempyoDataHostRenkeiStatus(CodeConst.DempyoDataHostRenkeiStatus.RENKEI_FUYO);
}
// 上記以外の場合
else {
// 精算データホスト連携ステータス:未処理
seikyuhenreikanri.setSeisanDataHostRenkeiStatus(CodeConst.SeisanDataHostRenkeiStatus.MI_SHORI);
// 伝票データホスト連携ステータス:未処理
seikyuhenreikanri.setDempyoDataHostRenkeiStatus(CodeConst.DempyoDataHostRenkeiStatus.MI_SHORI);
}
return SeikyuhenreikanriUtil.insert(seikyuhenreikanri);
}
/**
* 請求登録時、請求返戻明細と請求返戻商品管理登録
*
* @param inputBean 入力情報
* @param seikyuhenreikanriNO 登録された請求返戻管理番号
* @throws Exception
*
*/
public static void insertMeisaiAndShohinkanri(SeikyuhenreiInputBean inputBean, long seikyuhenreikanriNO)
throws Exception {
// 請求返戻明細登録リスト
List<TSeikyuhenreimeisai> meisaiList = new ArrayList<TSeikyuhenreimeisai>();
// 請求返戻商品登録リスト
List<TSeikyuhenreishohinkanri> shohinkanriList = new ArrayList<TSeikyuhenreishohinkanri>();
// 入力の明細リスト
for (SeikyuHenreiMeisai meisai : inputBean.getSeikyuHenreiMeisaiList()) {
// 請求返戻明細
TSeikyuhenreimeisai insertMeisaiBean = createSeikyuhenreimeisaiBean(seikyuhenreikanriNO, meisai);
meisaiList.add(insertMeisaiBean);
// 請求返戻商品
TSeikyuhenreishohinkanri shohinkanri = createSeikyuhenreishohinkanriBean(seikyuhenreikanriNO,
inputBean.getLineCD(), meisai);
shohinkanriList.add(shohinkanri);
}
SeikyuhenreimeisaiUtil.insert(meisaiList);
SeikyuhenreishohinkanriUtil.insert(shohinkanriList);
}
/**
* 請求登録時、請求返戻明細登録Bean作成
*
* @param seikyuHenreiKanriNO 請求返戻管理番号
* @param seikyuHenreiMeisai 入力明細情報
* @return 請求返戻管理情報
* @throws Exception
*
*/
public static TSeikyuhenreimeisai createSeikyuhenreimeisaiBean(long seikyuHenreiKanriNO,
SeikyuHenreiMeisai seikyuHenreiMeisai) throws Exception {
// 請求返戻明細
TSeikyuhenreimeisai insertMeisaiBean = new TSeikyuhenreimeisai();
insertMeisaiBean.setSeikyuHenreiKanriNO(seikyuHenreiKanriNO);
insertMeisaiBean.setEdaban(seikyuHenreiMeisai.getEdaban());
insertMeisaiBean.setSeikyuShubetsu(seikyuHenreiMeisai.getSeikyuShubetsu());
insertMeisaiBean.setSeikyuHenreiKBN(seikyuHenreiMeisai.getSeikyuHenreiKBN());
insertMeisaiBean.setKessaiKingaku(Long.parseLong(seikyuHenreiMeisai.getKessaiKingaku()));
insertMeisaiBean.setHaraikomihoho(seikyuHenreiMeisai.getHaraikomihoho());
if (StringUtil.isNotEmpty(seikyuHenreiMeisai.getSeikyuKaime())) {
insertMeisaiBean.setSeikyuKaime(Short.parseShort(seikyuHenreiMeisai.getSeikyuKaime()));
}
if (StringUtil.isNotEmpty(seikyuHenreiMeisai.getHaraikomiKaisu())) {
insertMeisaiBean.setHaraikomiKaisu(Short.parseShort(seikyuHenreiMeisai.getHaraikomiKaisu()));
}
return insertMeisaiBean;
}
/**
* 請求登録時、請求返戻商品管理登録Bean作成
*
* @param seikyuHenreiKanriNO 請求返戻管理番号
* @param lineCD ラインコード
* @param seikyuHenreiMeisai 請求返戻明細情報
* @return 請求返戻管理情報
* @throws Exception
*
*/
public static TSeikyuhenreishohinkanri createSeikyuhenreishohinkanriBean(long seikyuHenreiKanriNO, String lineCD,
SeikyuHenreiMeisai seikyuHenreiMeisai) throws Exception {
// 請求返戻商品管理
TSeikyuhenreishohinkanri insertShohinkanriBean = new TSeikyuhenreishohinkanri();
insertShohinkanriBean.setLineCD(lineCD);
insertShohinkanriBean.setKeiyakuShoNO(seikyuHenreiMeisai.getKeiyakuShouNO());
insertShohinkanriBean.setSosaNO(Long.parseLong(seikyuHenreiMeisai.getSosaNO()));
insertShohinkanriBean.setSeikyuHenreiKanriNO(seikyuHenreiKanriNO);
insertShohinkanriBean.setEdaban(seikyuHenreiMeisai.getEdaban());
return insertShohinkanriBean;
}
/**
* 文字変換
*
* @param item 値
* @param itemName 項目名称
* @return 転換された値
* @throws Exception
*
*/
public static String convert(String itemName, String item) throws Exception {
LOGGER.debug(itemName + SeikyuhenreiConst.CONVERTBEFORE + item);
String itemAfter = MojiHenkanUtil.converMojiretsuByHenkanmst(item);
LOGGER.debug(itemName + SeikyuhenreiConst.CONVERTAFTER + itemAfter);
return itemAfter;
}
}
日本 Japan
·日本中文新闻 唐田绘里香为新剧《极恶女王》剃光头 展现演员决心
·日本中文新闻 真子小室夫妇新居引发隐私担忧
·日本中文新闻 前AKB48成员柏木由纪与搞笑艺人交往曝光
·日本学校 {日本国际学校}梅田インターナショナルスクール
·日本学校 LINE:sm287 陳雨菲、20歳、台湾からの留学生、東京に来たばかり
·日本留学生活 出售平成22年走行48000km 代步小车
·日本华人网络交流 円相場 一時1ドル=140円台まで上昇?
·日本华人网络交流 问日本华人一个问题
·日本旅游代购 富山接机
·生活百科 英国转澳大利亚转换插头
·汽车 【求助】修车遇到困难怎么办?