فهرست منبع

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 سال پیش
والد
کامیت
6a17658822

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysTenantAccountDetailDao.java

@@ -3,7 +3,17 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail;
 import com.ym.mec.common.dal.BaseDAO;
 
+import java.util.List;
+import java.util.Map;
+
 public interface SysTenantAccountDetailDao extends BaseDAO<Long, SysTenantAccountDetail> {
 
 	SysTenantAccountDetail queryByOrderNo(String orderNo);
+
+	/**
+	 * 统计交易分钟数
+	 * @param params
+	 * @return
+	 */
+	Integer sumTransMinutes(Map<String, Object> params);
 }

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoTenantDto.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.page.PageInfo;
+
+import java.math.BigDecimal;
+
+public class PageInfoTenantDto<T> extends PageInfo<T> {
+
+    private Integer totalTransMinutes = 0;
+
+    public PageInfoTenantDto() {
+    }
+
+    public PageInfoTenantDto(Integer pageNo) {
+        super(pageNo);
+    }
+
+    public PageInfoTenantDto(Integer pageNo, int pageSize) {
+        super(pageNo, pageSize);
+    }
+
+    public Integer getTotalTransMinutes() {
+        return totalTransMinutes;
+    }
+
+    public void setTotalTransMinutes(Integer totalTransMinutes) {
+        this.totalTransMinutes = totalTransMinutes;
+    }
+}

+ 16 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccountDetail.java

@@ -34,7 +34,11 @@ public class SysTenantAccountDetail {
 	}
 	
 	public enum TransType implements BaseEnum<String, TransType> {
-		RECHARGE("RECHARGE", "充值"), CONSUME("CONSUME", "消费");
+		RECHARGE("RECHARGE", "充值"),
+		CONSUME("CONSUME", "消费"),
+		RETURN("RETURN", "退还"),
+		MANUAL_ADD("MANUAL_ADD", "系统充值"),
+		MANUAL_SUB("MANUAL_SUB", "系统扣减");
 
 		private String code;
 
@@ -86,6 +90,9 @@ public class SysTenantAccountDetail {
 	private String memo;
 
 	/**  */
+	private Integer operatorId;
+
+	/**  */
 	private java.util.Date createTime;
 
 	/**  */
@@ -187,6 +194,14 @@ public class SysTenantAccountDetail {
 		this.orderNo = orderNo;
 	}
 
+	public Integer getOperatorId() {
+		return operatorId;
+	}
+
+	public void setOperatorId(Integer operatorId) {
+		this.operatorId = operatorId;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TenantAccountDetailQueryInfo.java

@@ -3,15 +3,23 @@ package com.ym.mec.biz.dal.page;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransStatus;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransType;
 import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
 
 public class TenantAccountDetailQueryInfo extends QueryInfo {
 
+	@ApiModelProperty(value = "类型",required = false)
 	private TransType transType;
 
 	private TransStatus transStatus;
 
 	private Integer userId;
 
+	@ApiModelProperty(value = "开始时间",required = false)
+	private String startTime;
+
+	@ApiModelProperty(value = "结束时间",required = false)
+	private String endTime;
+
 	public TransType getTransType() {
 		return transType;
 	}
@@ -35,4 +43,20 @@ public class TenantAccountDetailQueryInfo extends QueryInfo {
 	public void setUserId(Integer userId) {
 		this.userId = userId;
 	}
+
+	public String getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(String startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(String endTime) {
+		this.endTime = endTime;
+	}
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysTenantAccountDetailService.java

@@ -1,8 +1,12 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.PageInfoTenantDto;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail;
+import com.ym.mec.biz.dal.page.TenantAccountDetailQueryInfo;
 import com.ym.mec.common.service.BaseService;
+import org.apache.poi.ss.formula.functions.T;
 
 public interface SysTenantAccountDetailService extends BaseService<Long, SysTenantAccountDetail> {
 
+    PageInfoTenantDto<SysTenantAccountDetail> getPageList(TenantAccountDetailQueryInfo queryInfo);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysTenantAccountService.java

@@ -20,4 +20,15 @@ public interface SysTenantAccountService extends BaseService<Integer, SysTenantA
 	 * @return
 	 */
 	public boolean update(Integer userId, int minutes, String orderNo, TransType type, String transNo, BigDecimal cashAmount, String memo);
+
+	/**
+	 * 后台人工更新账户
+	 * @param teacherId 用户编号
+	 * @param minutes 分钟数
+	 * @param type 交易类型
+	 * @param operatorId 操作人
+	 * @param memo 备注
+	 * @return
+	 */
+	boolean manualUpdate(Integer teacherId, int minutes, TransType type,Integer operatorId, String memo);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GroupClassServiceImpl.java

@@ -154,7 +154,7 @@ public class GroupClassServiceImpl implements GroupClassService {
             if(!CollectionUtils.isEmpty(groupNotStartCourses)){
                 //剩余课程时长
                 Integer totalCourseTime=groupNotStartCourses.size()*coursesGroup.getSingleClassMinutes();
-                sysTenantAccountService.update(coursesGroup.getTeacherId(), totalCourseTime, "", SysTenantAccountDetail.TransType.CONSUME, "",BigDecimal.ZERO,"关闭课程组");
+                sysTenantAccountService.update(coursesGroup.getTeacherId(), totalCourseTime, "", SysTenantAccountDetail.TransType.RETURN, "",BigDecimal.ZERO,"关闭课程组");
             }else{
                 throw new BizException("此课程组已结束");
             }

+ 9 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -19,10 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -101,6 +98,14 @@ public class PayServiceImpl implements PayService {
                 company = "yaming";
             }
         }
+        //深圳,广州,上海分部收到深圳大雅
+        Set<Integer> organIds = new HashSet<>();
+        organIds.add(16);
+        organIds.add(3);
+        organIds.add(15);
+        if(organIds.contains(organId)){
+            company = "sdaya";
+        }
 
         //支付通道决策
         Map<String, Object> unionPay = new HashMap<>();

+ 43 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysTenantAccountDetailServiceImpl.java

@@ -1,5 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dto.PageInfoTenantDto;
+import com.ym.mec.biz.dal.page.TenantAccountDetailQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -9,15 +14,43 @@ import com.ym.mec.biz.service.SysTenantAccountDetailService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
-public class SysTenantAccountDetailServiceImpl extends BaseServiceImpl<Long, SysTenantAccountDetail>  implements SysTenantAccountDetailService {
-	
-	@Autowired
-	private SysTenantAccountDetailDao sysTenantAccountDetailDao;
-
-	@Override
-	public BaseDAO<Long, SysTenantAccountDetail> getDAO() {
-		return sysTenantAccountDetailDao;
-	}
-	
+public class SysTenantAccountDetailServiceImpl extends BaseServiceImpl<Long, SysTenantAccountDetail> implements SysTenantAccountDetailService {
+
+    @Autowired
+    private SysTenantAccountDetailDao sysTenantAccountDetailDao;
+
+    @Override
+    public BaseDAO<Long, SysTenantAccountDetail> getDAO() {
+        return sysTenantAccountDetailDao;
+    }
+
+    @Override
+    public PageInfoTenantDto<SysTenantAccountDetail> getPageList(TenantAccountDetailQueryInfo queryInfo) {
+        PageInfoTenantDto<SysTenantAccountDetail> pageInfo = new PageInfoTenantDto<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<SysTenantAccountDetail> dataList = null;
+        int count = this.findCount(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = this.getDAO().queryPage(params);
+            Integer totalTransMinutes = sysTenantAccountDetailDao.sumTransMinutes(params);
+            if (totalTransMinutes != null) {
+                pageInfo.setTotalTransMinutes(totalTransMinutes);
+            }
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysTenantAccountServiceImpl.java

@@ -81,4 +81,48 @@ public class SysTenantAccountServiceImpl extends BaseServiceImpl<Integer, SysTen
 		return true;
 	}
 
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean manualUpdate(Integer teacherId, int minutes, TransType type, Integer operatorId, String memo) {
+		Date date = new Date();
+		SysTenantAccount tenantAccount = sysTenantAccountDao.getLocked(teacherId);
+		if (tenantAccount == null) {
+			tenantAccount = new SysTenantAccount();
+			tenantAccount.setUserId(teacherId);
+			tenantAccount.setCreateTime(date);
+			tenantAccount.setUpdateTime(date);
+			tenantAccount.setStatus(AccountStatus.NORMAL);
+			tenantAccount.setAvailableMinutes(0);
+			tenantAccount.setFrozenMinutes(0);
+			sysTenantAccountDao.insert(tenantAccount);
+		}
+
+		if (tenantAccount.getStatus() != AccountStatus.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+		int balance = tenantAccount.getAvailableMinutes() + minutes;
+		if (balance < 0) {
+			throw new BizException("账户[{}]可用时间不足,可用时间剩{}分钟", teacherId, tenantAccount.getAvailableMinutes());
+		}
+
+		tenantAccount.setAvailableMinutes(balance);
+		tenantAccount.setUpdateTime(date);
+		sysTenantAccountDao.update(tenantAccount);
+
+		SysTenantAccountDetail detail = new SysTenantAccountDetail();
+		detail.setTransMinutes(minutes);
+		detail.setTotalAvailableMinutes(tenantAccount.getAvailableMinutes());
+		detail.setMemo(memo);
+		detail.setCreateTime(date);
+		detail.setTransStatus(TransStatus.SUCCESS);
+		detail.setTransType(type);
+		detail.setUpdateTime(date);
+		detail.setUserId(teacherId);
+		detail.setOperatorId(operatorId);
+
+		sysTenantAccountDetailDao.insert(detail);
+
+		return true;
+	}
+
 }

+ 15 - 3
mec-biz/src/main/resources/config/mybatis/SysTenantAccountDetailMapper.xml

@@ -15,10 +15,11 @@
 		<result column="total_available_minutes_" property="totalAvailableMinutes" />
 		<result column="trans_minutes_" property="transMinutes" />
 		<result column="memo_" property="memo" />
+		<result column="operator_id_" property="operatorId" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
-	
+
 	<sql id="queryCondition">
 		<where>
 			<if test="transType != null">
@@ -30,6 +31,11 @@
 			<if test="userId != null">
 				and user_id_ = #{userId}
 			</if>
+			<if test="startTime != null">
+				and create_time_ >= #{startTime}
+			</if>
+			<if test="endTime != null">
+				<![CDATA[and create_time_ <= #{startTime}]]></if>
 		</where>
 	</sql>
 
@@ -37,7 +43,7 @@
 	<select id="get" resultMap="SysTenantAccountDetail">
 		SELECT * FROM sys_tenant_account_detail WHERE id_ = #{id}
 	</select>
-	
+
 	<select id="queryByOrderNo" resultMap="SysTenantAccountDetail">
 		SELECT * FROM sys_tenant_account_detail WHERE order_no_ = #{orderNo}
 	</select>
@@ -50,7 +56,7 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysTenantAccountDetail"
 		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO sys_tenant_account_detail
 		(id_,user_id_,order_no_,trans_type_,trans_status_,trans_no_,trans_cash_amount_,total_available_minutes_,trans_minutes_,memo_,create_time_,update_time_)
@@ -119,4 +125,10 @@
 		SELECT COUNT(*) FROM sys_tenant_account_detail
 		<include refid="queryCondition" />
 	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="sumTransMinutes" resultType="int">
+		SELECT SUM(trans_minutes_) FROM sys_tenant_account_detail
+		<include refid="queryCondition" />
+	</select>
 </mapper>

+ 103 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysTenantAccountController.java

@@ -0,0 +1,103 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.SysTenantAccountDetail;
+import com.ym.mec.biz.dal.page.TenantAccountDetailQueryInfo;
+import com.ym.mec.biz.service.SysTenantAccountDetailService;
+import com.ym.mec.biz.service.SysTenantAccountService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+
+@RequestMapping("sysTenantAccount")
+@Api(tags = "后台租客账户管理")
+@RestController
+public class SysTenantAccountController extends BaseController {
+
+    @Autowired
+    private SysTenantAccountService sysTenantAccountService;
+
+    @Autowired
+    private SysTenantAccountDetailService sysTenantAccountDetailService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "获取账户信息")
+    @GetMapping("/get")
+    @PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
+    public Object get() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        return succeed(sysTenantAccountService.get(sysUser.getId()));
+    }
+
+    @ApiOperation(value = "获取账户明细")
+    @GetMapping("/queryTenantAccountDetail")
+    @PreAuthorize("@pcs.hasPermissions('userCashAccount/queryTenantAccountDetail')")
+    public Object queryTenantAccountDetail(TenantAccountDetailQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        queryInfo.setUserId(sysUser.getId());
+
+        return succeed(sysTenantAccountDetailService.getPageList(queryInfo));
+    }
+
+    @ApiOperation(value = "增加分钟数")
+    @PostMapping("/addMinutes")
+    @PreAuthorize("@pcs.hasPermissions('userCashAccount/addMinutes')")
+    public Object addMinutes(Integer teacherId, Integer minutes, String memo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (minutes == null || minutes <= 0) {
+            return failed("充值分钟数必须大于0");
+        }
+        if (memo == null || memo.isEmpty()) {
+            return failed("备注信息不能为空");
+        }
+        boolean updateRes = sysTenantAccountService.manualUpdate(teacherId, minutes, SysTenantAccountDetail.TransType.MANUAL_ADD, sysUser.getId(), memo);
+        if (!updateRes) {
+            return failed("充值失败,请重试");
+        }
+        return succeed("充值成功");
+    }
+
+    @ApiOperation(value = "减分钟数")
+    @PostMapping("/subtractMinutes")
+    @PreAuthorize("@pcs.hasPermissions('userCashAccount/subtractMinutes')")
+    public Object subtractMinutes(Integer teacherId, Integer minutes, String memo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (minutes == null || minutes <= 0) {
+            return failed("扣除分钟数必须大于0");
+        }
+        if (memo == null || memo.isEmpty()) {
+            return failed("备注信息不能为空");
+        }
+        boolean updateRes = sysTenantAccountService.manualUpdate(teacherId, -minutes, SysTenantAccountDetail.TransType.MANUAL_SUB, sysUser.getId(), memo);
+        if (!updateRes) {
+            return failed("充值失败,请重试");
+        }
+        return succeed("充值成功");
+    }
+
+}