Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/Joburgess' into Joburgess

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
Joburgess 5 anni fa
parent
commit
233b57b521
25 ha cambiato i file con 287 aggiunte e 21 eliminazioni
  1. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentGoodsSellDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentGoodsSellDto.java
  4. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SellOrder.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  6. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SellStatus.java
  7. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentGoodsSellService.java
  9. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  10. 35 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  11. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentGoodsSellServiceImpl.java
  12. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  13. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  14. 17 5
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  15. 12 1
      mec-biz/src/main/resources/config/mybatis/StudentGoodsSellMapper.xml
  16. 4 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  17. 5 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  18. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  19. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  20. 7 0
      mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java
  21. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/SubjectChangeController.java
  22. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/AutoAffirmReceiveTask.java
  23. 14 2
      mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java
  24. 7 0
      mec-web/src/main/java/com/ym/mec/web/controller/SellOrderController.java
  25. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentGoodsSellDao.java

@@ -46,4 +46,26 @@ public interface StudentGoodsSellDao extends BaseDAO<Integer, StudentGoodsSell>
     StudentGoodsSell findByOrderNo(@Param("orderNo") String orderNo);
 
     StudentGoodsSellDto getStudentGoodsSellDto(String orderNo);
+
+    /**
+     * @describe 获取到期未确认的订单
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/10/12
+     * @time 10:09
+     * @param autoAffirmReceiveTime:
+     * @return java.util.List<java.lang.String>
+     */
+    String queryNoAffirmOrderNo(String autoAffirmReceiveTime);
+
+    /**
+     * @describe 自动确认收货
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/10/12
+     * @time 10:15
+     * @param orderNo:
+     * @return void
+     */
+    void autoAffirmReceive(@Param("orderNo") String orderNo, @Param("status") String status);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -474,4 +474,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     int countStudent(Map<String, Object> params);
     
     List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(@Param("organIdList") String organIdList);
+
+    BasicUserDto findUserByPhone(String phone);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentGoodsSellDto.java

@@ -16,6 +16,16 @@ public class StudentGoodsSellDto extends StudentPaymentOrder {
 
     private BigDecimal marketAmount = BigDecimal.ZERO;
 
+    private Integer autoAffirmReceiveTime;
+
+    public Integer getAutoAffirmReceiveTime() {
+        return autoAffirmReceiveTime;
+    }
+
+    public void setAutoAffirmReceiveTime(Integer autoAffirmReceiveTime) {
+        this.autoAffirmReceiveTime = autoAffirmReceiveTime;
+    }
+
     public Integer getAuthorUser() {
         return authorUser;
     }

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SellOrder.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.AccountType;
+import com.ym.mec.biz.dal.enums.SellStatus;
 import com.ym.mec.biz.dal.enums.SellTypeEnum;
 import com.ym.mec.biz.dal.enums.StockType;
 import io.swagger.annotations.ApiModel;
@@ -155,6 +156,12 @@ public class SellOrder {
     private AccountType accountType;
 
     /**
+     * 状态
+     */
+    @ApiModelProperty(value = "状态")
+    private SellStatus status;
+
+    /**
     * 交易时间
     */
     @ApiModelProperty(value="交易时间")
@@ -172,6 +179,17 @@ public class SellOrder {
     @ApiModelProperty(value="更新时间")
     private Date updateTime;
 
+    @ApiModelProperty(value = "收货状态,NO_RECEIVE 未确认,MANUAL_RECEIVE 手动确认,AUTO_RECEIVE 自动确认",required = true)
+    private String receiveStatus;
+
+    public String getReceiveStatus() {
+        return receiveStatus;
+    }
+
+    public void setReceiveStatus(String receiveStatus) {
+        this.receiveStatus = receiveStatus;
+    }
+
     public Integer getId() {
         return id;
     }
@@ -411,4 +429,12 @@ public class SellOrder {
     public void setBatchNo(String batchNo) {
         this.batchNo = batchNo;
     }
+
+    public SellStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(SellStatus status) {
+        this.status = status;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -107,6 +107,9 @@ public class StudentPaymentOrder {
 	//收款账户
 	private String merNos;
 
+	@ApiModelProperty(value = "收货状态,NO_RECEIVE 未确认,MANUAL_RECEIVE 手动确认,AUTO_RECEIVE 自动确认",required = true)
+	private String receiveStatus;
+
 	private PaymentChannelTypeEnum paymentChannelType;
 	
 	private SysUser user = new SysUser();
@@ -117,6 +120,14 @@ public class StudentPaymentOrder {
 	//课程优惠金额
 	private BigDecimal courseRemitFee;
 
+	public String getReceiveStatus() {
+		return receiveStatus;
+	}
+
+	public void setReceiveStatus(String receiveStatus) {
+		this.receiveStatus = receiveStatus;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SellStatus.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+
+public enum SellStatus implements BaseEnum<Integer, SellStatus> {
+    NORMAL(0, "正常"),
+    ONLY_RETURNED(1, "仅退货"),
+    REFUND(2, "退货退费");
+
+    private Integer code;
+    private String msg;
+
+    SellStatus(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return null;
+    }
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java

@@ -32,4 +32,12 @@ public interface SellOrderService extends BaseService<Integer, SellOrder> {
     List<SellOrder> addOrderDetail2SellOrder(List<StudentPaymentOrderDetail> orderDetails, StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup);
 
     void batchInsert(List<SellOrder> sellOrders);
+
+
+    /**
+     * 退货
+     * @param id
+     * @return
+     */
+    SellOrder refund(Integer id);
 }

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

@@ -19,4 +19,15 @@ public interface StudentGoodsSellService extends BaseService<Integer, StudentGoo
      * @return java.lang.Object
      */
     PageInfo<StudentGoodsSellDto> queryStudentGoodsOrders(GoodsSellQueryInfo queryInfo);
+
+    /**
+     * @describe 确认收货
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/10/10
+     * @time 17:53
+     * @param orderNo:
+     * @return void
+     */
+    void affirmReceive(String orderNo);
 }

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -7,6 +7,8 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.GoodsDao;
 import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.GoodsProcurement;
@@ -59,7 +61,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	@Autowired
 	private SysMessageService sysMessageService;
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	private TeacherDao teacherDao;
 
 	@Override
 	public BaseDAO<Integer, Goods> getDAO() {
@@ -238,12 +240,12 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		if(StringUtils.isEmpty(repertoryWarnPhone)){
 			return;
 		}
-		SysUser sysUser = sysUserFeignService.queryUserByMobile(repertoryWarnPhone);
-		if(sysUser == null || sysUser.getId() == null){
+		BasicUserDto sysUser = teacherDao.findUserByPhone(repertoryWarnPhone);
+		if(sysUser == null || sysUser.getUserId() == null){
 			throw new BizException("库存预警手机号不存在");
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
-		receivers.put(sysUser.getId(), repertoryWarnPhone);
+		receivers.put(sysUser.getUserId(), repertoryWarnPhone);
 		//内部库存预警
 		String innerRepertoryWarnNum = sysConfigDao.findConfigValue("inner_repertory_warn_num");
 		if(StringUtils.isNotEmpty(innerRepertoryWarnNum)){

+ 35 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -10,10 +10,12 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -30,6 +32,8 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     private MusicGroupDao musicGroupDao;
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
 
     @Override
     public BaseDAO<Integer, SellOrder> getDAO() {
@@ -128,11 +132,11 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 }
             }
             //库存类型
-            if(goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)){
+            if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)) {
                 sellOrder.setStockType(StockType.INTERNAL);
-            }else if(goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)){
+            } else if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)) {
                 sellOrder.setStockType(StockType.EXTERNAL);
-            }else {
+            } else {
                 sellOrder.setStockType(goodsStockType);
             }
             //批次号 TODO
@@ -236,11 +240,11 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                     sellOrder.setExpectAmount(BigDecimal.ZERO);
                 }
                 //库存类型
-                if(goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)){
+                if (goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)) {
                     sellOrder.setStockType(StockType.INTERNAL);
-                }else if(goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)){
+                } else if (goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)) {
                     sellOrder.setStockType(StockType.EXTERNAL);
-                }else {
+                } else {
                     sellOrder.setStockType(goods.getStockType());
                 }
                 //批次号 TODO
@@ -259,4 +263,29 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         sellOrderDao.batchInsert(sellOrders);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public SellOrder refund(Integer id) {
+        SellOrder sellOrder = sellOrderDao.get(id);
+
+        if (!sellOrder.getStatus().equals(SellStatus.NORMAL)) {
+            throw new BizException("当前状态不能退货,请核查");
+        }
+        if (!sellOrder.getType().equals(SellTypeEnum.SCHOOL_BUY)) {
+            throw new BizException("学校采购不能退货");
+        }
+        //1、更改销售列表状态
+        sellOrder.setStatus(SellStatus.REFUND);
+        sellOrder.setUpdateTime(new Date());
+        sellOrderDao.update(sellOrder);
+
+        //2、金额退到余额
+        if (sellOrder.getActualAmount().compareTo(BigDecimal.ZERO) > 0) {
+            sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getActualAmount().negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "退货");
+        }
+        //3、商品退回库存 TODO
+
+        return sellOrder;
+    }
+
 }

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentGoodsSellServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 
 import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.StudentGoodsSellDto;
 import com.ym.mec.biz.dal.entity.StudentGoodsSell;
 import com.ym.mec.biz.dal.page.GoodsSellQueryInfo;
@@ -11,8 +12,10 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,6 +27,8 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
 	
 	@Autowired
 	private StudentGoodsSellDao studentGoodsSellDao;
+	@Autowired
+	private SysConfigDao sysConfigDao;
 
 	@Override
 	public BaseDAO<Integer, StudentGoodsSell> getDAO() {
@@ -42,6 +47,10 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = studentGoodsSellDao.queryStudentGoodsOrders(params);
+			Integer autoAffirmReceiveTime = Integer.parseInt(sysConfigDao.findConfigValue("auto_affirm_receive_time"));
+			dataList.forEach(e->{
+				e.setAutoAffirmReceiveTime(autoAffirmReceiveTime);
+			});
 		}
 		if (count == 0) {
 			dataList = new ArrayList<>();
@@ -49,4 +58,20 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void affirmReceive(String orderNo) {
+		String str = "MANUAL_RECEIVE";
+		//如果订单编号为空,那么自动确认
+		if(StringUtils.isEmpty(orderNo)){
+			String autoAffirmReceiveTime = sysConfigDao.findConfigValue("auto_affirm_receive_time");
+			//获取到期的订单编号
+			orderNo = studentGoodsSellDao.queryNoAffirmOrderNo(autoAffirmReceiveTime);
+			str = "AUTO_RECEIVE";
+		}
+		if(StringUtils.isNotEmpty(orderNo)){
+			studentGoodsSellDao.autoAffirmReceive(orderNo,str);
+		}
+	}
 }

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

@@ -195,6 +195,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
         studentPaymentOrderDao.delete(orderId);
         studentPaymentRouteOrderDao.deleteByOrderNo(studentPaymentOrder.getOrderNo());
         sellOrderDao.deleteByOrderId(orderId);
+        //归还库存 TODO
         return true;
     }
 

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -579,9 +579,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 	@Override
 	public void pushTeacherExceptionAttendanceTask() {
-		//获取前一天的日期
 		Date date = new Date();
-//		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
 		String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
 		Set<Integer> teacherId = teacherAttendanceDao.queryTeacherExceptionAttendance(format);
 		if(teacherId == null || teacherId.size() == 0){

+ 17 - 5
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -29,16 +29,17 @@
         <result column="user_id_" property="userId"/>
         <result column="payment_channel_" property="paymentChannel"/>
         <result column="mer_no_" property="merNo"/>
+        <result column="status_" property="status"/>
         <result column="sell_time_" property="sellTime"/>
         <result column="create_ime_" property="createIme"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="receive_status_" property="receiveStatus"/>
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         id_, edu_teacher_id_,organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_,
-        actual_amount_,
-        balance_amount_, sell_cost_, sell_cost2_, type_, goods_id_,goods_name_, num_, user_id_, payment_channel_,
-        mer_no_, sell_time_, create_ime_, update_time_
+        actual_amount_,balance_amount_, sell_cost_, sell_cost2_, type_, goods_id_,goods_name_, num_, user_id_,
+        payment_channel_,mer_no_,batch_no_,stock_type_,account_type_,status_, sell_time_, create_ime_, update_time_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SellOrder">
         <!--@mbg.generated-->
@@ -129,6 +130,9 @@
             <if test="accountType != null">
                 account_type_ = #{accountType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="status != null">
+                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="sellTime != null">
                 sell_time_ = #{sellTime},
             </if>
@@ -159,12 +163,13 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="SellOrder" parameterType="map">
-        SELECT so.*,su.username_ user_name_,su.phone_,o.name_ organ_name_,co.name_ school_name_,t.real_name_ eduTeacher
+        SELECT so.*,su.username_ user_name_,su.phone_,o.name_ organ_name_,co.name_ school_name_,t.real_name_ eduTeacher,spo.receive_status_
         FROM sell_order so
         LEFT JOIN sys_user su ON so.user_id_ = su.id_
         LEFT JOIN organization o ON o.id_ = so.organ_id_
         LEFT JOIN cooperation_organ co ON co.id_= so.cooperation_organ_id_
         LEFT JOIN sys_user t ON t.id_ = so.edu_teacher_id_
+        LEFT JOIN student_payment_order spo ON so.order_id_ = spo.id_
         <include refid="queryPageSql"/>
         ORDER BY so.create_ime_ DESC
         <include refid="global.limit"/>
@@ -173,6 +178,7 @@
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
         SELECT COUNT(*) FROM sell_order so
+        LEFT JOIN student_payment_order spo ON so.order_id_ = spo.id_
         <include refid="queryPageSql"/>
     </select>
 
@@ -190,8 +196,14 @@
             <if test="cooperationOrganId != null">
                 AND so.cooperation_organ_id_ = #{cooperationOrganId}
             </if>
+            <if test="status != null">
+                AND so.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
             <if test="type != null">
-                AND so.type_ = #{type}
+                AND so.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="receiveStatus != null and receiveStatus != ''">
+                AND spo.receive_status_ = #{receiveStatus}
             </if>
             <if test="startTime != null">
                 AND so.sell_time_ >= #{startTime}

+ 12 - 1
mec-biz/src/main/resources/config/mybatis/StudentGoodsSellMapper.xml

@@ -75,7 +75,10 @@
 		update_time_ = NOW()
 		</set> WHERE id_ = #{id}
 	</update>
-	
+	<update id="autoAffirmReceive">
+		UPDATE student_payment_order SET receive_status_ = #{status},update_time_ = NOW() WHERE FIND_IN_SET(order_no_,#{orderNo})
+	</update>
+
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM student_goods_sell WHERE id_ = #{id} 
@@ -114,6 +117,9 @@
 			<if test="status != null">
 				AND spo.status_ = #{status}
 			</if>
+			<if test="receiveStatus != null and receiveStatus != ''">
+				AND spo.receive_status_ = #{receiveStatus}
+			</if>
 			<if test="search != null and search != ''">
 				AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
 			</if>
@@ -136,4 +142,9 @@
 		LEFT JOIN student_goods_sell sgs ON spo.order_no_ = sgs.order_no_
 		WHERE spo.order_no_ = #{orderNo} LIMIT 1
 	</select>
+    <select id="queryNoAffirmOrderNo" resultType="java.lang.String">
+		SELECT GROUP_CONCAT(DISTINCT so.order_no_) FROM sell_order so
+		LEFT JOIN student_payment_order spo ON spo.order_no_ = so.order_no_
+		WHERE spo.status_ = 'SUCCESS' AND TIMESTAMPDIFF(HOUR,spo.pay_time_,NOW()) >= #{autoAffirmReceiveTime}
+	</select>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -33,6 +33,7 @@
         <result column="class_group_id_" property="classGroupId"/>
         <result column="pay_time_" property="payTime"/>
         <result column="version_" property="version"/>
+        <result column="receive_status_" property="receiveStatus"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentPaymentOrder" extends="StudentPaymentOrder"
@@ -104,6 +105,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentOrder">
         UPDATE student_payment_order
         <set>
+            <if test="receiveStatus != null and receiveStatus != ''">
+                receive_status_ = #{receiveStatus},
+            </if>
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1188,4 +1188,9 @@
 		</where>
 		GROUP BY t.`id_` 
     </select>
+    <select id="findUserByPhone" resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
+        SELECT username_,id_ user_id_,avatar_ head_url_,
+        gender_,user_type_
+        FROM sys_user WHERE phone_ = #{phone}
+    </select>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -140,4 +140,8 @@ public interface TaskRemoteService {
 	//商品库存预警
 	@GetMapping("task/repertoryWarn")
     void goodsRepertoryFBIWarnTask();
+
+	//自动确认收货
+	@GetMapping("task/autoAffirmReceiveTask")
+    void autoAffirmReceiveTask();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -175,4 +175,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void goodsRepertoryFBIWarnTask() {
 		logger.info("商品库存预警推送失败");
 	}
+
+	@Override
+	public void autoAffirmReceiveTask() {
+		logger.info("确认收货执行失败");
+	}
 }

+ 7 - 0
mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java

@@ -158,4 +158,11 @@ public class RepairController extends BaseController {
     public Object getStudentGoodsOrder(Integer goodsSellId) {
         return succeed(studentGoodsSellService.get(goodsSellId));
     }
+
+    @ApiOperation(value = "确认收货")
+    @PostMapping("/affirmReceive")
+    public Object affirmReceive(String orderNo) {
+        studentGoodsSellService.affirmReceive(orderNo);
+        return succeed();
+    }
 }

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/SubjectChangeController.java

@@ -48,7 +48,7 @@ public class SubjectChangeController extends BaseController {
             @ApiImplicitParam(name = "金额", value = "amount", required = true, dataType = "BigDecimal"),
             @ApiImplicitParam(name = "是否使余额", value = "isUseBalancePayment", required = true, dataType = "Boolean")
     })
-    public HttpResponseResult<Map> payChaange(Integer id, BigDecimal amount, Boolean isUseBalancePayment, Boolean isRepay) throws Exception {
+    public HttpResponseResult<Map> payChange(Integer id, BigDecimal amount, Boolean isUseBalancePayment, Boolean isRepay) throws Exception {
         SubjectChange subjectChange = subjectChangeDao.get(id);
         if (!isRepay && subjectChange.getStatus().equals(SubjectChangeStatusEnum.ING)) {
             return failed(HttpStatus.CONTINUE, "您有待支付的订单");

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/AutoAffirmReceiveTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AutoAffirmReceiveTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.autoAffirmReceiveTask();
+	}
+}

+ 14 - 2
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java

@@ -19,6 +19,7 @@ import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.IOUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -39,6 +40,9 @@ public class AdapayController extends BaseController {
     @Autowired
     private SysConfigDao sysConfigDao;
 
+    @Value("${spring.profiles.active:dev}")
+    private String profiles;
+
     @ApiOperation(value = "企业用户列表")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('adapay/queryPage')")
@@ -50,6 +54,9 @@ public class AdapayController extends BaseController {
     @PostMapping(value = "createMember")
     @PreAuthorize("@pcs.hasPermissions('adapay/createMember')")
     public HttpResponseResult<Map<String, Object>> createMember(HfMember member) throws Exception {
+        if (!profiles.equals("prod")) {
+            return failed("仅生产环境可用");
+        }
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
@@ -75,6 +82,9 @@ public class AdapayController extends BaseController {
     @PostMapping(value = "updateMember")
     @PreAuthorize("@pcs.hasPermissions('adapay/updateMember')")
     public HttpResponseResult<Map<String, Object>> updateMember(HfMember member) throws Exception {
+        if (!profiles.equals("prod")) {
+            return failed("仅生产环境可用");
+        }
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
@@ -101,6 +111,9 @@ public class AdapayController extends BaseController {
     @PostMapping(value = "createSettleAccount")
     @PreAuthorize("@pcs.hasPermissions('adapay/createSettleAccount')")
     public HttpResponseResult<Map<String, Object>> createSettleAccount(String memberId, String cardNo, String bankCode) throws Exception {
+        if (!profiles.equals("prod")) {
+            return failed("仅生产环境可用");
+        }
         try {
             return succeed(hfMemberService.createSettleAccount(memberId, cardNo, bankCode));
         } catch (Exception e) {
@@ -120,12 +133,11 @@ public class AdapayController extends BaseController {
     @GetMapping(value = "exportBill")
     @PreAuthorize("@pcs.hasPermissions('adapay/exportBill')")
     public void exportBill(Date startTime, Date endTime, HttpServletResponse response) throws Exception {
-
         long createdGte = startTime.getTime();
         long createdLte = DateUtil.getLastSecondWithDay(endTime).getTime();
         int pageIndex = 1;
         List<Map<String, Object>> data = new ArrayList<>();
-        while (true) {
+        while (profiles.equals("prod")) {
             Map<String, Object> paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
             JSONArray payments = (JSONArray) paymentList.get("payments");
             if (!paymentList.get("status").equals("succeeded")) {

+ 7 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SellOrderController.java

@@ -80,4 +80,11 @@ public class SellOrderController extends BaseController {
         return succeed(sellOrder);
     }
 
+    @ApiOperation("退货")
+    @PostMapping(value = "/refund")
+    @PreAuthorize("@pcs.hasPermissions('sellOrder/refund')")
+    public HttpResponseResult<SellOrder> refund(Integer id) {
+        return succeed(sellOrderService.refund(id));
+    }
+
 }

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -75,6 +75,14 @@ public class TaskController extends BaseController {
 
 	@Autowired
 	private GoodsService goodsService;
+	@Autowired
+	private StudentGoodsSellService studentGoodsSellService;
+
+	@GetMapping(value = "/autoAffirmReceiveTask")
+	// 自动确认收货
+	public void affirmReceive(){
+		studentGoodsSellService.affirmReceive(null);
+	}
 
 	@GetMapping(value = "/repertoryWarn")
 	// 商品库存预警