/****Service/
public ServiceMessage<MemberFreedomRepModel>  getMFListByPay(Long memberId,Long freedomType,Long paymentId,BigDecimal money) {
try {
            if(memberId==null || memberId==0){
                return super.returnParamsError("memberId不能为空!");
            }

            if(freedomType==null || freedomType==0){
                return super.returnParamsError("freedomType不能为空!");
            }
            if(paymentId==null || paymentId==0){
                return super.returnParamsError("paymentId不能为空!");
            }
            if(money.compareTo(BigDecimal.ZERO) <= 0){
                return super.returnParamsError("充值金额不能为空!");
            }

            if(!freedomType.equals(MemberRankType.chongzhijiangli.getType())){
                return super.returnParamsError("此接口只提供给"+MemberRankType.chongzhijiangli.getTypeName()+"使用!");
            }

            //先查询会员的角色
            MemberRoleConnRepModel mm  = new MemberRoleConnRepModel();
            mm.setMemberId(memberId);
            ServiceMessage<List<MemberRoleConnRepModel>>  msgRes = memberRoleConnRepModelService.queryByList(mm);
            if(!msgRes.getStatus().equals(MsgStatus.NORMAL) || msgRes.getResult()==null || msgRes.getResult().size()==0){
                MemberRoleConnRepModel memberRoleConnRepModel = new MemberRoleConnRepModel();
                memberRoleConnRepModel.setMemberId(memberId);
                memberRoleConnRepModelService.saveInitMemberRole(memberRoleConnRepModel);

                msgRes = memberRoleConnRepModelService.queryByList(mm);
            }
            List<Long> roleIds = new ArrayList<Long>();
            List<Long> rankIds = new ArrayList<Long>();
            for(MemberRoleConnRepModel me : msgRes.getResult()){
                roleIds.add(me.getRoleId());
                rankIds.add(me.getRankId());
            }
            if(roleIds==null || roleIds.size() ==0 || rankIds==null || rankIds.size() ==0 ){
                return super.returnParamsError("此会员没有角色!");
            }
            MemberFreedomRepModel memberFreedom = new MemberFreedomRepModel();
            memberFreedom.setRankIds(rankIds);
            memberFreedom.setRoleIds(roleIds);
            memberFreedom.setMemberId(memberId);
            memberFreedom.setFreedomType(freedomType);
            memberFreedom.setPaymentTypeId(paymentId);
            memberFreedom.setNoTime(DateUtils.getCurrentDateString());

            List<MemberFreedomRepModel> list = super.memberFreedomRepMapper.getMFListByPay(memberFreedom) ;
            if(list==null || list.size() ==0 ){
                return super.returnCorrectResult("此会员暂无充值特权!");
            }

            MemberFreedomRepModel me = list.get(0);;

            //充值奖励   维护的数据是这样的 100:2,200:20     如果是 冲 300 则是    2 + 20
            List<String> ruleList = new ArrayList<String>();
            for(String str : me.getValue().split(",")){
                ruleList.add(str);
            }

            BigDecimal ps =  paySend(money,ruleList);
            me.setPaySend(ps);

            //查询各特权使用记录
            MemberRankFreedomLogRepModel  memberRankFreedomLogRep =new MemberRankFreedomLogRepModel();
            memberRankFreedomLogRep.setMemberId(me.getMemberId());
            memberRankFreedomLogRep.setRoleId(me.getRoleId());
            memberRankFreedomLogRep.setFreedomId(me.getFreedomId());
            if(me.getTimeRang().equals("rang")){
                memberRankFreedomLogRep.setOverTime(me.getEndTime());
            }
            HashMap ma = memberRankFreedomLogRepModelService.sumUserLog( memberRankFreedomLogRep);
            if(ma!=null){
                logger.debug(ma.get("use_num")+"=============="+ma.get("money"));
                //如果超过           判断是周期/限制使用次数 /限制优惠金额     则此特权无效
                if( (me.getUseNum() > 0 && Double.valueOf(ma.get("use_num").toString()) >= me.getUseNum()) ||
                    (me.getMemberQuota()!=null && me.getMemberQuota().compareTo(BigDecimal.valueOf(Double.valueOf(ma.get("money").toString()))) <= 0 )){

                    return super.returnCorrectResult("查询会员的特权列表成功!");
                }else{
                    me.setMemberQuota(BigDecimal.valueOf(Double.valueOf(ma.get("use_num")==null || ma.get("use_num").equals("")?"0":ma.get("use_num").toString())));
                    me.setMemberUseNum(BigDecimal.valueOf(Double.valueOf(ma.get("money")==null || ma.get("money").equals("")?"0":ma.get("money").toString())));
                }
            }
            return super.returnCorrectResult("查询会员的特权列表成功!",me);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return super.returnException("查询会员的特权列表失败!");
        }
    }}
<!--   sql -->
    <select id="getMFListByPay" resultMap="getMemberFreedomListMap" parameterType="MemberFreedomRepModel">
         select cc.*,dd.* from
        (select cc.rank_id,cc.freedom_id,cc.time_rang,cc.begin_time,cc.end_time,cc.long_day,cc.get_time ,rr.role_id
        from member_rank_freedom_conn cc join
        (select role_id,rank_id from member_role_conn rr where rr.is_delete ='N'
        and rr.role_id in
        <foreach collection="roleIds" open="(" close=")" item="id" separator=",">
            #{id}
        </foreach>
        and member_id = #{memberId} ) rr on cc.rank_id = rr.rank_id
        where  cc.is_delete ='N' and (cc.time_rang = 'all'  or
        (cc.time_rang='rang' and cc.begin_time &lt;= #{noTime} and #{noTime} &lt;=end_time  )  ) ) cc

        join 

        (select ff.* from (
        select f2.*
            from member_freedom f2
        where f2.is_delete = 'N' and f2.freedom_type = #{freedomType}
        ) ff join (
        (select max(ff.level) level,ff.freedom_type  from member_freedom ff
        where ff.is_delete = 'N' and ff.freedom_type = #{freedomType} and ff.payment_type_id =#{paymentTypeId}  and ff.id in
        (select cc.freedom_id  from member_rank_freedom_conn cc
        where cc.rank_id in
        <foreach collection="rankIds" open="(" close=")" item="id" separator=",">
            #{id}
         </foreach>
        and cc.is_delete ='N' and (cc.time_rang = 'all'  or
        (cc.time_rang='rang' and cc.begin_time &lt;= #{noTime} and #{noTime}&lt;=end_time  )  ) )
        group by ff.freedom_type)  ) d1 on ff.freedom_type= d1.freedom_type and ff.level = d1.level
         ) dd on cc.freedom_id = dd.id

    </select>
    
//Mapper层
public List<MemberFreedomRepModel> getMFListByPay(MemberFreedomRepModel memberFreedomRepModel);
//model

package com.j1.member.mysql.model;

import java.math.BigDecimal;
import java.text.Bidi;
import java.util.List;

import com.j1.member.mysql.entities.MemberFreedomRep;

/**
 *
 * 特权明细 扩展类
 *
 */

@SuppressWarnings("serial")
public class MemberFreedomRepModel extends MemberFreedomRep {

    private List<Long> roleIds;
    private List<Long> rankIds;
    private String noTime;

    /** 特权ID **/
    private Long freedomId;

    /** 有效时间限制(all/rang) **/
    private String timeRang;

    /** 有效开始时间 **/
    private String beginTime;

    /** 有效结束时间 **/
    private String endTime;

    /** 持续时长(天) **/
    private Long longDay;
    /** 获得时间 **/
    private String getTime;
    /** 等级ID **/
    private Long rankId;

    private String freedomTypeName;

    private Long roleId;
    private Long MemberId;
    private BigDecimal memberQuota; // 已使用限额
    private BigDecimal memberUseNum; // 已使用次数
    /** 冲值送的金额 */
    private BigDecimal paySend = BigDecimal.ZERO;

    public BigDecimal getPaySend() {
        return paySend;
    }

    public void setPaySend(BigDecimal paySend) {
        this.paySend = paySend;
    }

    public Long getMemberId() {
        return MemberId;
    }

    public void setMemberId(Long memberId) {
        MemberId = memberId;
    }

    public BigDecimal getMemberQuota() {
        return memberQuota;
    }

    public void setMemberQuota(BigDecimal memberQuota) {
        this.memberQuota = memberQuota;
    }

    public BigDecimal getMemberUseNum() {
        return memberUseNum;
    }

    public void setMemberUseNum(BigDecimal memberUseNum) {
        this.memberUseNum = memberUseNum;
    }

    public List<Long> getRoleIds() {
        return roleIds;
    }

    public void setRoleIds(List<Long> roleIds) {
        this.roleIds = roleIds;
    }

    public Long getRoleId() {
        return roleId;
    }

    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }

    public Long getRankId() {
        return rankId;
    }

    public void setRankId(Long rankId) {
        this.rankId = rankId;
    }

    public Long getFreedomId() {
        return freedomId;
    }

    public void setFreedomId(Long freedomId) {
        this.freedomId = freedomId;
    }

    public String getTimeRang() {
        return timeRang;
    }

    public void setTimeRang(String timeRang) {
        this.timeRang = timeRang;
    }

    public String getBeginTime() {
        return beginTime;
    }

    public void setBeginTime(String beginTime) {
        this.beginTime = beginTime;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public Long getLongDay() {
        return longDay;
    }

    public void setLongDay(Long longDay) {
        this.longDay = longDay;
    }

    public String getGetTime() {
        return getTime;
    }

    public void setGetTime(String getTime) {
        this.getTime = getTime;
    }

    public List<Long> getRankIds() {
        return rankIds;
    }

    public void setRankIds(List<Long> rankIds) {
        this.rankIds = rankIds;
    }

    public String getNoTime() {
        return noTime;
    }

    public void setNoTime(String noTime) {
        this.noTime = noTime;
    }

    public String getFreedomTypeName() {
        return freedomTypeName;
    }

    public void setFreedomTypeName(String freedomTypeName) {
        this.freedomTypeName = freedomTypeName;
    }

}
//测试  @Test
    public void test11() {
        MemberService service = J1SOAHessianHelper.getService(url, MemberService.class);

        MemberModel mm = new MemberModel();
        List<Integer> list = new ArrayList<Integer>();
        list.add(1851);
        list.add(1852);
        list.add(2649);
        mm.setMemberIdList(list);
        ServiceMessage<List<Member>> result = service.getMemberNameList(mm);
        System.out.println(JSON.toJSONString(result));
    }

mybatis 循环遍历的更多相关文章

  1. mybatis问题。foreach循环遍历数组报错情况,及其解决方法

    根据条件查询数据列表,mybatis查询代码如下 如果只查询属于特定部门拥有的数据权限.这需要用 String[ ] codes保存当前部门及其子部门的部门编码. 所以需要在mybatis中遍历编码数 ...

  2. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  3. *使用while循环遍历数组创建索引和自增索引值

    package com.chongrui.test;/* *使用while循环遍历数组 *  *  * */public class test {    public static void main ...

  4. 【转】ArrayList循环遍历并删除元素的常见陷阱

    转自:https://my.oschina.net/u/2249714/blog/612753?p=1 在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出b ...

  5. sqlserver中的循环遍历(普通循环和游标循环)

    sql 经常用到循环,下面介绍一下普通循环和游标循环 1.首先需要一个测试表数据Student

  6. php中的循环遍历 foreach list each

    foreach语句遍历数组foreach语句用于循环遍历数组,每进行一次循环,当前数组元素的值就会被赋值给变量value(也可以是其它变量),数组指针会逐一的移动. 代码示例: foreach($ar ...

  7. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)

    主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...

  8. ArrayList和LinkedList的几种循环遍历方式及性能对比分析

    最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...

  9. php用压栈的方式,循环遍历无限级别的数组(非递归方法)

    php用压栈的方式,循环遍历无限级别的数组(非递归方法) 好久不写非递归遍历无限级分类...瞎猫碰到死老鼠,发刚才写的1段代码,压栈的方式遍历php无限分类的数组... php压栈的方式遍历无限级别数 ...

随机推荐

  1. 多进程监控自动关机工具升级远程关闭多台server——C# works with PowerShell

    之前给单位做过一个多进程监控的自动关机工具,详见那篇blog. 这次领导又加了需求,说要等进程监控结束后,不止需要关闭主控端server,还需要关闭其他servers.于是就用到了我上篇文章所介绍的知 ...

  2. 利用MapReduce实现倒排索引

    这里来学习的是利用MapReduce的分布式编程模型来实现简单的倒排索引. 首先什么是倒排索引? 倒排索引是文档检索中最常用的数据结构,被广泛地应用于全文搜索引擎. 它主要是用来存储某个单词(或词组) ...

  3. C语言 · 成绩的等级输出

    输入一个百分制的成绩t后,按下式输出它的等级.等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E. 样例输入 98 样例输出 A   #include<std ...

  4. Java实现的各种排序算法(包括冒泡,快排等)

    //堆排序 不稳定 import java.util.Arrays; public class HeapSort { public static void main(String[] args) { ...

  5. kill 的常用信号

    kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令.通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top ...

  6. 使用JPedal取代PDFBox

    http://wanggp.iteye.com/blog/1144177 ———————————————————————————————————————————————— 之前都是使用PDFBOX0. ...

  7. SSI——服务器端嵌入

    服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术.大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server ...

  8. Spring 4 官方文档学习(十)数据访问之ORM

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/orm.html 占位用,暂略.

  9. 网络协议之ftp---ftp 协议详解

    http://blog.csdn.net/yxyhack/article/details/1826256 http://blog.chinaunix.net/uid-7777486-id-204393 ...

  10. ueditor1.4.3配置过程(包含单独上传文件以及图片的使用),ueditor1.4.3上传配置(转 http://www.bkjia.com/webzh/1001016.html)

    这里使用的是ueditor1.4.3的jsp版本的UTF-8版本. 首先下载相应的ueditor,将ueditor文件夹直接拷贝到项目中,文件结构如下所示: 然后将项目要用的jar包导入到lib目录下 ...