yujian
2019-11-07 64a1ca289eda4deb422549311c4539b09fd30ba3
Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div
1个文件已添加
12个文件已修改
245 ■■■■■ 已修改文件
.gitignore 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/.classpath 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/.gitignore 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/help/AppPageNotification.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/QrCodeServiceImpl.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/UserInviteUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/RedPackDetailFactory.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/env-dev/spring.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/env-pro/rocket/consumer.xml 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/test/java/org/fanli/MyBatisProduce.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/.classpath 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/.gitignore 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -1,3 +1,4 @@
/target/
/.settings/
/.git/
/.git/
.classpath
fanli/.classpath
@@ -19,12 +19,16 @@
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resource">
    <classpathentry excluding="**" including="**/*.java" kind="src" output="target/classes" path="src/main/resource">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="libs/opush-server-sdk-1.0.3.jar"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_181"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
fanli/.gitignore
@@ -6,3 +6,5 @@
/.gitignore
/c3p0/
/logs/
.classpath
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java
@@ -49,6 +49,7 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.UserInviteUtil;
import com.yeshi.fanli.vo.redpack.RedPackDetailVO;
import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO;
import com.yeshi.fanli.vo.redpack.RedPackWinInviteVO;
@@ -382,6 +383,8 @@
        JSONObject data = new JSONObject();
        data.put("balance", redPackBalanceService.getBalance(uid));
        data.put("ruleLink", redPackConfigService.getValueByKey("invite_reward_rule_link"));
        data.put("shareLink", UserInviteUtil.getShareUrl(uid));
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
            data.put("inviteCode", userInfoExtra.getInviteCode());
fanli/src/main/java/com/yeshi/fanli/entity/bus/help/AppPageNotification.java
@@ -25,13 +25,39 @@
    // 消息类型的枚举
    public enum AppPageNotificationTypeEnum {
        home("首页"), coupon("优惠券页"), invite("邀请有奖页"), activity("动态"), goodsDetail("详情过度页"), mine("我的"), money(
                "资金"), accountDetail("账户明细"), extract("提现"), orderFanli("返利订单"), orderTiCheng("提成订单"), orderTaoBao(
                        "淘宝订单"), coollect("收藏"), scanHistory("足迹"), team("队员"), kefu("联系客服"), taoBaoShoppingCart(
                                "淘宝购物车"), orderFind("订单申诉"), msgCenter("消息中心"), newOrder("订单"), shareHistory(
                                        "分享记录"), goodsStorage(
                                                "选品库"), tlj("分享爆款详情"), tlj_buy("自购立减详情"), hongbao_balance("红包余额"),
        goodsDetailJD("京东详情"),goodsDetailPDD("拼多多详情"),orderFindJD("拼多多订单找回"),orderFindPDD("京东订单找回");
        home("首页"),
        coupon("优惠券页"),
        invite("邀请有奖页"),
        activity("动态"),
        goodsDetail("详情过度页"),
        mine("我的"),
        money("资金"),
        accountDetail("账户明细"),
        extract("提现"),
        orderFanli("返利订单"),
        orderTiCheng("提成订单"),
        orderTaoBao("淘宝订单"),
        coollect("收藏"),
        scanHistory("足迹"),
        team("队员"),
        kefu("联系客服"),
        taoBaoShoppingCart("淘宝购物车"),
        orderFind("订单申诉"),
        msgCenter("消息中心"),
        newOrder("订单"),
        shareHistory("分享记录"),
        goodsStorage("选品库"),
        tlj("分享爆款详情"),
        tlj_buy("自购立减详情"),
        hongbao_balance("红包余额"),
        goodsDetailJD("京东详情"),
        goodsDetailPDD("拼多多详情"),
        orderFindJD("拼多多订单找回"),
        orderFindPDD("京东订单找回"),
        shareSingle("商品详情单图分享"),
        dynamicShareSingle("动态单图分享"),
        dynamicShareMulti("动态多图分享");
        private final String desc;
        private AppPageNotificationTypeEnum(String desc) {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/QrCodeServiceImpl.java
@@ -21,6 +21,7 @@
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.UserInviteUtil;
@Service
public class QrCodeServiceImpl implements QrCodeService {
@@ -131,21 +132,21 @@
        }
        return null;
    }
    @Override
    public String drawInviteQrCodeNew(String url, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException {
    public String drawInviteQrCodeNew(String url, Long uid, String portrait, Integer pX, Integer pY, Integer size,
            String inviteCode) throws IOException {
        if (StringUtil.isNullOrEmpty(url)) {
            return null;
        }
        String targetPath = null;
        String erCodeTempPath = null;
        InputStream erCodeInputStream  = null; // 二维码
        InputStream erCodeInputStream = null; // 二维码
        InputStream portraitInputStream = null; // 头像
        InputStream urlInputStream = HttpUtil.getAsInputStream(url); // 背景
        String uuid = UUID.randomUUID().toString().replace("-", "");
        if (uid == null) {
            targetPath = FileUtil.getCacheDir() + "/share_" + uuid + "_" + System.currentTimeMillis() + ".jpg";
@@ -155,44 +156,43 @@
            erCodeInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official.png");
            // 官方默认头像
            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";
            String erCode = ("http://" + Constant.wxGZConfig.getLoginHost() + "/"
                    + Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid);
            String erCode = UserInviteUtil.getShareUrl(uid);
            // 生成
            try {
                QRCodeUtil.getInstance(250).encode(erCode, erCodeTempPath);
            } catch (Exception e) {
                e.printStackTrace();
            }
            urlInputStream = HttpUtil.getAsInputStream(url); // 背景
            portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像
            erCodeInputStream = new FileInputStream(new File(erCodeTempPath)); // 二维码
        }
        // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片
        ImageUtil.inviteFriendImgWhitecustom(urlInputStream, portraitInputStream, erCodeInputStream, targetPath,
             pX, pY, size, inviteCode);
        ImageUtil.inviteFriendImgWhitecustom(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, pX, pY,
                size, inviteCode);
        // 删除二维码文件
        if(erCodeInputStream != null) {
        if (erCodeInputStream != null) {
            erCodeInputStream.close();
        }
        if (erCodeTempPath != null && new File(erCodeTempPath).exists()) {
            new File(erCodeTempPath).delete();
        }
        // 上传文件相对位置
        if (new File(targetPath).exists() && new File(targetPath).length() > 0) {
            int index = url.lastIndexOf("/");
            String newUrl = url.substring(index + 1);
            String urlMd5 = newUrl.substring(0, newUrl.lastIndexOf("."));
            String fileUrl= null;
            String fileUrl = null;
            if (uid == null) {
                fileUrl = "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg";
            } else {
@@ -201,7 +201,7 @@
            // 上传文件
            String imgUrl = COSManager.getInstance().uploadFile(new File(targetPath), fileUrl).getUrl();
            // 删除本地缓存文件
            new File(targetPath).delete();
@@ -209,21 +209,21 @@
        }
        return null;
    }
    @Override
    public String drawInviteToGreet(String url, Long uid, String portrait, String inviteCode, String content,
            Date date) throws IOException {
    public String drawInviteToGreet(String url, Long uid, String portrait, String inviteCode, String content, Date date)
            throws IOException {
        if (StringUtil.isNullOrEmpty(url)) {
            return null;
        }
        String targetPath = null;
        String erCodeTempPath = null;
        InputStream erCodeInputStream  = null; // 二维码
        InputStream erCodeInputStream = null; // 二维码
        InputStream portraitInputStream = null; // 头像
        InputStream urlInputStream = HttpUtil.getAsInputStream(url); // 背景
        String uuid = UUID.randomUUID().toString().replace("-", "");
        if (uid == null) {
            targetPath = FileUtil.getCacheDir() + "/share_" + uuid + "_" + System.currentTimeMillis() + ".jpg";
@@ -233,7 +233,7 @@
            erCodeInputStream = ImageUtil.class.getClassLoader().getResourceAsStream("image/official.png");
            // 官方默认头像
            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";
@@ -245,23 +245,22 @@
            } catch (Exception e) {
                e.printStackTrace();
            }
            erCodeInputStream = new FileInputStream(new File(erCodeTempPath));
            erCodeInputStream = new FileInputStream(new File(erCodeTempPath));
            portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像
        }
        // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片
        ImageUtil.drawInviteToGreet(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode, content, date);
        // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片
        ImageUtil.drawInviteToGreet(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode,
                content, date);
        // 删除二维码文件
        if(erCodeInputStream != null) {
        if (erCodeInputStream != null) {
            erCodeInputStream.close();
        }
        if (erCodeTempPath != null && new File(erCodeTempPath).exists()) {
            new File(erCodeTempPath).delete();
        }
        // 上传文件
        if (new File(targetPath).exists() && new File(targetPath).length() > 0) {
            int index = url.lastIndexOf("/");
@@ -269,7 +268,7 @@
            String urlMd5 = newUrl.substring(0, newUrl.lastIndexOf("."));
            // 上传文件相对位置
            String fileUrl= null;
            String fileUrl = null;
            if (uid == null) {
                fileUrl = "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg";
            } else {
@@ -282,7 +281,7 @@
            new File(targetPath).delete();
            return imgUrl;
        }
        }
        return null;
    }
fanli/src/main/java/com/yeshi/fanli/util/UserInviteUtil.java
New file
@@ -0,0 +1,16 @@
package com.yeshi.fanli.util;
public class UserInviteUtil {
    /**
     * 获取分享链接
     * @param uid
     * @return
     */
    public static String getShareUrl(Long uid) {
        String erCode = ("http://" + Constant.wxGZConfig.getLoginHost() + "/"
                + Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid);
        return erCode;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/factory/RedPackDetailFactory.java
@@ -25,7 +25,7 @@
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(false);
        detail.setDescInfo( "等待人工审核");
        detail.setDescInfo("等待人工审核");
        detail.setUid(exchange.getUid());
        detail.setMoney(new BigDecimal("-" + exchange.getMoney()));
        detail.setType(RedPackDetailTypeEnum.redExchange);
@@ -169,6 +169,7 @@
    }
    /**
     * 板栗商城使用
     * 
     * @param giveRecord
     * @return
@@ -183,7 +184,7 @@
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(false);
        detail.setUid(uid);
        detail.setMoney(money);
        detail.setMoney(new BigDecimal(0).subtract(money));
        detail.setType(RedPackDetailTypeEnum.useByShopOrder);
        detail.setTitle(title);
        detail.setIdentifyCode(StringUtil.Md5(RedPackDetailTypeEnum.useByShopOrder.name() + "-" + orderId));
@@ -191,10 +192,10 @@
        detail.setDescInfo(setName);
        return detail;
    }
    /**
     *  新人奖励
     * 新人奖励
     *
     * @param winInvite
     * @return
     * @throws RedPackDetailException
@@ -202,7 +203,7 @@
    public static RedPackDetail createNewUserReward(Long uid, Integer num, BigDecimal money) throws RedPackDetailException {
        if (uid == null || num == null || money == null)
            throw new RedPackDetailException(1, "获得记录不能为空");
        // 红包明细- 退回红包
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(true);
        detail.setUid(uid);
@@ -214,9 +215,10 @@
        detail.setCreateTime(new Date());
        return detail;
    }
    /**
     * 立得现金
     *
     * @param winInvite
     * @return
     * @throws RedPackDetailException
@@ -224,7 +226,7 @@
    public static RedPackDetail createInvite(RedPackWinInvite winInvite) throws RedPackDetailException {
        if (winInvite == null)
            throw new RedPackDetailException(1, "获得记录不能为空");
        // 红包明细- 退回红包
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(true);
@@ -237,9 +239,10 @@
        detail.setCreateTime(new Date());
        return detail;
    }
    /**
     * 递增奖励 + 好友完成分享订单
     *
     * @param winInvite
     * @return
     * @throws RedPackDetailException
@@ -247,7 +250,7 @@
    public static RedPackDetail createIncreaseReward(RedPackWinInvite winInvite) throws RedPackDetailException {
        if (winInvite == null)
            throw new RedPackDetailException(1, "获得记录不能为空");
        // 红包明细- 退回红包
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(true);
@@ -260,10 +263,10 @@
        detail.setCreateTime(new Date());
        return detail;
    }
    /**
     * 连续奖励 + 好友完成分享订单
     *
     * @param winInvite
     * @return
     * @throws RedPackDetailException
@@ -271,7 +274,7 @@
    public static RedPackDetail createSeriesReward(RedPackWinInvite winInvite) throws RedPackDetailException {
        if (winInvite == null)
            throw new RedPackDetailException(1, "获得记录不能为空");
        // 红包明细- 退回红包
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(true);
@@ -284,8 +287,7 @@
        detail.setCreateTime(new Date());
        return detail;
    }
    public static RedPackDetail createShopOrderDrawBack(Long orderId, Long uid, String title, String setName,
            BigDecimal money) throws RedPackDetailException {
        if (orderId == null)
fanli/src/main/resource/env-dev/spring.xml
@@ -50,6 +50,7 @@
    </bean>
    <import resource="classpath:/rocket/consumer.xml"/>
    <!-- <import resource="classpath:/rocket/consumer.xml"/> <import resource="classpath:/rocket/system-coupon-consumer.xml"/> -->
    <import resource="classpath:/rocket/producer.xml" />
    <import resource="classpath:/rocket/transactionProducer.xml" />
fanli/src/main/resource/env-pro/rocket/consumer.xml
@@ -2,7 +2,8 @@
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="inviteOrderSubsidyMsgListener" class="com.yeshi.fanli.util.rocketmq.consumer.order.InviteOrderSubsidyMessageListener"></bean> <!--Listener 配置 -->
    <bean id="inviteOrderSubsidyMsgListener"
        class="com.yeshi.fanli.util.rocketmq.consumer.order.InviteOrderSubsidyMessageListener"></bean> <!--Listener 配置 -->
    <!-- Group ID 订阅同一个 Topic,可以创建多个 ConsumerBean -->
    <bean id="orderTransactionConsumer" class="com.aliyun.openservices.ons.api.bean.ConsumerBean"
        init-method="start" destroy-method="shutdown">
@@ -18,18 +19,19 @@
        </property>
        <property name="subscriptionTable">
            <map>
                <!-- 订单补贴订阅  -->
                <!-- 订单补贴订阅 -->
                <entry value-ref="inviteOrderSubsidyMsgListener">
                    <key>
                        <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
                            <property name="topic" value="TOPIC_ORDER" />
                            <property name="expression" value="orderStatistic||orderUpdate||orderFanLiActual||orderFanLiDelay" /><!--expression 即
                                Tag,可以设置成具体的 Tag,如 taga||tagb||tagc,也可设置成 *。 * 仅代表订阅所有 Tag,不支持通配 -->
                            <property name="expression"
                                value="orderStatistic||orderUpdate||orderFanLiActual||orderFanLiDelay" /><!--expression
                                即 Tag,可以设置成具体的 Tag,如 taga||tagb||tagc,也可设置成 *。 * 仅代表订阅所有 Tag,不支持通配 -->
                        </bean>
                    </key>
                </entry>
                <entry value-ref="inviteOrderSubsidyMsgListener">
                    <key>
                        <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
@@ -38,8 +40,42 @@
                        </bean>
                    </key>
                </entry>
            </map>
        </property>
    </bean>
    <!-- 板栗商城订单消息订阅 -->
    <bean id="banLiShopOrderMessageListener"
        class="com.yeshi.fanli.util.rocketmq.consumer.order.BanLiShopOrderMessageListener"></bean> <!--Listener 配置 -->
    <!-- Group ID 订阅同一个 Topic,可以创建多个 ConsumerBean -->
    <bean id="orderTransactionConsumer" class="com.aliyun.openservices.ons.api.bean.ConsumerBean"
        init-method="start" destroy-method="shutdown">
        <property name="properties"> <!--消费者配置信息 -->
            <props>
                <prop key="AccessKey">LTAI4FwmTxVCuzTaoZtDiV8z</prop>
                <prop key="SecretKey">ixWg90QbYFKP6ae5xpAo2P1qwIyll5</prop>
                <prop key="GROUP_ID">GID_BANLI_SHOP_ORDER</prop>
                <prop key="NAMESRV_ADDR">http://MQ_INST_1205444665315884_BbaMbxF4.mq-internet-access.mq-internet.aliyuncs.com:80
                </prop>
                <!--将消费者线程数固定为 50 个 <prop key="ConsumeThreadNums">50</prop> -->
            </props>
        </property>
        <property name="subscriptionTable">
            <map>
                <!-- 订阅下单延时消息 -->
                <entry value-ref="inviteOrderSubsidyMsgListener">
                    <key>
                        <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
                            <property name="topic" value="TOPIC_ORDER" />
                            <property name="expression" value="banLiShopOrderDelay" /><!--expression
                                即 Tag,可以设置成具体的 Tag,如 taga||tagb||tagc,也可设置成 *。 * 仅代表订阅所有 Tag,不支持通配 -->
                        </bean>
                    </key>
                </entry>
            </map>
        </property>
    </bean>
</beans>
fanli/src/test/java/org/fanli/MyBatisProduce.java
@@ -4,7 +4,7 @@
import org.yeshi.utils.mybatis.ColumnParseUtil;
import org.yeshi.utils.mybatis.MyBatisMapperUtil;
import com.yeshi.fanli.entity.shop.BanLiShopOrder;
import com.yeshi.fanli.entity.shop.BanLiShopGoods;
import com.yeshi.fanli.entity.shop.BanLiShopOrderGoods;
//@Ignore
@@ -17,8 +17,8 @@
    @Test
    public void test1() {
        ColumnParseUtil.parseColumn(BanLiShopOrder.class,
                "D:\\workspace\\fanli\\fanli-server\\fanli\\src\\main\\java\\com\\yeshi\\fanli\\mapping\\shop\\BanLiShopOrderMapper.xml");
        ColumnParseUtil.parseColumn(BanLiShopGoods.class,
                "D:\\workspace\\fanli\\fanli-server\\fanli\\src\\main\\java\\com\\yeshi\\fanli\\mapping\\shop\\BanLiShopGoodsMapper.xml");
    }
}
utils/.classpath
@@ -19,6 +19,10 @@
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_181"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
utils/.gitignore
@@ -1,2 +1,3 @@
/target/
/.settings/
/.settings/
.classpath