浏览代码

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

zouxuan 4 年之前
父节点
当前提交
7907caab72

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectChangeDao.java

@@ -57,4 +57,12 @@ public interface SubjectChangeDao extends BaseDAO<Integer, SubjectChange> {
      * @return
      */
     List<SubjectChange> getStudentGoods(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取学生待支付的声部更改
+     * @param studentId
+     * @param musicGroupId
+     * @return
+     */
+    SubjectChange getStudentWaitPay(@Param("studentId") Integer studentId, @Param("musicGroupId") String musicGroupId);
 }

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

@@ -28,7 +28,7 @@ public interface SubjectChangeService extends BaseService<Integer, SubjectChange
      * @param isUseBalancePayment
      * @return
      */
-    Map payChange(Integer id, BigDecimal amount, Boolean isUseBalancePayment) throws Exception;
+    Map payChange(Integer id, BigDecimal amount, Boolean isUseBalancePayment,Boolean isRepay) throws Exception;
 
     /**
      * 添加声部更换

+ 43 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -94,21 +94,32 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     }
 
     @Override
-    public Map payChange(Integer id, BigDecimal viewAmount, Boolean isUseBalancePayment) throws Exception {
+    @Transactional(rollbackFor = Exception.class)
+    public Map payChange(Integer id, BigDecimal viewAmount, Boolean isUseBalancePayment, Boolean isRepay) throws Exception {
+        Date date = new Date();
         SubjectChange subjectChange = subjectChangeDao.get(id);
+        if (isRepay) {
+            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(subjectChange.getOrganId().longValue());
+            studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
+            studentPaymentOrder.setUpdateTime(date);
+            studentPaymentOrderService.update(studentPaymentOrder);
+            subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
+        }
+
+        if (subjectChange.getStatus().equals(SubjectChangeStatusEnum.CANCELED)) {
+            throw new BizException("声部更改已取消,请勿缴费");
+        }
+        if (subjectChange.getStatus().equals(SubjectChangeStatusEnum.SUCCESSED)) {
+            throw new BizException("声部更改已缴费,请勿重复缴费");
+        }
+
         MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
-        if (musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
-            throw new BizException("乐团当前状态不能缴费");
+        if (!musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && !musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
+            throw new BizException("乐团当前状态不能缴声部更改");
         }
         BigDecimal amount = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
 
-        Date date = new Date();
         studentDao.lockUser(subjectChange.getStudentId());
-        subjectChange.setUpdateTime(date);
-        subjectChange.setStatus(SubjectChangeStatusEnum.ING);
-        if (subjectChangeDao.update(subjectChange) <= 0) {
-            throw new BizException("下单失败,请重试");
-        }
 
         String orderNo = idGeneratorService.generatorId("payment") + "";
 
@@ -129,10 +140,21 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
 
         studentPaymentOrderService.insert(studentPaymentOrder);
+
+        subjectChange.setOrderId(studentPaymentOrder.getId().intValue());
+        subjectChange.setOrderNo(orderNo);
+        subjectChange.setOrganId(studentPaymentOrder.getOrganId());
+        subjectChange.setUpdateTime(date);
+        subjectChange.setStatus(SubjectChangeStatusEnum.ING);
+        if (subjectChangeDao.update(subjectChange) <= 0) {
+            throw new BizException("下单失败,请重试");
+        }
+
         studentPaymentOrder.setVersion(0);
         if (amount.compareTo(viewAmount) != 0) {
             throw new BizException("价格异常");
         }
+
         BigDecimal balance = BigDecimal.ZERO;
         if (isUseBalancePayment != null && isUseBalancePayment && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(subjectChange.getStudentId());
@@ -190,6 +212,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     @Override
     @Transactional(rollbackFor = Exception.class)
     public SubjectChange addChange(SubjectChange subjectChange) {
+        SubjectChange studentWaitPay = subjectChangeDao.getStudentWaitPay(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
+        if(studentWaitPay != null){
+            throw new BizException("已有未支付的声部更改,请勿重复创建");
+        }
         Date nowDate = new Date();
         SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
         subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
@@ -316,6 +342,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
         Date nowDate = new Date();
         //更新订单信息
@@ -330,14 +357,15 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         if (subjectChange == null) {
             throw new BizException("声部更换订单不存在");
         }
-        if (!subjectChange.getStatus().equals(SubjectChangeStatusEnum.WAIT_PAY)) {
+        if (!subjectChange.getStatus().equals(SubjectChangeStatusEnum.ING)) {
             return true;
         }
 
-        Integer userId = studentPaymentOrder.getUserId();
+        subjectChange.setUpdateTime(nowDate);
+        subjectChange.setTransNo(studentPaymentOrder.getTransNo());
+        subjectChange.setMerNo(studentPaymentOrder.getMerNos());
 
-        //更新声部信息报名数量
-        studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
+        Integer userId = studentPaymentOrder.getUserId();
 
         Map<Integer, String> map = new HashMap<>();
         map.put(userId, userId.toString());
@@ -348,10 +376,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             } catch (Exception e) {
                 logger.error("产品协议生成失败", e);
             }
+            //更新声部信息报名数量
+            studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
 
             subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
-            subjectChange.setUpdateTime(nowDate);
-            subjectChange.setSellTime(nowDate);
 
             //乐器辅件价差大于0时,有销售金额
             if (studentPaymentOrder.getActualAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -404,7 +432,6 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
         if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
-            subjectChange.setUpdateTime(nowDate);
             if (this.update(subjectChange) <= 0) {
                 throw new BizException("声部更改订单更新失败");
             }

+ 8 - 1
mec-biz/src/main/resources/config/mybatis/SubjectChangeMapper.xml

@@ -206,7 +206,7 @@
         SELECT *
         FROM subject_change
         WHERE music_group_id_ = #{musicGroupId}
-          AND status_ = 0
+          AND status_ IN (0, 1)
     </select>
 
     <select id="queryPage" resultMap="SubjectChange">
@@ -287,4 +287,11 @@
             GROUP BY student_id_
         )
     </select>
+    <select id="getStudentWaitPay" resultMap="SubjectChange">
+        SELECT *
+        FROM subject_change
+        WHERE music_group_id_ = #{musicGroupId}
+          AND student_id_ = #{studentId}
+          AND status_ IN (0, 1) LIMIT 1
+    </select>
 </mapper>

+ 13 - 4
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -128,14 +128,14 @@ public class StudentOrderController extends BaseController {
             orderDetail.put("goods", goodsList);
             orderDetail.put("course", musicGroup.getCourseForm());
             orderDetail.put("ownershipType", musicGroup.getOwnershipType());
-            orderDetail.put("detailType",orderDetailType);
+            orderDetail.put("detailType", orderDetailType);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP)) {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
             SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", info);
-        }else if(orderByOrderNo.getGroupType().equals(GroupType.GOODS_SELL)){
+        } else if (orderByOrderNo.getGroupType().equals(GroupType.GOODS_SELL)) {
             orderDetail.put("detail", studentGoodsSellDao.getStudentGoodsSellDto(orderNo));
         }
         return succeed(orderDetail);
@@ -151,7 +151,7 @@ public class StudentOrderController extends BaseController {
     public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
         Map<String, Object> signParams = new LinkedHashMap<>();
         signParams.put("appId", ConfigInit.appId);
-        signParams.put("amount", amount.setScale(2,BigDecimal.ROUND_HALF_UP));
+        signParams.put("amount", amount.setScale(2, BigDecimal.ROUND_HALF_UP));
         signParams.put("orderNo", orderNo);
 //        signParams.put("notifyUrl", notifyUrl);
 //        signParams.put("returnUrl", returnUrl);
@@ -190,6 +190,15 @@ public class StudentOrderController extends BaseController {
         if (studentPaymentOrder == null && tenantPaymentOrder == null) {
             return failed("订单不存在");
         }
+        if (studentPaymentOrder != null && !studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)) {
+            String msg = studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS) ? "订单已支付,请勿重复支付" : "订单已关闭,不能支付";
+            return failed(msg);
+        }
+        if (tenantPaymentOrder != null && !tenantPaymentOrder.getStatus().equals(DealStatusEnum.ING)) {
+            String msg = tenantPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS) ? "订单已支付,请勿重复支付" : "订单已关闭,不能支付";
+            return failed(msg);
+        }
+
         if (studentPaymentOrder != null) {
             createTime = studentPaymentOrder.getCreateTime();
         } else {
@@ -210,7 +219,7 @@ public class StudentOrderController extends BaseController {
         paymentParams.put("app_id", ConfigInit.appId);
         paymentParams.put("order_no", orderNo);
         paymentParams.put("pay_channel", payChannel);
-        paymentParams.put("pay_amt", amount.setScale(2,BigDecimal.ROUND_HALF_UP));
+        paymentParams.put("pay_amt", amount.setScale(2, BigDecimal.ROUND_HALF_UP));
         paymentParams.put("goods_title", orderSubject);
         paymentParams.put("goods_desc", orderBody);
         paymentParams.put("time_expire", timeExpire);

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

@@ -1,6 +1,8 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dao.SubjectChangeDao;
 import com.ym.mec.biz.dal.entity.SubjectChange;
+import com.ym.mec.biz.dal.enums.SubjectChangeStatusEnum;
 import com.ym.mec.biz.service.SubjectChangeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -9,6 +11,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 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;
@@ -25,6 +28,8 @@ public class SubjectChangeController extends BaseController {
 
     @Autowired
     private SubjectChangeService subjectChangeService;
+    @Autowired
+    private SubjectChangeDao subjectChangeDao;
 
 
     @ApiOperation(value = "获取更换详情")
@@ -43,8 +48,12 @@ 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) throws Exception {
-        return succeed(subjectChangeService.payChange(id, amount, isUseBalancePayment));
+    public HttpResponseResult<Map> payChaange(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, "您有待支付的订单");
+        }
+        return succeed(subjectChangeService.payChange(id, amount, isUseBalancePayment, isRepay));
     }
 
 

+ 82 - 0
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -672,4 +672,86 @@ public class POIUtil {
 		return map;
 	}
 
+
+	/**
+	 * 将数据集dataset导出到fileName文件中
+	 *
+	 * @param headColumns  导出文件的列名
+	 * @param fieldColumns
+	 * @param dataset      数据源
+	 * @return
+	 * @throws IOException
+	 * @throws NoSuchMethodException
+	 * @throws InvocationTargetException
+	 * @throws IllegalAccessException
+	 */
+	public static <T> HSSFWorkbook multipleSheetExportExcel(String[] headColumns, String[] fieldColumns, List<T> dataset,HSSFWorkbook workbook) throws IOException, IllegalAccessException,
+			InvocationTargetException, NoSuchMethodException {
+		if (headColumns == null) {
+			throw new UtilException("excel列名不能为空");
+		}
+		if (dataset == null) {
+			throw new UtilException("数据集不能为空");
+		}
+		/*if (dataset.size() > MAX_DATA_SIZE) {
+			throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
+		}*/
+		if(workbook == null) {
+			workbook = new HSSFWorkbook();
+		}
+		HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
+		/************** 设置单元格样式 *************/
+		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
+		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
+		style.setWrapText(true);
+		HSSFFont font = workbook.createFont();
+		font.setColor(HSSFFont.COLOR_NORMAL);
+		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+		style.setFont(font);
+
+		HSSFSheet sheet = workbook.createSheet(); // 创建sheet
+		// 设置表头
+		// 创建第一行
+		HSSFRow row1 = sheet.createRow(0);
+		HSSFCell cell = null;
+		for (int i = 0; i < headColumns.length; i++) {
+			// 创建列
+			cell = row1.createCell(i);
+			// 定义单元格为字符串类型
+			cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+			// 设置单元格的样式
+			cell.setCellStyle(style);
+			// 设置单元格的值
+			cell.setCellValue(headColumns[i]);
+		}
+		HSSFRow row = null;
+		// 添加数据
+		T data = null;
+		Object obj = null;
+		for (int i = 1; i <= dataset.size(); i++) {
+			data = dataset.get(i - 1);
+			if (data != null) {
+				row = sheet.createRow(i);
+				for (int j = 0; j < fieldColumns.length; j++) {
+					cell = row.createCell(j);
+					try {
+						obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
+						if (obj instanceof Date) {
+							obj = sdf.format(obj);
+						}
+					} catch (NestedNullException e) {
+						LOGGER.warn(e.getMessage());
+						obj = null;
+					}
+					if (obj != null) {
+						cell.setCellValue(obj.toString());
+					} else {
+						cell.setCellValue("");
+					}
+				}
+			}
+		}
+		return workbook;
+	}
+
 }

+ 12 - 3
mec-web/src/main/java/com/ym/mec/web/controller/OperatingReportController.java

@@ -92,6 +92,7 @@ public class OperatingReportController extends BaseController {
             }
         }
         queryInfo.setRows(65000);
+        queryInfo.setType("organ");
         PageInfo<OperatingReport> pageList = operatingReportService.queryPage(queryInfo);
         if (pageList.getTotal() <= 0) {
             response.setStatus(200);
@@ -103,9 +104,17 @@ public class OperatingReportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
 
-            String[] header = {"分部","学校","销售收入(元)","服务收入(元)","业务退费(元)","收入合计(元)","销售成本(元)","固定支出(元)", "变动支出(元)", "分摊费用(元)", "成本费用合计(元)", "利润(元)"};
-            String[] body = {"organName", "schoolName", "sellAmount", "serviceAmount", "refundAmount", "incomeTotal", "sellCost","expensesAmount","variableCost","distributionAmount","costAmount","profit"};
-            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList.getRows());
+            String[] header = {"分部", "销售收入(元)", "服务收入(元)", "业务退费(元)", "收入合计(元)", "销售成本(元)", "固定支出(元)", "变动支出(元)", "分摊费用(元)", "成本费用合计(元)", "利润(元)"};
+            String[] body = {"organName", "sellAmount", "serviceAmount", "refundAmount", "incomeTotal", "sellCost", "expensesAmount", "variableCost", "distributionAmount", "costAmount", "profit"};
+            HSSFWorkbook workbook = POIUtil.multipleSheetExportExcel(header, body, pageList.getRows(), null);
+
+
+            queryInfo.setType("school");
+            pageList = operatingReportService.queryPage(queryInfo);
+            String[] header2 = {"分部", "学校", "销售收入(元)", "服务收入(元)", "业务退费(元)", "收入合计(元)", "销售成本(元)", "固定支出(元)", "变动支出(元)", "分摊费用(元)", "成本费用合计(元)", "利润(元)"};
+            String[] body2 = {"organName", "schoolName", "sellAmount", "serviceAmount", "refundAmount", "incomeTotal", "sellCost", "expensesAmount", "variableCost", "distributionAmount", "costAmount", "profit"};
+            workbook = POIUtil.multipleSheetExportExcel(header2, body2, pageList.getRows(), workbook);
+
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=cooperationOrgan-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();