dcs 1 mês atrás
pai
commit
9fac61e130

+ 41 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/controller/AccountBalanceController.java

@@ -0,0 +1,41 @@
+package com.bosshand.virgo.api.workark.controller;
+
+import com.bosshand.virgo.api.workark.service.AccountBalanceService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping({"accountBalance"})
+@Api(tags = {"账户金额"})
+public class AccountBalanceController {
+
+    @Autowired
+    AccountBalanceService accountBalanceService;
+
+    @ApiOperation("获取当前用户账号金额")
+    @RequestMapping(value = "", method = RequestMethod.GET)
+    public Response get() {
+        return Response.ok(accountBalanceService.get());
+    }
+
+    @ApiOperation("领取佣金")
+    @RequestMapping(value = "/{orderNo}", method = RequestMethod.GET)
+    public Response save(@PathVariable String orderNo) {
+        if (accountBalanceService.getUserId(orderNo)) {
+            return Response.fail(20000, "订单不属于你的邀请人,无法领取");
+        }
+        if (accountBalanceService.getOrderNo(orderNo)) {
+            accountBalanceService.saveAccountBalanceDetails(orderNo);
+            return Response.ok();
+        }
+        return Response.fail(20000, "订单佣金已经领取了");
+    }
+
+
+}

+ 17 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/dao/AccountBalanceDao.java

@@ -0,0 +1,17 @@
+package com.bosshand.virgo.api.workark.dao;
+
+import com.bosshand.virgo.api.workark.model.AccountBalance;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AccountBalanceDao {
+
+    void updateTotalFee(AccountBalance accountBalance);
+
+    void save(AccountBalance accountBalance);
+
+    AccountBalance getUserId(long userId);
+
+    AccountBalance get(long id);
+
+}

+ 13 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/dao/AccountBalanceDetailsDao.java

@@ -0,0 +1,13 @@
+package com.bosshand.virgo.api.workark.dao;
+
+import com.bosshand.virgo.api.workark.model.AccountBalanceDetails;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AccountBalanceDetailsDao {
+
+    void save(AccountBalanceDetails accountBalanceDetails);
+
+    AccountBalanceDetails getOrderNo(String orderNo);
+
+}

+ 2 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/dao/OrderInfoDao.java

@@ -21,6 +21,8 @@ public interface OrderInfoDao {
 
     void updateStatus(OrderInfo orderInfo);
 
+    void updateFeeStatus(long id);
+
     List<OrderInfo> getList(OrderInfo orderInfo);
 
     int getTotalCount(OrderInfo orderInfo);

+ 55 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/model/AccountBalance.java

@@ -0,0 +1,55 @@
+package com.bosshand.virgo.api.workark.model;
+
+import java.math.BigDecimal;
+
+/**
+ * 账户金额
+ */
+public class AccountBalance {
+
+    private long id;
+
+    private long userId;
+
+    /**
+     * 账户金额
+     */
+    private BigDecimal totalFee;
+
+    /**
+     * 明细列表
+     */
+    private AccountBalanceDetails accountBalanceDetailsList;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(long userId) {
+        this.userId = userId;
+    }
+
+    public BigDecimal getTotalFee() {
+        return totalFee;
+    }
+
+    public void setTotalFee(BigDecimal totalFee) {
+        this.totalFee = totalFee;
+    }
+
+    public AccountBalanceDetails getAccountBalanceDetailsList() {
+        return accountBalanceDetailsList;
+    }
+
+    public void setAccountBalanceDetailsList(AccountBalanceDetails accountBalanceDetailsList) {
+        this.accountBalanceDetailsList = accountBalanceDetailsList;
+    }
+}

+ 98 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/model/AccountBalanceDetails.java

@@ -0,0 +1,98 @@
+package com.bosshand.virgo.api.workark.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 账户金额明细
+ */
+public class AccountBalanceDetails {
+
+    private long id;
+
+    private long accountBalanceId;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 邀请人ID
+     */
+    private long inviteUserId;
+
+    /**
+     * 商户订单编号
+     */
+    private String orderNo;
+
+    /**
+     * 订单金额(元)
+     */
+    private BigDecimal totalFee;
+
+    /**
+     * 佣金金额(元)
+     */
+    private BigDecimal fee;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public long getAccountBalanceId() {
+        return accountBalanceId;
+    }
+
+    public void setAccountBalanceId(long accountBalanceId) {
+        this.accountBalanceId = accountBalanceId;
+    }
+
+    public long getInviteUserId() {
+        return inviteUserId;
+    }
+
+    public void setInviteUserId(long inviteUserId) {
+        this.inviteUserId = inviteUserId;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getTotalFee() {
+        return totalFee;
+    }
+
+    public void setTotalFee(BigDecimal totalFee) {
+        this.totalFee = totalFee;
+    }
+
+    public BigDecimal getFee() {
+        return fee;
+    }
+
+    public void setFee(BigDecimal fee) {
+        this.fee = fee;
+    }
+}

+ 13 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/model/OrderInfo.java

@@ -131,6 +131,11 @@ public class OrderInfo {
      */
     private long proceId;
 
+    /**
+     * 佣金状态
+     */
+    private Integer feeStatus;
+
     public Long getId() {
         return id;
     }
@@ -322,4 +327,12 @@ public class OrderInfo {
     public void setProceId(long proceId) {
         this.proceId = proceId;
     }
+
+    public Integer getFeeStatus() {
+        return feeStatus;
+    }
+
+    public void setFeeStatus(Integer feeStatus) {
+        this.feeStatus = feeStatus;
+    }
 }

+ 103 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/service/AccountBalanceService.java

@@ -0,0 +1,103 @@
+package com.bosshand.virgo.api.workark.service;
+
+import com.bosshand.virgo.api.workark.dao.AccountBalanceDao;
+import com.bosshand.virgo.api.workark.dao.AccountBalanceDetailsDao;
+import com.bosshand.virgo.api.workark.dao.OrderInfoDao;
+import com.bosshand.virgo.api.workark.model.AccountBalance;
+import com.bosshand.virgo.api.workark.model.AccountBalanceDetails;
+import com.bosshand.virgo.api.workark.model.OrderInfo;
+import com.bosshand.virgo.core.dao.InviteDao;
+import com.bosshand.virgo.core.model.Invite;
+import com.bosshand.virgo.core.utils.ContextUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+@Service
+public class AccountBalanceService {
+
+    @Autowired
+    AccountBalanceDao accountBalanceDao;
+
+    @Autowired
+    AccountBalanceDetailsDao accountBalanceDetailsDao;
+
+    @Autowired
+    OrderInfoDao orderInfoDao;
+
+    @Autowired
+    InviteDao inviteDao;
+
+    public AccountBalance get() {
+        long userId = ContextUtils.getUserContext().getUserId();
+        AccountBalance accountBalance = accountBalanceDao.getUserId(userId);
+        if (accountBalance != null) {
+            return accountBalance;
+        }
+        AccountBalance a = new AccountBalance();
+        a.setUserId(userId);
+        a.setTotalFee(new BigDecimal(0));
+        accountBalanceDao.save(a);
+        return a;
+    }
+
+    @Transactional
+    public void saveAccountBalanceDetails(String orderNo) {
+
+        // 获取用户账号
+        long userId = ContextUtils.getUserContext().getUserId();
+        AccountBalance accountBalance = accountBalanceDao.getUserId(userId);
+
+        AccountBalanceDetails accountBalanceDetails = new AccountBalanceDetails();
+        accountBalanceDetails.setAccountBalanceId(accountBalance.getId());
+
+        OrderInfo info = orderInfoDao.getOrderNo(orderNo);
+        accountBalanceDetails.setTotalFee(info.getTotalFee());
+
+        // 计算佣金(按百分之一的比例算)
+        BigDecimal scale = new BigDecimal("0.01");
+        BigDecimal fee = info.getTotalFee().multiply(scale).setScale(2, RoundingMode.DOWN);
+        accountBalanceDetails.setFee(fee);
+        accountBalanceDetailsDao.save(accountBalanceDetails);
+
+        // 计算余额
+        BigDecimal totalFee = accountBalance.getTotalFee();
+        accountBalance.setTotalFee(totalFee.add(fee));
+        accountBalanceDao.updateTotalFee(accountBalance);
+
+        orderInfoDao.updateFeeStatus(info.getId());
+    }
+
+    /**
+     * 判断订单是否已经领取过佣金
+     */
+    public boolean getOrderNo(String orderNo) {
+        AccountBalanceDetails accountBalanceDetails = accountBalanceDetailsDao.getOrderNo(orderNo);
+        if (accountBalanceDetails != null) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 判断订单是否属于当前用户的的邀请人的
+     */
+    public boolean getUserId(String orderNo) {
+        OrderInfo info = orderInfoDao.getOrderNo(orderNo);
+        long userId = ContextUtils.getUserContext().getUserId();
+        List<Invite> inviteList = inviteDao.getUserId(userId);
+        if (inviteList.size() > 0) {
+            for (Invite invite : inviteList) {
+                if (invite.getInviteUserId() == info.getUserId()) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+}

+ 26 - 0
virgo.api/src/main/resources/mapper/AccountBalanceDetailsMapper.xml

@@ -0,0 +1,26 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.workark.dao.AccountBalanceDetailsDao">
+
+    <resultMap type="com.bosshand.virgo.api.workark.model.AccountBalanceDetails" id="result" >
+        <id column="id" property="id"/>
+        <result column="accountBalanceId" property="accountBalanceId"/>
+        <result column="createTime" property="createTime"/>
+        <result column="inviteUserId" property="inviteUserId"/>
+        <result column="orderNo" property="orderNo"/>
+        <result column="totalFee" property="totalFee"/>
+        <result column="fee" property="fee"/>
+    </resultMap>
+
+    <select id="getOrderNo" resultMap="result">
+        SELECT * FROM workark_account_balance_details where orderNo = #{orderNo}
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.workark.model.AccountBalance" useGeneratedKeys="true" keyProperty="id">
+        INSERT into workark_account_balance_details(accountBalanceId, createTime, inviteUserId, orderNo, totalFee, fee)
+        values(#{accountBalanceId}, now(), #{inviteUserId}, #{orderNo}, #{totalFee}, #{fee})
+    </insert>
+
+</mapper>

+ 42 - 0
virgo.api/src/main/resources/mapper/AccountBalanceMapper.xml

@@ -0,0 +1,42 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.workark.dao.AccountBalanceDao">
+
+    <resultMap type="com.bosshand.virgo.api.workark.model.AccountBalance" id="result" >
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="totalFee" property="totalFee"/>
+        <collection property="accountBalanceDetailsList" ofType="com.bosshand.virgo.api.workark.model.AccountBalanceDetails" resultMap="com.bosshand.virgo.api.workark.dao.AccountBalanceDetailsDao.result" columnPrefix="accountBalanceDetails_"/>
+    </resultMap>
+
+    <sql id="query">
+        select a.*,
+               b.id                           as accountBalanceDetails_id,
+               b.accountBalanceId             as accountBalanceDetails_accountBalanceId,
+               b.inviteUserId                 as accountBalanceDetails_inviteUserId,
+               b.orderNo                      as accountBalanceDetails_orderNo,
+               b.createTime                   as accountBalanceDetails_createTime,
+               b.totalFee                     as accountBalanceDetails_totalFee,
+               b.fee                          as accountBalanceDetails_fee
+        from workark_account_balance a left join workark_account_balance_details b on a.id = b.accountBalanceId
+    </sql>
+
+    <select id="getUserId" resultMap="result">
+        <include refid="query" /> where a.userId = #{userId}
+    </select>
+
+    <select id="get" resultMap="result">
+        <include refid="query" /> where a.id = #{id}
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.workark.model.AccountBalance" useGeneratedKeys="true" keyProperty="id">
+        INSERT into workark_account_balance(userId, totalFee) values(#{userId}, #{totalFee})
+    </insert>
+
+    <update id="updateTotalFee" parameterType="com.bosshand.virgo.api.workark.model.AccountBalance">
+        UPDATE workark_account_balance SET totalFee=#{totalFee} WHERE userId = #{userId}
+    </update>
+
+</mapper>

+ 14 - 0
virgo.api/src/main/resources/mapper/OrderInfoMapper.xml

@@ -28,6 +28,7 @@
         <result column="organizationId" property="organizationId"/>
         <result column="payOrganizationId" property="payOrganizationId"/>
         <result column="proceId" property="proceId"/>
+        <result column="feeStatus" property="feeStatus"/>
         <collection property="invoice" ofType="com.bosshand.virgo.api.workark.model.Invoice" resultMap="com.bosshand.virgo.api.workark.dao.InvoiceDao.result" columnPrefix="invoice_"/>
     </resultMap>
 
@@ -107,6 +108,9 @@
             <if test="proceId != 0">
                 and a.proceId = #{proceId}
             </if>
+            <if test="feeStatus != null">
+                and a.feeStatus = #{feeStatus}
+            </if>
         </where>
     </select>
 
@@ -146,6 +150,9 @@
             <if test="proceId != 0">
                 and proceId = #{proceId}
             </if>
+            <if test="feeStatus != null">
+                and feeStatus = #{feeStatus}
+            </if>
         </where>
     </select>
 
@@ -185,6 +192,9 @@
             <if test="p.proceId != 0">
                 and a.proceId = #{p.proceId}
             </if>
+            <if test="p.feeStatus != null">
+                and a.feeStatus = #{p.feeStatus}
+            </if>
         </where>
         order by a.createTime desc limit #{currIndex} , #{pageSize}
     </select>
@@ -217,6 +227,10 @@
         UPDATE workark_orderInfo SET status = #{status} WHERE id = #{id}
     </update>
 
+    <update id="updateFeeStatus" parameterType="com.bosshand.virgo.api.workark.model.OrderInfo">
+        UPDATE workark_orderInfo SET feeStatus = 1 WHERE id = #{id}
+    </update>
+
     <delete id="delete">
         DELETE FROM workark_orderInfo WHERE id = #{id}
     </delete>

+ 2 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/dao/InviteDao.java

@@ -13,6 +13,8 @@ public interface InviteDao {
 
     int getTotalCount(long userId);
 
+    List<Invite> getUserId(long userId);
+
     List<Invite> getLimit(@Param("userId") long userId, @Param("currIndex") int currIndex, @Param("pageSize") int pageSize);
 
     Invite getInviteUserId(long inviteUserId);

+ 4 - 0
virgo.core/src/main/resources/mapper/InviteMapper.xml

@@ -23,6 +23,10 @@
         SELECT count(*) FROM invite where userId = #{userId}
     </select>
 
+    <select id="getUserId" resultMap="result">
+        SELECT * FROM invite where userId = #{userId}
+    </select>
+
     <sql id="query">
         select a.*, b.name as userName, b.portrait as userPortrait from invite a left join mgr_user b on a.inviteUserId = b.id
     </sql>