fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java
@@ -258,7 +258,7 @@ if (list == null || list.size() == 0) { List<ESOrder> listES = esOrderService.query(key, uid.toString(), null); if (listES.size() != 0) { list = commonOrderService.searchOrderByUid(page, Constant.PAGE_SIZE, uid, listES); list = commonOrderService.searchOrderByUid(acceptData, page, Constant.PAGE_SIZE, uid, listES); count = commonOrderService.countSearchOrderByUid(uid, listES); } } else { fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/OrderController.java
@@ -313,7 +313,11 @@ List<ESOrder> listES = esOrderService.query(key, uid.toString(), listSource); if (listES.size() != 0) { list = commonOrderService.searchOrderByUid(page, Constant.PAGE_SIZE, uid, listES); // 2.1版本 AcceptData acceptData = new AcceptData(); acceptData.setPlatform("android"); acceptData.setVersion("56"); list = commonOrderService.searchOrderByUid(acceptData, page, Constant.PAGE_SIZE, uid, listES); count = commonOrderService.countSearchOrderByUid(uid, listES); } fanli/src/main/java/com/yeshi/fanli/dto/msg/MsgAccountVipDTO.java
@@ -9,6 +9,7 @@ public class MsgAccountVipDTO { private String status; // 状态 private String equity; // 权益 private String reason; // 原因 public String getStatus() { return status; @@ -26,4 +27,12 @@ this.equity = equity; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderMapper.xml
@@ -163,7 +163,7 @@ co_order_goods_id,co_count,co_state,co_state_whole_order, co_estimate,co_eIncome,co_payment,co_settlement, co_third_create_time, MAX(co_settle_time) AS co_settle_time, co_order_by, co_create_time, co_update_time,co_state_desc co_update_time,co_state_desc,co_urank </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long"> fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -74,6 +74,7 @@ import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.util.user.UserLevelUtil; import com.yeshi.fanli.vo.msg.ClientTextStyleVO; import com.yeshi.fanli.vo.order.CommonOrderGoodsVO; import com.yeshi.fanli.vo.order.CommonOrderVO; @@ -211,7 +212,11 @@ } // 数据加工重新组织 orderVOFactory(acceptData, listOrder, listGoods, uid); if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { orderVOFactoryNew(acceptData, listOrder, listGoods, uid); } else { orderVOFactory(acceptData, listOrder, listGoods, uid); } return listOrder; } @@ -268,21 +273,38 @@ } Map<Long, Boolean> vipUserMap = userVIPInfoService.listByUids(needSelectVIPUidList); // 设置是否为vip订单 for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { if (vipUserMap.get(Long.parseLong(order.getUserId())) != null && vipUserMap.get(Long.parseLong(order.getUserId())) == true) order.setVipOrder(true); else if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { Integer urank = order.getUrank(); if (urank != null) { String levelName = UserLevelUtil.getLevelName(urank); if (!StringUtil.isNullOrEmpty(levelName)) { order.setOrderDesc(levelName); } } } } } else { // 设置是否为vip订单 for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { if (vipUserMap.get(Long.parseLong(order.getUserId())) != null && vipUserMap.get(Long.parseLong(order.getUserId())) == true) order.setVipOrder(true); else order.setVipOrder(false); } else order.setVipOrder(false); } else order.setVipOrder(false); if (order.isVipOrder()) order.setVipOrderDesc("订单来源:由超级会员的粉丝产生"); if (order.isVipOrder()) order.setVipOrderDesc("订单来源:由超级会员的粉丝产生"); } } SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); @@ -1694,7 +1716,7 @@ } @Override public List<CommonOrderVO> searchOrderByUid(int page, int size, Long uid, List<ESOrder> list) throws Exception { public List<CommonOrderVO> searchOrderByUid(AcceptData acceptData, int page, int size, Long uid, List<ESOrder> list) throws Exception { List<CommonOrderVO> listVO = commonOrderMapper.searchOrderByUid((page - 1) * size, size, uid, list); // 订单信息为空 @@ -1711,7 +1733,7 @@ } // 数据加工重新组织 orderVOFactoryNew(listVO, listGoods, uid); orderVOFactoryNew(acceptData, listVO, listGoods, uid); return listVO; } @@ -1724,7 +1746,7 @@ * @param listGoods * @param uid */ private void orderVOFactoryNew(List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) private void orderVOFactoryNew(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) throws Exception { List<String> listTB = new ArrayList<String>(); List<String> listJD = new ArrayList<String>(); @@ -1768,22 +1790,40 @@ } Map<Long, Boolean> vipUserMap = userVIPInfoService.listByUids(needSelectVIPUidList); // 设置是否为vip订单 for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { if (vipUserMap.get(Long.parseLong(order.getUserId())) != null && vipUserMap.get(Long.parseLong(order.getUserId())) == true) order.setVipOrder(true); else if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { Integer urank = order.getUrank(); if (urank != null) { String levelName = UserLevelUtil.getLevelName(urank); if (!StringUtil.isNullOrEmpty(levelName)) { order.setOrderDesc(levelName); } } } } } else { // 设置是否为vip订单 for (CommonOrderVO order : listOrder) { if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) { if (vipUserMap.get(Long.parseLong(order.getUserId())) != null && vipUserMap.get(Long.parseLong(order.getUserId())) == true) order.setVipOrder(true); else order.setVipOrder(false); } else order.setVipOrder(false); } else order.setVipOrder(false); if (order.isVipOrder()) order.setVipOrderDesc("订单来源:由超级会员的粉丝产生"); if (order.isVipOrder()) order.setVipOrderDesc("订单来源:由超级会员的粉丝产生"); } } SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd"); @@ -1794,11 +1834,17 @@ boolean vip = userVIPInfoService.isVIP(uid); // 是否存在奖励券 boolean hasRewardCoupon = userSystemCouponService.getValidRebateCoupon(uid); long nowTime = java.lang.System.currentTimeMillis(); for (CommonOrderVO order : listOrder) { String orderNo = order.getOrderNo(); Integer sourceType = order.getSourceType(); Integer hongBaoType = order.getHongBaoType(); BigDecimal totalPay = new BigDecimal(0); BigDecimal totalActual = new BigDecimal(0); // 商品信息组合 for (CommonOrderVO commonOrder : listGoods) { CommonOrderGoods goods = commonOrder.getCommonOrderGoods(); @@ -1827,8 +1873,19 @@ totalSettlement = commonOrder.getTotalPayment(); } commonGoodsVO.setActualPay("付款金额:¥" + totalSettlement); totalPay = MoneyBigDecimalUtil.add(totalPay, totalSettlement); Integer hongBaoType = order.getHongBaoType(); // 商品价格 BigDecimal actualPrice = commonGoodsVO.getActualPrice(); if (actualPrice != null) { Integer totalCount = commonOrder.getTotalCount(); totalActual = MoneyBigDecimalUtil.add(totalActual, MoneyBigDecimalUtil.mul(new BigDecimal(totalCount), actualPrice)); } // 邀请订单信息保护 if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType @@ -1862,6 +1919,16 @@ order.setObtainTime(thirdCreateTime.getTime()); } // 2.1分享订单和返利订单实付金额大于或者小于券后价的时候,订单页面 只显示3天 下单时间开始 if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType && DateUtil.plusDayDate(3, thirdCreateTime).getTime() > nowTime && totalPay.compareTo(totalActual) != 0) { order.setFanliDesc("由实付金额*返利比计算而来"); order.setFanliDescLink(configService.get(ConfigKeyEnum.shareOrderRebateDescLink.getKey())); } } Date settleTime = order.getSettleTime(); if (settleTime != null) { order.setReceiveTime("收货时间:" + format.format(settleTime)); @@ -1936,7 +2003,6 @@ // 订单标识 List<String> signList = new ArrayList<String>(); /* 订单返利类型 转换 */ Integer hongBaoType = order.getHongBaoType(); if (HongBaoV2.TYPE_ZIGOU == hongBaoType || 2 == hongBaoType) { // 自购 hongbaoInfo = "返利"; fanli/src/main/java/com/yeshi/fanli/service/impl/user/QrCodeServiceImpl.java
@@ -60,6 +60,12 @@ InputStream portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像 InputStream erCodeInputStream = new FileInputStream(new File(erCodeTempPath)); // 二维码 // 官方默认头像 if (portraitInputStream == null) { portraitInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official_icon.png"); } // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.inviteFriendImg(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode); @@ -109,6 +115,11 @@ InputStream portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像 InputStream erCodeInputStream = new FileInputStream(new File(erCodeTempPath)); // 二维码 // 官方默认头像 if (portraitInputStream == null) { portraitInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official_icon.png"); } // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.inviteFriendImg(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, erCodePostionX, erCodePostionY, erCodeSize, inviteCode); @@ -161,7 +172,6 @@ portraitInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official_icon.png"); } else { targetPath = FileUtil.getCacheDir() + "/share_" + uid + "_" + System.currentTimeMillis() + ".jpg"; erCodeTempPath = FileUtil.getCacheDir() + "/" + uid + "_" + System.currentTimeMillis() + ".jpg"; @@ -175,7 +185,13 @@ portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像 erCodeInputStream = new FileInputStream(new File(erCodeTempPath)); // 二维码 } // 官方默认头像 if (portraitInputStream == null) { portraitInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official_icon.png"); } // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.inviteFriendImgWhitecustom(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, pX, pY, size, inviteCode); @@ -247,6 +263,11 @@ portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像 } // 官方默认头像 if (portraitInputStream == null) { portraitInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official_icon.png"); } // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.drawInviteToGreet(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode, content, date); fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java
@@ -582,6 +582,7 @@ // 队员 long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1); long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1); if (countZiGou >= Constant.VIP_PROCESS_3_ZIGOU || countShare >= Constant.VIP_PROCESS_3_SHARE || (firstTeam >= Constant.VIP_PROCESS_3_TEAM && secondTeam >= Constant.VIP_PROCESS_3_TEAM_SECOND)) { return true; @@ -607,6 +608,10 @@ info.setUpdateTime(new Date()); userVIPInfoMapper.updateByPrimaryKeySelective(info); // TODO消息 // 消息 MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); msgDto.setStatus("你的账号仍是高级会员"); msgDto.setReason(reason); msgAccountDetailService.addMsgVIP(uid, "很抱歉!经人工审核你未满足或不符合升级超级会员的条件", "如有疑问请联系我的-人工客服", msgDto); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java
@@ -108,7 +108,7 @@ } // 邀请订单 long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, long countZiGou =hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_ZIGOU); // 邀请订单 long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, fanli/src/main/java/com/yeshi/fanli/service/inter/order/CommonOrderService.java
@@ -372,7 +372,7 @@ * @param list * @return */ public List<CommonOrderVO> searchOrderByUid(int page, int size, Long uid, List<ESOrder> list) throws Exception; public List<CommonOrderVO> searchOrderByUid(AcceptData acceptData, int page, int size, Long uid, List<ESOrder> list) throws Exception; public long countSearchOrderByUid(Long uid, List<ESOrder> list); fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -173,7 +173,7 @@ public static final int TLJ_NEW_USER_DEFINE = 10; // vip奖励券券5张 public static final int VIP_COUPON_REWARD_NUM = 30; public static final int VIP_COUPON_REWARD_NUM = 15; // vip赠送免单券5张 public static final int VIP_COUPON_GIVEFREE_NUM = 5; // vip赠送金币 fanli/src/main/java/com/yeshi/fanli/util/factory/msg/UserMsgVOFactory.java
@@ -988,27 +988,33 @@ if (msg.getType() == MsgTypeAccountTypeEnum.vipPgrade) {// 等级升级 contentList.add(new ClientTextStyleVO(msg.getTitle() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("详情", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("详 情", COLOR_TITLE), contentList)); MsgAccountVipDTO dto = new Gson().fromJson(msg.getContent(), MsgAccountVipDTO.class); if (dto != null) { if (!StringUtil.isNullOrEmpty(dto.getStatus())) { contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(dto.getStatus() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("状态", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("状 态", COLOR_TITLE), contentList)); } if (!StringUtil.isNullOrEmpty(dto.getEquity())) { contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(dto.getEquity() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("权益", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("权 益", COLOR_TITLE), contentList)); } if (!StringUtil.isNullOrEmpty(dto.getReason())) { contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(dto.getReason() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("原 因", COLOR_TITLE), contentList)); } } contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(StringUtil.isNullOrEmpty(msg.getBeiZhu()) ? "无" : msg.getBeiZhu() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("备注", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("备 注", COLOR_TITLE), contentList)); return new UserMsgVO("http://img.flqapp.com/resource/msg/icon_msg_account.png", msg.getType().getDesc(), msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(), items); @@ -1022,12 +1028,12 @@ contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(msg.getContent() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("说明", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("说 明", COLOR_TITLE), contentList)); contentList = new ArrayList<>(); contentList.add(new ClientTextStyleVO(StringUtil.isNullOrEmpty(msg.getBeiZhu()) ? "无" : msg.getBeiZhu() + "", COLOR_CONTENT)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("备注", COLOR_TITLE), contentList)); items.add(new CommonMsgItemVO(new ClientTextStyleVO("备 注", COLOR_TITLE), contentList)); return new UserMsgVO("http://img.flqapp.com/resource/msg/icon_msg_account.png", msg.getType().getDesc(), msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(), items); fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserVIPMessageListener.java
@@ -13,7 +13,6 @@ import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg; import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; import com.yeshi.fanli.dto.mq.user.body.UserInviteMQMsg; import com.yeshi.fanli.exception.money.OrderMoneySettleException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService; import com.yeshi.fanli.util.rocketmq.MQTopicName; fanli/src/main/java/com/yeshi/fanli/util/user/UserLevelUtil.java
New file @@ -0,0 +1,25 @@ package com.yeshi.fanli.util.user; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; public class UserLevelUtil { public static String getLevelName(int orderRank) { if (orderRank == UserLevelEnum.daRen.getOrderRank()) { return UserLevelEnum.daRen.getName(); } if (orderRank == UserLevelEnum.normalVIP.getOrderRank()) { return UserLevelEnum.normalVIP.getName(); } if (orderRank == UserLevelEnum.highVIP.getOrderRank()) { return UserLevelEnum.highVIP.getName(); } if (orderRank == UserLevelEnum.superVIP.getOrderRank()) { return UserLevelEnum.superVIP.getName(); } return null; } } fanli/src/main/java/com/yeshi/fanli/vo/order/CommonOrderVO.java
@@ -123,15 +123,18 @@ private Integer otherState; // 1免单 @Expose private boolean vipOrder;// 是否为超级用户订单 private boolean vipOrder;// 是否为超级用户订单(2.1之后废弃) @Expose private String vipOrderDesc;// 超级订单描述 private String vipOrderDesc;// 超级订单描述(2.1之后废弃) @Expose private String fanliDesc;// 返利说明 @Expose private String fanliDescLink;// 返利说明链接 @Expose private String orderDesc;// 订单描述 public String getVipOrderDesc() { @@ -453,5 +456,13 @@ public void setFanliDescLink(String fanliDescLink) { this.fanliDescLink = fanliDescLink; } public String getOrderDesc() { return orderDesc; } public void setOrderDesc(String orderDesc) { this.orderDesc = orderDesc; } } fanli/src/main/resource/rocket/consumer.xml
@@ -211,6 +211,48 @@ </bean> <!-- 邀请图修改消息订阅 --> <bean id="userVIPMessageListener" class="com.yeshi.fanli.util.rocketmq.consumer.user.UserVIPMessageListener"></bean> <!-- Group ID 订阅同一个 Topic,可以创建多个 ConsumerBean --> <bean id="userVIPConsumer" class="com.aliyun.openservices.ons.api.bean.ConsumerBean" init-method="start" destroy-method="shutdown"> <property name="properties"> <!--消费者配置信息 --> <props> <prop key="AccessKey">${rocketmq.AccessKey}</prop> <prop key="SecretKey">${rocketmq.SecretKey}</prop> <prop key="GROUP_ID">GID_USER_VIP</prop> <prop key="NAMESRV_ADDR">${rocketmq.NAMESRV_ADDR}</prop> <prop key="ConsumeThreadNums">50</prop> </props> </property> <property name="subscriptionTable"> <map> <!-- 邀请队员成功 --> <entry value-ref="userVIPMessageListener"> <key> <bean class="com.aliyun.openservices.ons.api.bean.Subscription"> <property name="topic" value="TOPIC_USER" /> <property name="expression" value="inviteSuccess" /> </bean> </key> </entry> <!-- 订单到账 --> <entry value-ref="userVIPMessageListener"> <key> <bean class="com.aliyun.openservices.ons.api.bean.Subscription"> <property name="topic" value="TOPIC_ORDER" /> <property name="expression" value="orderFanLiActual" /> </bean> </key> </entry> </map> </property> </bean> </beans>