Browse Source

导出优化

zouxuan 3 years ago
parent
commit
dda67cdefc

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -68,6 +68,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     COUNT_CLOUD_TEACHER_ACTIVE_DETAIL("COUNT_CLOUD_TEACHER_ACTIVE_DETAIL", "云教练活动统计详情"),
     MUSIC_ENLIGHTENMENT_QUESTIONNAIRES("MUSIC_ENLIGHTENMENT_QUESTIONNAIRES", "启蒙课问卷导出"),
     STUDENT_INSTRUMENT("STUDENT_INSTRUMENT", "乐保导出"),
+    EXPORT_BILL("EXPORT_BILL", "对账单导出"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出");
 
     private String code;

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -30,6 +30,9 @@ public interface ExportService {
 
     Map<ExportEnum, Function<Map<String, Object>, List>> getExportFuncMap();
 
+    //导出对账单
+    List exportBill(Map<String, Object> info);
+
     /**
     * @description: 乐保导出
      * @param info

+ 114 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -10,6 +10,7 @@ import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -25,12 +26,15 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
+import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.ini.IniFileUtil;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.system.ApplicationHome;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
@@ -172,6 +176,9 @@ public class ExportServiceImpl implements ExportService {
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
 
+    @Value("${spring.profiles.active:dev}")
+    private String profiles;
+
 
     @Override
     public Map<String,String> getExportMap(ExportDto exportDto) throws IOException {
@@ -325,6 +332,7 @@ public class ExportServiceImpl implements ExportService {
         exportFuncMap.put(ExportEnum.MUSIC_ENLIGHTENMENT_QUESTIONNAIRES, info -> musicEnlightenmentQuestionnaireService.queryPage(getQueryInfo(info,TeacherServeQueryInfo.class,false)).getRows());
         exportFuncMap.put(ExportEnum.EXERCISES_SITUATION, info -> studentExtracurricularExercisesSituationService.queryTeacherPerformanceIndicator(getQueryInfo(info,TeacherServeQueryInfo.class,false)));
         exportFuncMap.put(ExportEnum.STUDENT_INSTRUMENT, info -> exportStudentInstrument(info));
+        exportFuncMap.put(ExportEnum.EXPORT_BILL, info -> exportBill(info));
 
         //导出到报表中心
 //        exportManageFuncMap.put(ExportEnum.SUPER_FIND_COURSE_SCHEDULES, (info,headColumns) -> this.superFindCourseSchedules(info,headColumns));
@@ -337,6 +345,112 @@ public class ExportServiceImpl implements ExportService {
 
     }
 
+    //导出对账单
+    @Override
+    public List exportBill(Map<String, Object> info){
+        String startTimeStr = getParam(info, "startTime", String.class);
+        Date startTime = null;
+        if(StringUtils.isNotEmpty(startTimeStr)){
+            startTime = DateUtil.stringToDate(startTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        Date endTime = null;
+        String endTimeStr = getParam(info, "endTime", String.class);
+        if(StringUtils.isNotEmpty(endTimeStr)){
+            endTime = DateUtil.stringToDate(endTimeStr,DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        }
+        long createdGte = startTime.getTime();
+        long createdLte = DateUtil.getLastSecondWithDay(endTime).getTime();
+        int pageIndex = 1;
+        List<Map<String, Object>> data = new ArrayList<>();
+        while (profiles.equals("prod")) {
+            Map<String, Object> paymentList = null;
+            try {
+                paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            JSONArray payments = (JSONArray) paymentList.get("payments");
+            if (!paymentList.get("status").equals("succeeded")) {
+                throw new BizException("查询失败,请重试");
+            }
+
+            if (payments != null && payments.size() > 0) {
+                for (Object payment : payments) {
+                    Map<String, Object> paymentMap = (Map<String, Object>) payment;
+                    if (!paymentMap.get("status").equals("succeeded")) {
+                        continue;
+                    }
+                    paymentMap.put("created_time", DateUtil.timeStamp2Date(paymentMap.get("created_time").toString(), null));
+                    if (paymentMap.get("pay_channel").equals("alipay_qr")) {
+                        paymentMap.put("pay_channel", "支付宝正扫");
+                    } else if (paymentMap.get("pay_channel").equals("alipay_wap")) {
+                        paymentMap.put("pay_channel", "支付宝H5支付");
+                    } else {
+                        paymentMap.put("pay_channel", "微信公众号支付");
+                    }
+
+                    if (paymentMap.get("status").equals("pending")) {
+                        paymentMap.put("status", "交易处理中");
+                    } else if (paymentMap.get("status").equals("succeeded")) {
+                        paymentMap.put("status", "交易成功");
+                    } else {
+                        paymentMap.put("status", "交易失败");
+                    }
+                    if (paymentMap.get("pay_mode").equals("delay")) {
+                        if (!paymentMap.containsKey("payment_confirms")) {
+                            Map<String, Object> confirmMap = null;
+                            try {
+                                confirmMap = Payment.queryConfirmList(paymentMap.get("id").toString());
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                            if (confirmMap.containsKey("payment_confirms")) {
+                                paymentMap.put("payment_confirms", confirmMap.get("payment_confirms"));
+                            }
+                        }
+                        if (!paymentMap.containsKey("payment_confirms")) {
+                            paymentMap.put("memo", "没有提交分账信息,请联系技术核查");
+                            data.add(paymentMap);
+                            continue;
+                        }
+                        JSONArray confirms = (JSONArray) paymentMap.get("payment_confirms");
+                        for (Object confirm : confirms) {
+                            Map<String, Object> divMemberMap = (Map<String, Object>) confirm;
+                            paymentMap.put("fee_amt", divMemberMap.get("fee_amt"));
+                            divMemberMap.putAll(paymentMap);
+
+                            JSONArray divMembers = (JSONArray) divMemberMap.get("div_members");
+                            Map<String, Object> divMember = (Map<String, Object>) divMembers.get(0);
+                            divMemberMap.putAll(divMember);
+                            if (divMemberMap.get("member_id").equals("0")) {
+                                divMemberMap.put("member_id", ConfigInit.merNo);
+                            }
+                            data.add(divMemberMap);
+                        }
+                    } else {
+                        JSONArray divMembers = (JSONArray) paymentMap.get("div_members");
+                        for (Object divMember : divMembers) {
+                            Map<String, Object> divMemberMap = (Map<String, Object>) divMember;
+                            divMemberMap.putAll(paymentMap);
+                            if (divMemberMap.get("member_id").equals("0")) {
+                                divMemberMap.put("member_id", ConfigInit.merNo);
+                            }
+                            if (divMemberMap.get("fee_flag").equals("N")) {
+                                divMemberMap.put("fee_amt", "0.00");
+                            }
+                            data.add(divMemberMap);
+                        }
+                    }
+                }
+            }
+            if (paymentList.get("has_more").equals(false)) {
+                break;
+            }
+            pageIndex++;
+        }
+        return data;
+    }
+
     //乐保导出
     @Override
     public List exportStudentInstrument(Map<String, Object> info){

+ 6 - 2
mec-web/src/main/resources/exportColumnMapper.ini

@@ -240,11 +240,15 @@ fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStuden
 
 [分部云教练学员训练数据导出]
 headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否团练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
-fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'",         "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
+fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
 headColumns = ["分部", "购买人数", "购买金额", "目标金额", "人均购买金额", "目标人数", "目标达成率"]
-fieldColumns = ["organName", "buyNum", "buyAmount", "targetAmount", "avgBuyAmount",         "targetNum", "targetFinishScale"]
+fieldColumns = ["organName", "buyNum", "buyAmount", "targetAmount", "avgBuyAmount", "targetNum", "targetFinishScale"]
+
+[对账单导出]
+headColumns = ["支付流水号", "订单号", "支付渠道", "交易金额", "商户号", "分润金额", "是否承担手续费", "手续费", "第三方订单号", "支付宝/微信订单号", "交易时间", "交易状态", "备注"]
+fieldColumns = ["id", "order_no", "pay_channel", "pay_amt", "member_id", "amount", "fee_flag", "fee_amt", "party_order_id", "out_trans_id", "created_time", "status", ""]
 
 [云教练活动统计详情]
 headColumns = ["学员编号", "学员", "合作单位", "乐团", "乐团模式", "声部", "年级", "指导老师", "购买套餐", "购买金额"]