Commit d0e1f676 authored by Administrator's avatar Administrator

小程序管理后台多路线改造

parent 48e3670c
...@@ -16,14 +16,10 @@ import java.util.List; ...@@ -16,14 +16,10 @@ import java.util.List;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -61,7 +57,6 @@ public class ImportExcel { ...@@ -61,7 +57,6 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param path 导入文件,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException * @throws InvalidFormatException
* @throws IOException * @throws IOException
...@@ -74,7 +69,6 @@ public class ImportExcel { ...@@ -74,7 +69,6 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param path 导入文件对象,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException * @throws InvalidFormatException
* @throws IOException * @throws IOException
...@@ -87,7 +81,6 @@ public class ImportExcel { ...@@ -87,7 +81,6 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param path 导入文件
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号 * @param sheetIndex 工作表编号
* @throws InvalidFormatException * @throws InvalidFormatException
...@@ -101,7 +94,6 @@ public class ImportExcel { ...@@ -101,7 +94,6 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param path 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号 * @param sheetIndex 工作表编号
* @throws InvalidFormatException * @throws InvalidFormatException
...@@ -115,7 +107,7 @@ public class ImportExcel { ...@@ -115,7 +107,7 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param file 导入文件对象 * @param multipartFile 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号 * @param sheetIndex 工作表编号
* @throws InvalidFormatException * @throws InvalidFormatException
...@@ -129,7 +121,7 @@ public class ImportExcel { ...@@ -129,7 +121,7 @@ public class ImportExcel {
/** /**
* 构造函数 * 构造函数
* *
* @param path 导入文件对象 * @param fileName 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1 * @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号 * @param sheetIndex 工作表编号
* @throws InvalidFormatException * @throws InvalidFormatException
...@@ -198,8 +190,8 @@ public class ImportExcel { ...@@ -198,8 +190,8 @@ public class ImportExcel {
* @param column 获取单元格列号 * @param column 获取单元格列号
* @return 单元格值 * @return 单元格值
*/ */
public Object getCellValue(Row row, int column) { public static String getCellValue(Row row, int column) {
Object val = ""; String val = "";
try { try {
Cell cell = row.getCell(column); Cell cell = row.getCell(column);
...@@ -212,9 +204,9 @@ public class ImportExcel { ...@@ -212,9 +204,9 @@ public class ImportExcel {
} else if (cell.getCellTypeEnum() == CellType.FORMULA) { } else if (cell.getCellTypeEnum() == CellType.FORMULA) {
val = cell.getCellFormula(); val = cell.getCellFormula();
} else if (cell.getCellTypeEnum() == CellType.BOOLEAN) { } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
val = cell.getBooleanCellValue(); val = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellTypeEnum() == CellType.ERROR) { } else if (cell.getCellTypeEnum() == CellType.ERROR) {
val = cell.getErrorCellValue(); val = String.valueOf(cell.getErrorCellValue());
} }
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -223,6 +215,15 @@ public class ImportExcel { ...@@ -223,6 +215,15 @@ public class ImportExcel {
return val; return val;
} }
public static void setCellStyle(XSSFWorkbook wb, XSSFCell cell){
XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFFont font = wb.createFont();
font.setColor(Font.COLOR_RED);
font.setBold(true);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
}
/** /**
* 获取导入数据列表 * 获取导入数据列表
* *
...@@ -281,6 +282,7 @@ public class ImportExcel { ...@@ -281,6 +282,7 @@ public class ImportExcel {
} }
// Field sorting // Field sorting
Collections.sort(annotationList, new Comparator<Object[]>() { Collections.sort(annotationList, new Comparator<Object[]>() {
@Override
public int compare(Object[] o1, Object[] o2) { public int compare(Object[] o1, Object[] o2) {
return new Integer(((ExcelField) o1[0]).sort()).compareTo( return new Integer(((ExcelField) o1[0]).sort()).compareTo(
new Integer(((ExcelField) o2[0]).sort())); new Integer(((ExcelField) o2[0]).sort()));
...@@ -297,7 +299,7 @@ public class ImportExcel { ...@@ -297,7 +299,7 @@ public class ImportExcel {
Row row = this.getRow(i); Row row = this.getRow(i);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Object[] os : annotationList) { for (Object[] os : annotationList) {
Object val = this.getCellValue(row, column++); Object val = getCellValue(row, column++);
if (val != null) { if (val != null) {
ExcelField ef = (ExcelField) os[0]; ExcelField ef = (ExcelField) os[0];
// If is dict type, get dict value // If is dict type, get dict value
......
...@@ -35,5 +35,7 @@ public class CmptScoreRuleScoreInfo { ...@@ -35,5 +35,7 @@ public class CmptScoreRuleScoreInfo {
@JsonIgnore @JsonIgnore
private String insertTime; private String insertTime;
private String updateTime; private String updateTime;
private int roadId;
private int pathId;
} }
package com.dlbridge.jadp.plugins.cmpt.bean;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.util.Objects;
@Getter
@Setter
@Accessors(chain = true)
@ToString
@ApiModel(value = "项目", description = "项目")
public class Path {
@ApiModelProperty(value = "组别ID", notes = "组别ID")
private Integer roadId;
@ApiModelProperty(value = "赛事ID", notes = "赛事ID")
private Integer cmptId;
@ApiModelProperty(value = "路线ID", notes = "路线ID")
private Integer pathId;
@ApiModelProperty(value = "是否支持多路线", notes = "是否支持多路线")
private String isMultiRoute;
@ApiModelProperty(value = "路线名称", notes = "路线名称")
private String pathName;
@ApiModelProperty(value = "文件名称", notes = "文件名称")
private String fileName;
@ApiModelProperty(value = "文件地址", notes = "文件地址")
private String fileUrl;
@ApiModelProperty(value = "文件大小", notes = "单位kb")
private double fileSize;
private String createTime;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Path path = (Path) o;
return pathId.equals(path.pathId);
}
@Override
public int hashCode() {
return Objects.hash(pathId);
}
}
...@@ -15,6 +15,7 @@ public interface CmptScoreRuleScoreInfoMapper { ...@@ -15,6 +15,7 @@ public interface CmptScoreRuleScoreInfoMapper {
* @param cmptScoreRuleScoreInfo * @param cmptScoreRuleScoreInfo
*/ */
void saveScoreRuleScoreInfo(@Param("cmptScoreRuleScoreInfo") CmptScoreRuleScoreInfo cmptScoreRuleScoreInfo); void saveScoreRuleScoreInfo(@Param("cmptScoreRuleScoreInfo") CmptScoreRuleScoreInfo cmptScoreRuleScoreInfo);
void insertScoreBatch(@Param("list") List<CmptScoreRuleScoreInfo> list);
/** /**
* 根据号码牌获取用户的成绩 * 根据号码牌获取用户的成绩
...@@ -42,7 +43,7 @@ public interface CmptScoreRuleScoreInfoMapper { ...@@ -42,7 +43,7 @@ public interface CmptScoreRuleScoreInfoMapper {
* @param checkStatus * @param checkStatus
* @return * @return
*/ */
Integer getCmptScoreRuleScoreInfoToalNumer(@Param("cmptId") int cmptId, @Param("roadId") int roadId, @Param("ruleId") int ruleId,@Param("checkStatus") int checkStatus); Integer getCmptScoreRuleScoreInfoToalNumer(@Param("cmptId") int cmptId, @Param("roadId") int roadId, @Param("pathId") int pathId, @Param("ruleId") int ruleId,@Param("checkStatus") int checkStatus);
/** /**
* 分页获取用户提交的成绩 * 分页获取用户提交的成绩
...@@ -53,7 +54,7 @@ public interface CmptScoreRuleScoreInfoMapper { ...@@ -53,7 +54,7 @@ public interface CmptScoreRuleScoreInfoMapper {
* @param checkStatus * @param checkStatus
* @return * @return
*/ */
List<CmptScoreRuleScoreInfo> getCmptScoreRuleScoreInfoList(Pageable page, int cmptId, int roadId, int ruleId, int checkStatus); List<CmptScoreRuleScoreInfo> getCmptScoreRuleScoreInfoList(Pageable page, int cmptId, int roadId, int pathId, int ruleId, int checkStatus);
/** /**
* 批量审核,审核成绩结果为未通过 * 批量审核,审核成绩结果为未通过
...@@ -90,7 +91,7 @@ public interface CmptScoreRuleScoreInfoMapper { ...@@ -90,7 +91,7 @@ public interface CmptScoreRuleScoreInfoMapper {
* @param ruleId * @param ruleId
* @return * @return
*/ */
HashMap<String,Object> getCmptScoreRuleScoreInfoStatistics(@Param("cmptId") int cmptId,@Param("roadId") int roadId,@Param("ruleId") int ruleId); HashMap<String, Object> getCmptScoreRuleScoreInfoStatistics(@Param("cmptId") int cmptId, @Param("roadId") int roadId, @Param("ruleId") int ruleId, @Param("pathId") int pathId);
/** /**
* 根据markNo,ruleId获取CmptScoreRuleScoreInfo * 根据markNo,ruleId获取CmptScoreRuleScoreInfo
......
...@@ -6,6 +6,17 @@ ...@@ -6,6 +6,17 @@
INSERT INTO gk_cmpt_score_rule_scoreinfo(cmptId,rule_id,mark_no,subsectionTime,subsectionscore,subsectionMileage,cmptPace,checkStatus,isDelete,insertTime,updateTime) INSERT INTO gk_cmpt_score_rule_scoreinfo(cmptId,rule_id,mark_no,subsectionTime,subsectionscore,subsectionMileage,cmptPace,checkStatus,isDelete,insertTime,updateTime)
VALUES(#{cmptScoreRuleScoreInfo.cmptId},#{cmptScoreRuleScoreInfo.ruleId},#{cmptScoreRuleScoreInfo.markNo},#{cmptScoreRuleScoreInfo.subsectionTime},#{cmptScoreRuleScoreInfo.subsectionscore},#{cmptScoreRuleScoreInfo.subsectionMileage},#{cmptScoreRuleScoreInfo.cmptPace},#{cmptScoreRuleScoreInfo.checkStatus},0,now(),now()) VALUES(#{cmptScoreRuleScoreInfo.cmptId},#{cmptScoreRuleScoreInfo.ruleId},#{cmptScoreRuleScoreInfo.markNo},#{cmptScoreRuleScoreInfo.subsectionTime},#{cmptScoreRuleScoreInfo.subsectionscore},#{cmptScoreRuleScoreInfo.subsectionMileage},#{cmptScoreRuleScoreInfo.cmptPace},#{cmptScoreRuleScoreInfo.checkStatus},0,now(),now())
</insert> </insert>
<insert id="insertScoreBatch" parameterType="java.util.List">
insert into gk_cmpt_score_rule_scoreinfo (
cmptId,rule_id,mark_no,subsectionTime,subsectionscore,subsectionMileage,cmptPace,checkStatus,isDelete,insertTime,updateTime,score_way,is_end,road_id,path_id
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.cmptId},#{item.ruleId},#{item.markNo},#{item.subsectionTime},#{item.subsectionscore},#{item.subsectionMileage},#{item.cmptPace},#{item.checkStatus},0,now(),now(),1,1,#{item.roadId},#{item.pathId}
)
</foreach>
</insert>
<select id="getScoreRuleScoreInfoByMarkNo" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo"> <select id="getScoreRuleScoreInfoByMarkNo" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo">
select id,cmptId,rule_id as ruleId,mark_no as markNo,subsectionTime,subsectionscore,subsectionMileage,cmptPace from gk_cmpt_score_rule_scoreinfo where cmptId=#{cmptId} and mark_no=#{markNo} and checkStatus=1 and isDelete=0 select id,cmptId,rule_id as ruleId,mark_no as markNo,subsectionTime,subsectionscore,subsectionMileage,cmptPace from gk_cmpt_score_rule_scoreinfo where cmptId=#{cmptId} and mark_no=#{markNo} and checkStatus=1 and isDelete=0
</select> </select>
...@@ -14,7 +25,18 @@ ...@@ -14,7 +25,18 @@
and mark_no=#{markNo} and isDelete=0 limit 1 and mark_no=#{markNo} and isDelete=0 limit 1
</select> </select>
<select id="getCmptScoreRuleScoreInfoToalNumer" resultType="int"> <select id="getCmptScoreRuleScoreInfoToalNumer" resultType="int">
select count(1) from geerunner.cmpt_enroll as a left join gk_cmpt_score_rule_scoreinfo as b on a.cmpt_id=b.cmptId and a.nick_id=b.mark_no where a.cmpt_id=#{cmptId} and a.cmpt_item=#{roadId} and rule_id=#{ruleId} and checkStatus=#{checkStatus} and a.del_flg=0 and b.isDelete=0 select count(1)
from geerunner.cmpt_enroll as a
left join gk_cmpt_score_rule_scoreinfo as b on a.cmpt_id = b.cmptId and a.nick_id = b.mark_no
where a.cmpt_id = #{cmptId}
and a.cmpt_item = #{roadId}
and rule_id = #{ruleId}
and checkStatus = #{checkStatus}
<if test="pathId > 0">
and b.path_id = #{pathId}
</if>
and a.del_flg = 0
and b.isDelete = 0
</select> </select>
<select id="getCmptScoreRuleScoreInfoList" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo"> <select id="getCmptScoreRuleScoreInfoList" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo">
select b.id as cmptScoreRuleScoreId,a.member_name select b.id as cmptScoreRuleScoreId,a.member_name
...@@ -25,6 +47,9 @@ ...@@ -25,6 +47,9 @@
as b on a.cmpt_id=b.cmptId and a.nick_id=b.mark_no as b on a.cmpt_id=b.cmptId and a.nick_id=b.mark_no
where a.cmpt_id=#{cmptId} and a.cmpt_item=#{roadId} and rule_id=#{ruleId} where a.cmpt_id=#{cmptId} and a.cmpt_item=#{roadId} and rule_id=#{ruleId}
and checkStatus=#{checkStatus} and a.del_flg=0 and b.isDelete=0 and checkStatus=#{checkStatus} and a.del_flg=0 and b.isDelete=0
<if test="pathId > 0">
and b.path_id = #{pathId}
</if>
order by updateTime desc limit #{page.offset},#{page.size} order by updateTime desc limit #{page.offset},#{page.size}
</select> </select>
...@@ -61,8 +86,13 @@ ...@@ -61,8 +86,13 @@
count(case when checkStatus=2 then 1 end) as 'nopass' count(case when checkStatus=2 then 1 end) as 'nopass'
from geerunner.cmpt_enroll as a from geerunner.cmpt_enroll as a
left join gk_cmpt_score_rule_scoreinfo as b on a.cmpt_id=b.cmptId and a.nick_id=b.mark_no left join gk_cmpt_score_rule_scoreinfo as b on a.cmpt_id=b.cmptId and a.nick_id=b.mark_no
where a.cmpt_id=#{cmptId} and a.cmpt_item=#{roadId} and rule_id=#{ruleId} and a.del_flg=0 and b.isDelete=0 where 1=1
</select> and a.del_flg=0 and b.isDelete=0
and a.cmpt_id=#{cmptId} and a.cmpt_item=#{roadId} and rule_id=#{ruleId}
<if test="pathId > 0">
and a.path_id = #{pathId}
</if>
</select>
<select id="getCmptScoreRuleScoreInfoByruleIdAndMarkNo" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo"> <select id="getCmptScoreRuleScoreInfoByruleIdAndMarkNo" resultType="com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo">
select id as cmptScoreRuleScoreId,cmptId,rule_id as ruleId,mark_no as markNo,subsectionTime,subsectionscore,subsectionMileage from gk_cmpt_score_rule_scoreinfo where cmptId=#{cmptId} and rule_id=#{ruleId} and mark_no=#{markNo} and isDelete=0 select id as cmptScoreRuleScoreId,cmptId,rule_id as ruleId,mark_no as markNo,subsectionTime,subsectionscore,subsectionMileage from gk_cmpt_score_rule_scoreinfo where cmptId=#{cmptId} and rule_id=#{ruleId} and mark_no=#{markNo} and isDelete=0
......
package com.dlbridge.jadp.plugins.cmpt.dao.mapper; package com.dlbridge.jadp.plugins.cmpt.dao.mapper;
import com.dlbridge.jadp.plugins.cmpt.bean.Equipment; import com.dlbridge.jadp.plugins.cmpt.bean.Equipment;
import com.dlbridge.jadp.plugins.cmpt.bean.Path;
import com.dlbridge.jadp.plugins.cmpt.bean.Road; import com.dlbridge.jadp.plugins.cmpt.bean.Road;
import com.dlbridge.jadp.plugins.cmpt.bean.RoadGpsPoint; import com.dlbridge.jadp.plugins.cmpt.bean.RoadGpsPoint;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -17,6 +18,8 @@ public interface RoadMapper { ...@@ -17,6 +18,8 @@ public interface RoadMapper {
int delete(Integer roadId); int delete(Integer roadId);
List<Road> queryRoads(Integer cmptId); List<Road> queryRoads(Integer cmptId);
List<Road> queryRoadsMultiPath(Integer cmptId);
List<Path> queryPaths(Integer cmptId, Integer roadId);
int saveGps(RoadGpsPoint point); int saveGps(RoadGpsPoint point);
......
...@@ -2,7 +2,38 @@ ...@@ -2,7 +2,38 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dlbridge.jadp.plugins.cmpt.dao.mapper.RoadMapper"> <mapper namespace="com.dlbridge.jadp.plugins.cmpt.dao.mapper.RoadMapper">
<select id="queryPaths" resultType="com.dlbridge.jadp.plugins.cmpt.bean.Path">
select a.road_id roadId
, a.cmpt_id cmptId
, a.file_name fileName
, a.file_url fileUrl
, a.file_size fileSize
, a.id pathId
, a.path_name pathName
, a.create_time createTime
from gk_roads_gps a
WHERE 1=1
AND a.cmpt_id = #{cmptId}
AND a.road_id = #{roadId}
</select>
<select id="queryRoads" resultType="com.dlbridge.jadp.plugins.cmpt.bean.Road"> <select id="queryRoads" resultType="com.dlbridge.jadp.plugins.cmpt.bean.Road">
select a.road_id roadId
, a.cmpt_id cmptId
, a.road_name name
, a.file_name fileName
, a.file_url fileUrl
, a.times
, a.file_size fileSize
, b.item_type roadType
, case when b.item_type = 2 then '团队赛' when b.item_type = 1 then '个人赛' else '其他' end roadTypeName
from gk_road a
LEFT JOIN geerunner.cmpt_item b ON a.cmpt_id = b.cmpt_id AND a.road_id = b.item_id
WHERE a.cmpt_id = #{cmptId}
AND a.is_delete = 0
</select>
<select id="queryRoadsMultiPath" resultType="com.dlbridge.jadp.plugins.cmpt.bean.Road">
select a.road_id roadId select a.road_id roadId
, a.cmpt_id cmptId , a.cmpt_id cmptId
, a.road_name name , a.road_name name
......
...@@ -6,6 +6,8 @@ import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptScoreRuleScoreInfoMapper; ...@@ -6,6 +6,8 @@ import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptScoreRuleScoreInfoMapper;
import com.dlbridge.jadp.plugins.cmpt.utils.Page; import com.dlbridge.jadp.plugins.cmpt.utils.Page;
import com.dlbridge.jadp.plugins.cmpt.utils.PageFactory; import com.dlbridge.jadp.plugins.cmpt.utils.PageFactory;
import com.dlbridge.jadp.plugins.cmpt.utils.date.DateUtil; import com.dlbridge.jadp.plugins.cmpt.utils.date.DateUtil;
import com.neusoft.www.utils.web.Result;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -115,9 +117,9 @@ public class CmptScoreRuleScoreInfoService { ...@@ -115,9 +117,9 @@ public class CmptScoreRuleScoreInfoService {
* @return * @return
* size=10&page=0&cmptId=11888&checkstatus=0&roadId=21296&ruleId=79 * size=10&page=0&cmptId=11888&checkstatus=0&roadId=21296&ruleId=79
*/ */
public Page<List<CmptScoreRuleScoreInfo>> getCmptScoreRuleScoreInfo(Pageable page, int cmptId, int roadId, int ruleId,int checkstatus){ public Page<List<CmptScoreRuleScoreInfo>> getCmptScoreRuleScoreInfo(Pageable page, int cmptId, int roadId, int pathId, int ruleId,int checkstatus){
long count = cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoToalNumer(cmptId,roadId,ruleId,checkstatus); long count = cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoToalNumer(cmptId,roadId,pathId,ruleId,checkstatus);
List<CmptScoreRuleScoreInfo> list = cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoList(page,cmptId,roadId,ruleId,checkstatus); List<CmptScoreRuleScoreInfo> list = cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoList(page,cmptId,roadId, pathId,ruleId,checkstatus);
List<CmptScoreFieldValue> cmptScoreFieldValueList=cmptScoreFieldValueService.getCmptScoreFieldValueByCmptIdAndRuleId(cmptId,ruleId); List<CmptScoreFieldValue> cmptScoreFieldValueList=cmptScoreFieldValueService.getCmptScoreFieldValueByCmptIdAndRuleId(cmptId,ruleId);
for(CmptScoreRuleScoreInfo cmptScoreRuleScoreInfo:list){ for(CmptScoreRuleScoreInfo cmptScoreRuleScoreInfo:list){
List<String> filterResutList=cmptScoreFieldValueList.parallelStream().filter(s->s.getMarkNo()!=null&&s.getMarkNo().equals(cmptScoreRuleScoreInfo.getMarkNo())).map(CmptScoreFieldValue::getScoreFieldValue).collect(Collectors.toList()); List<String> filterResutList=cmptScoreFieldValueList.parallelStream().filter(s->s.getMarkNo()!=null&&s.getMarkNo().equals(cmptScoreRuleScoreInfo.getMarkNo())).map(CmptScoreFieldValue::getScoreFieldValue).collect(Collectors.toList());
...@@ -159,8 +161,8 @@ public class CmptScoreRuleScoreInfoService { ...@@ -159,8 +161,8 @@ public class CmptScoreRuleScoreInfoService {
* @param ruleId * @param ruleId
* @return * @return
*/ */
public HashMap<String,Object> getCmptScoreRuleScoreInfoStatistics(int cmptId,int roadId,int ruleId){ public HashMap<String,Object> getCmptScoreRuleScoreInfoStatistics(int cmptId,int roadId,int ruleId,int pathId){
HashMap<String,Object> cmptScoreRuleScoreInfoStatistics=cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoStatistics(cmptId,roadId,ruleId); HashMap<String,Object> cmptScoreRuleScoreInfoStatistics=cmptScoreRuleScoreInfoMapper.getCmptScoreRuleScoreInfoStatistics(cmptId,roadId,ruleId,pathId);
return cmptScoreRuleScoreInfoStatistics; return cmptScoreRuleScoreInfoStatistics;
} }
...@@ -209,4 +211,5 @@ public class CmptScoreRuleScoreInfoService { ...@@ -209,4 +211,5 @@ public class CmptScoreRuleScoreInfoService {
public List<CmptScoreRuleScoreInfo> getScoreInfosBycmptIdAndMarkNoEnd(int cmptId, String markNo) { public List<CmptScoreRuleScoreInfo> getScoreInfosBycmptIdAndMarkNoEnd(int cmptId, String markNo) {
return cmptScoreRuleScoreInfoMapper.getScoreInfosBycmptIdAndMarkNoEnd(cmptId,markNo); return cmptScoreRuleScoreInfoMapper.getScoreInfosBycmptIdAndMarkNoEnd(cmptId,markNo);
} }
} }
package com.dlbridge.jadp.plugins.cmpt.service; package com.dlbridge.jadp.plugins.cmpt.service;
import com.dlbridge.jadp.common.utils.excel.ImportExcel;
import com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRule; import com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRule;
import com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRuleScoreInfo;
import com.dlbridge.jadp.plugins.cmpt.bean.ScoreRuleMap; import com.dlbridge.jadp.plugins.cmpt.bean.ScoreRuleMap;
import com.dlbridge.jadp.plugins.cmpt.bean.UserScoreExcelBean; import com.dlbridge.jadp.plugins.cmpt.bean.UserScoreExcelBean;
import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptScoreRuleMapper; import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptScoreRuleMapper;
import com.dlbridge.jadp.plugins.cmpt.dao.mapper.CmptScoreRuleScoreInfoMapper;
import com.neusoft.www.utils.web.Result;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@Log4j2
@Service @Service
@Transactional @Transactional
public class CmptScoreRuleService { public class CmptScoreRuleService {
@Resource @Resource
CmptScoreRuleMapper cmptScoreRuleMapper; CmptScoreRuleMapper cmptScoreRuleMapper;
@Resource
CmptScoreRuleScoreInfoMapper cmptScoreRuleScoreInfoMapper;
/** /**
* 根据赛事成绩规则Id,判断是更新成绩规则还是插入成绩规则 * 根据赛事成绩规则Id,判断是更新成绩规则还是插入成绩规则
* @param cmptScoreRules * @param cmptScoreRules
...@@ -106,4 +125,125 @@ public class CmptScoreRuleService { ...@@ -106,4 +125,125 @@ public class CmptScoreRuleService {
public void updateDisplayCount(Integer cmptId, Integer displayCount) { public void updateDisplayCount(Integer cmptId, Integer displayCount) {
cmptScoreRuleMapper.updateDisplayCount(cmptId,displayCount); cmptScoreRuleMapper.updateDisplayCount(cmptId,displayCount);
} }
public Result importScoreExcel(XSSFWorkbook wb, int cmptId, int roadId, int pathId){
try {
XSSFSheet sheet = wb.getSheetAt(0);
List<CmptScoreRuleScoreInfo> scoreList = new ArrayList<>();
// 循环Excel数据
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
CmptScoreRuleScoreInfo ruleScoreInfo = new CmptScoreRuleScoreInfo();
XSSFRow row = sheet.getRow(rowNum);
int lastcolNum = row.getLastCellNum();
if(null == row){
continue;
}
// 号码牌列取值
String markNo = ImportExcel.getCellValue(row,0);
if (StringUtils.isBlank(markNo)){
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("号码牌不能为空!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
ruleScoreInfo.setMarkNo(markNo);
// 成绩列取值
String subsectionscore = ImportExcel.getCellValue(row,1);
if (StringUtils.isBlank(subsectionscore)){
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("成绩不能为空!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
int score = 0;
try {
score = Integer.parseInt(subsectionscore);
ruleScoreInfo.setSubsectionscore(score);
} catch (NumberFormatException e) {
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("成绩单元格不是数字!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
// 里程列取值
String subsectionMileage = ImportExcel.getCellValue(row,2);
if (StringUtils.isBlank(subsectionMileage)){
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("里程不能为空!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
int mileage = 0;
try {
mileage = Integer.parseInt(subsectionMileage);
ruleScoreInfo.setSubsectionMileage(mileage);
} catch (NumberFormatException e) {
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("里程单元格不是数字!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
// 成绩提交时间列取值
String subsectionTime = ImportExcel.getCellValue(row,3);
if (StringUtils.isBlank(subsectionTime)){
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("成绩提交时间不能为空!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.parse(subsectionTime);
ruleScoreInfo.setSubsectionTime(subsectionTime);
} catch (ParseException e) {
XSSFCell cell = row.createCell(lastcolNum);
cell.setCellValue("成绩提交时间格式不正确!");
ImportExcel.setCellStyle(wb, cell);
return Result.fail();
}
// 配速计算
float cmptPace = paceCalculator(score,mileage);
ruleScoreInfo.setCmptPace(cmptPace);
// 其他参数设置
ruleScoreInfo.setCmptId(cmptId);
ruleScoreInfo.setRoadId(roadId);
ruleScoreInfo.setPathId(pathId);
scoreList.add(ruleScoreInfo);
}
if(!scoreList.isEmpty()){
cmptScoreRuleScoreInfoMapper.insertScoreBatch(scoreList);
}
} catch (NumberFormatException e) {
log.info("===== 导入成绩Excel异常:{}",e.getMessage());
return Result.fail();
}
return Result.success();
}
/**
* 根据duration和mileage计算配速
* mileage为里程,单位是米
* duration为耗时,单位为秒
* @param duration
* @param mileage
* @return
*/
public static float paceCalculator(int duration,int mileage){
if(mileage == 0){
return 0;
}
DecimalFormat decimalFormat=new DecimalFormat(".000000");
float cmptPace = Float.parseFloat(decimalFormat.format(duration / (mileage/1000.0)));;
return cmptPace;
}
} }
package com.dlbridge.jadp.plugins.cmpt.service; package com.dlbridge.jadp.plugins.cmpt.service;
import com.dlbridge.jadp.plugins.cmpt.bean.Path;
import com.dlbridge.jadp.plugins.cmpt.bean.Road; import com.dlbridge.jadp.plugins.cmpt.bean.Road;
import com.dlbridge.jadp.plugins.cmpt.bean.RoadGpsPoint; import com.dlbridge.jadp.plugins.cmpt.bean.RoadGpsPoint;
import com.dlbridge.jadp.plugins.cmpt.dao.mapper.RoadMapper; import com.dlbridge.jadp.plugins.cmpt.dao.mapper.RoadMapper;
...@@ -42,8 +43,17 @@ public class RoadService { ...@@ -42,8 +43,17 @@ public class RoadService {
return roadMapper.delete(id); return roadMapper.delete(id);
} }
/**
* 根据赛事、组别 获取路线列表
* @param cmptId 赛事ID
* @param roadId 路线ID
* @return 路线列表
*/
public List<Path> queryPaths(Integer cmptId, Integer roadId){
return roadMapper.queryPaths(cmptId, roadId);
}
public List<Road> queryRoads(Integer cmptId) { public List<Road> queryRoads(Integer cmptId) {
log.info("RoadService enter"); log.info("=====queryRoads -> RoadService enter");
List<Road> roads = remoteService.getRoads(cmptId); List<Road> roads = remoteService.getRoads(cmptId);
if(roads == null) { if(roads == null) {
return null; return null;
...@@ -80,6 +90,49 @@ public class RoadService { ...@@ -80,6 +90,49 @@ public class RoadService {
return roadMapper.queryRoads(cmptId); return roadMapper.queryRoads(cmptId);
} }
/**
* 获取组别(多路线支持)
* @param cmptId
* @return
*/
public List<Road> queryRoadsMultiPath(Integer cmptId) {
log.info("===== queryRoadsMultiPath -> RoadService enter");
List<Road> roads = remoteService.getRoads(cmptId);
if(roads == null) {
return null;
}
for (Road road : roads) {
log.info("RoadService api接口 getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName() + " getFileUrl:" + road.getFileUrl());
}
List<Road> localRoads = roadMapper.queryRoadsMultiPath(cmptId);
for (Road road : localRoads) {
log.info("RoadService 数据库接口 getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName() + " getFileUrl:" + road.getFileUrl());
}
for (Road road : roads) { // 更新 插入操作
if (localRoads.contains(road)) {
Road rd = localRoads.get(localRoads.indexOf(road));
if (!rd.getName().equals(road.getName())) {
rd.setName(road.getName());
roadMapper.update(road);
}
log.info("RoadService contains getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName());
} else {
roadMapper.save(road);
log.info("RoadService not contains getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName());
}
}
for (Road road : localRoads) { // 删除操作
if (!roads.contains(road)) {
roadMapper.delete(road.getRoadId());
}
}
for (Road road : localRoads) {
log.info("RoadService 接口和api更新后数据 getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName() + " getFileUrl:" + road.getFileUrl());
}
return roadMapper.queryRoadsMultiPath(cmptId);
}
/** /**
* 将gps文件转化为json文件 * 将gps文件转化为json文件
* @param url * @param url
......
package com.dlbridge.jadp.plugins.cmpt.utils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.lang.ref.SoftReference;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class StaticFieldHolder {
/**导入成绩数据标示*/
public static final String IMPORT_SCORE_DATA = "importScoreData";
public static Map<String, SoftReference<XSSFWorkbook>> resultFile = new ConcurrentHashMap<>();
}
...@@ -38,8 +38,8 @@ public class CmptScoreRuleScoreInfoController { ...@@ -38,8 +38,8 @@ public class CmptScoreRuleScoreInfoController {
*/ */
@RequestMapping("getCmptScoreRuleScoreInfo") @RequestMapping("getCmptScoreRuleScoreInfo")
@ResponseBody @ResponseBody
public Page<List<CmptScoreRuleScoreInfo>> getCmptScoreRuleScoreInfo(Pageable page, int cmptId, int roadId,int ruleId,int checkstatus) { public Page<List<CmptScoreRuleScoreInfo>> getCmptScoreRuleScoreInfo(Pageable page, int cmptId, int roadId, int pathId, int ruleId,int checkstatus) {
Page<List<CmptScoreRuleScoreInfo>> result = cmptScoreRuleScoreInfoService.getCmptScoreRuleScoreInfo(page,cmptId,roadId,ruleId,checkstatus); Page<List<CmptScoreRuleScoreInfo>> result = cmptScoreRuleScoreInfoService.getCmptScoreRuleScoreInfo(page,cmptId,roadId,pathId,ruleId,checkstatus);
result.setCode(200); result.setCode(200);
return result; return result;
} }
...@@ -56,7 +56,7 @@ public class CmptScoreRuleScoreInfoController { ...@@ -56,7 +56,7 @@ public class CmptScoreRuleScoreInfoController {
public Result uploadCmptScoreRuleScoreInfo(int cmptId, int roadId, int ruleId, int[] noPassedIds, int[] passedIds){ public Result uploadCmptScoreRuleScoreInfo(int cmptId, int roadId, int ruleId, int[] noPassedIds, int[] passedIds){
boolean isOk= cmptScoreRuleScoreInfoService.uploadCmptScoreRuleScoreInfo(cmptId,roadId,ruleId,noPassedIds,passedIds); boolean isOk= cmptScoreRuleScoreInfoService.uploadCmptScoreRuleScoreInfo(cmptId,roadId,ruleId,noPassedIds,passedIds);
log.info("审核成绩"+isOk); log.info("审核成绩"+isOk);
return new Result().success(); return Result.success();
} }
/** /**
...@@ -68,9 +68,9 @@ public class CmptScoreRuleScoreInfoController { ...@@ -68,9 +68,9 @@ public class CmptScoreRuleScoreInfoController {
*/ */
@RequestMapping("getCmptScoreRuleScoreInfoStatistics") @RequestMapping("getCmptScoreRuleScoreInfoStatistics")
@ResponseBody @ResponseBody
public Result getCmptScoreRuleScoreInfoStatistics(int cmptId,int roadId,int ruleId){ public Result getCmptScoreRuleScoreInfoStatistics(int cmptId,int roadId,int ruleId,int pathId){
HashMap<String,Object> resultList=cmptScoreRuleScoreInfoService.getCmptScoreRuleScoreInfoStatistics(cmptId,roadId,ruleId); HashMap<String,Object> resultList=cmptScoreRuleScoreInfoService.getCmptScoreRuleScoreInfoStatistics(cmptId,roadId,ruleId,pathId);
return new Result().success().setContent(resultList); return Result.success().setContent(resultList);
} }
......
...@@ -50,7 +50,7 @@ public class RoadController { ...@@ -50,7 +50,7 @@ public class RoadController {
public ModelAndView index(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) { public ModelAndView index(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) {
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptId); Cmpt cmpt = cmptService.queryCmptBycmptId(cmptId);
mv.addObject("cmpt", cmpt); mv.addObject("cmpt", cmpt);
List<Road> list = roadService.queryRoads(cmptId); List<Road> list = roadService.queryRoadsMultiPath(cmptId);
if(list != null){ if(list != null){
for (Road road : list) { for (Road road : list) {
log.info("RoadController getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName()); log.info("RoadController getName:" + road.getName() + " getRoadId:" + road.getRoadId() + " getFileName:" + road.getFileName());
......
...@@ -66,11 +66,11 @@ public class RoadsGpsCheckpointController { ...@@ -66,11 +66,11 @@ public class RoadsGpsCheckpointController {
* @param roadId * @param roadId
* @return * @return
*/ */
@RequestMapping("getGpsCheckPointByRoadId/{cmptId}/{roadId}") @RequestMapping("getGpsCheckPointByRoadId/{cmptId}/{roadId}/{pathId}")
@ResponseBody @ResponseBody
public Result getGpsCheckPointByRoadId(@PathVariable("cmptId") Integer cmptId, public Result getGpsCheckPointByRoadId(@PathVariable("cmptId") Integer cmptId,
@PathVariable("roadId") Integer roadId, @PathVariable("roadId") Integer roadId,
@RequestParam(name = "pathId", required = false, defaultValue = "-1") int pathId) { @PathVariable("pathId") Integer pathId) {
RoadGpsPoint roadGpsPoint = roadService.getGps(roadId, pathId); RoadGpsPoint roadGpsPoint = roadService.getGps(roadId, pathId);
if(roadGpsPoint == null) {return Result.fail().setMsg("未设置轨迹");} if(roadGpsPoint == null) {return Result.fail().setMsg("未设置轨迹");}
String points = roadGpsPoint.getPoints(); String points = roadGpsPoint.getPoints();
......
...@@ -57,19 +57,18 @@ public class ScanController { ...@@ -57,19 +57,18 @@ public class ScanController {
@PageView @PageView
public ModelAndView index(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) { public ModelAndView index(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) {
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptId); Cmpt cmpt = cmptService.queryCmptBycmptId(cmptId);
List<Road> roads = remoteService.getRoads(cmptId); // List<Road> roads = remoteService.getRoads(cmptId);
mv.setViewName("cmpt/scan"); mv.setViewName("cmpt/scan");
mv.addObject("cmpt", cmpt); mv.addObject("cmpt", cmpt);
mv.addObject("roads", roads);
//int count = geexekScoreService.hasCheckPoint(cmptId); // Linc 多路线情况修正 2023/01/29
// TODO Linc 多路线情况
List<Map> map = geexekScoreService.getRoadCheckPointMap(cmptId); List<Map> map = geexekScoreService.getRoadCheckPointMap(cmptId);
mv.addObject("hasCps", map.size() > 0); mv.addObject("hasCps", map.size() > 0);
mv.addObject("roads", map);
log.info("=====gk/scan/index/,roads:{}",map);
Map<Integer,Integer> result = new HashMap<>(); Map<Integer,Integer> result = new HashMap<>();
for(Map m : map){ for(Map m : map){
result.put(Integer.valueOf(m.get("road_id")+""),Integer.valueOf(m.get("number")+"")); result.put(Integer.valueOf(m.get("pathId")+""),Integer.valueOf(m.get("number")+""));
} }
mv.addObject("cpMap", result); mv.addObject("cpMap", result);
return mv; return mv;
...@@ -90,10 +89,10 @@ public class ScanController { ...@@ -90,10 +89,10 @@ public class ScanController {
* @throws IOException * @throws IOException
* @throws Exception * @throws Exception
*/ */
@GetMapping("downLoadAllQRByRoadId/{cmptId}/{roadId}") @GetMapping("downLoadAllQRByRoadId/{cmptId}/{roadId}/{pathId}")
public void downLoadAllQRByRoadId(@PathVariable("cmptId") int cmptId, public void downLoadAllQRByRoadId(@PathVariable("cmptId") int cmptId,
@PathVariable("roadId") int roadId, @PathVariable("roadId") int roadId,
@RequestParam(name = "pathId", required = false, defaultValue = "-1") int pathId, @PathVariable("pathId") int pathId,
HttpServletResponse httpServletResponse) { HttpServletResponse httpServletResponse) {
//获取项目的名字 //获取项目的名字
HashMap<String, Object> roadinfo = remoteService.getRoadinfoByroadId(cmptId, roadId); HashMap<String, Object> roadinfo = remoteService.getRoadinfoByroadId(cmptId, roadId);
......
...@@ -3,22 +3,35 @@ package com.dlbridge.jadp.plugins.cmpt.web; ...@@ -3,22 +3,35 @@ package com.dlbridge.jadp.plugins.cmpt.web;
import com.dlbridge.jadp.common.interceptor.PageView; import com.dlbridge.jadp.common.interceptor.PageView;
import com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRule; import com.dlbridge.jadp.plugins.cmpt.bean.CmptScoreRule;
import com.dlbridge.jadp.plugins.cmpt.bean.FuncSetting; import com.dlbridge.jadp.plugins.cmpt.bean.FuncSetting;
import com.dlbridge.jadp.plugins.cmpt.bean.Path;
import com.dlbridge.jadp.plugins.cmpt.bean.Road; import com.dlbridge.jadp.plugins.cmpt.bean.Road;
import com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt; import com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt;
import com.dlbridge.jadp.plugins.cmpt.service.CmptScoreRuleService; import com.dlbridge.jadp.plugins.cmpt.service.CmptScoreRuleService;
import com.dlbridge.jadp.plugins.cmpt.service.CmptService; import com.dlbridge.jadp.plugins.cmpt.service.CmptService;
import com.dlbridge.jadp.plugins.cmpt.service.FuncSettingService; import com.dlbridge.jadp.plugins.cmpt.service.FuncSettingService;
import com.dlbridge.jadp.plugins.cmpt.service.RoadService; import com.dlbridge.jadp.plugins.cmpt.service.RoadService;
import com.dlbridge.jadp.plugins.cmpt.utils.StaticFieldHolder;
import com.neusoft.www.utils.web.Result; import com.neusoft.www.utils.web.Result;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -60,6 +73,21 @@ public class ScoreReviewController { ...@@ -60,6 +73,21 @@ public class ScoreReviewController {
return Result.success().setContent(list); return Result.success().setContent(list);
} }
@RequestMapping("paths/{cmptId}/{roadId}")
@ResponseBody
public Result paths(@PathVariable("cmptId") Integer cmptId,@PathVariable("roadId") Integer roadId, ModelAndView mv) {
List<Path> list = roadService.queryPaths(cmptId, roadId);
List<Path> pathList = new ArrayList<>();
Path pa = new Path();
pa.setPathId(-1);
pa.setPathName("全部");
pathList.add(pa);
for(Path p : list){
pathList.add(p);
}
return Result.success().setContent(pathList);
}
@RequestMapping("rules/{cmptId}") @RequestMapping("rules/{cmptId}")
@ResponseBody @ResponseBody
public Result rules(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) { public Result rules(@PathVariable("cmptId") Integer cmptId, ModelAndView mv) {
...@@ -67,6 +95,60 @@ public class ScoreReviewController { ...@@ -67,6 +95,60 @@ public class ScoreReviewController {
return Result.success().setContent(cmptScoreRules); return Result.success().setContent(cmptScoreRules);
} }
@RequestMapping("importScore")
@ResponseBody
public Result importScoreExcel(@RequestParam("file") MultipartFile file,
@RequestParam(name = "mark", required = true) String mark,
@RequestParam(name = "cmptId", required = true) Integer cmptId,
@RequestParam(name = "roadId", required = true) Integer roadId,
@RequestParam(name = "pathId", required = false, defaultValue = "-1") Integer pathId,
HttpServletRequest req, HttpServletResponse response) throws IOException {
if (file == null) {
return null;
}
log.info(file.getOriginalFilename());
String name = file.getOriginalFilename();// 获取上传文件名,包括路径
long size = file.getSize();
if ((name == null || name.equals("")) && size == 0) {
return null;
}
InputStream in = file.getInputStream();
try {
XSSFWorkbook workbook = new XSSFWorkbook(in);
Result result = cmptScoreRuleService.importScoreExcel(workbook, cmptId, roadId, pathId);
if (!result.status) {
SoftReference<XSSFWorkbook> sr = new SoftReference(workbook);
StaticFieldHolder.resultFile.put(StaticFieldHolder.IMPORT_SCORE_DATA + mark, sr);
return Result.fail().setMsg("导入成绩失败,详情请下载错误文件!");
}
return result;
} catch (Exception e) {
return Result.fail().setMsg("导入成绩Excel异常!");
}
}
@RequestMapping("downloadImportResultExcel")
public Result downloadImportResultExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
String mark = request.getParameter("mark");
String operation = request.getParameter("operation");
try (OutputStream outputStream = response.getOutputStream();) {
String resultFileKey = operation + mark;
SoftReference<XSSFWorkbook> softReference = StaticFieldHolder.resultFile.get(resultFileKey);
XSSFWorkbook workbook = softReference.get();
String exportFileName = operation + mark + ".xlsx";
response.setContentType("text/html;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + exportFileName);
workbook.write(outputStream);
// remove the result file
StaticFieldHolder.resultFile.remove(resultFileKey);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return null;
}
} }
...@@ -125,10 +125,11 @@ ...@@ -125,10 +125,11 @@
<div class="data"> <div class="data">
<label for="">项目</label> <label for="">项目</label>
<c:forEach var="item" items="${roads}" varStatus="idx"> <c:forEach var="item" items="${roads}" varStatus="idx">
<div class="road-name ${idx.index==0?'active':''}" road-id="${item.roadId}"> <div class="road-name ${idx.index==0?'active':''}" path-id="${item.pathId}" road-id="${item.roadId}">
<input type="hidden" id="roadId" name="roadId" value="${item.roadId}"> <input type="hidden" id="roadId" name="roadId" value="${item.roadId}">
<span class="road-text">${item.name}</span> <input type="hidden" id="pathId" name="pathId" value="${item.pathId}">
<span class="down QRCodeDown" style="${cpMap.get(item.roadId) > 0 ? '':'color: #999'}" data-hasCp="${cpMap.get(item.roadId) > 0}">下载全部二维码</span> <span class="road-text">${item.pathName}</span>
<span class="down QRCodeDown" style="${cpMap.get(item.pathId) > 0 ? '':'color: #999'}" data-hasCp="${cpMap.get(item.pathId) > 0}">下载全部二维码</span>
</div> </div>
</c:forEach> </c:forEach>
</div> </div>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<%@ include file="/WEB-INF/views/include/taglib.jsp" %> <%@ include file="/WEB-INF/views/include/taglib.jsp" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="jaaproot" value="${pageContext.request.contextPath}"/>
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
...@@ -31,8 +32,8 @@ ...@@ -31,8 +32,8 @@
<link rel="stylesheet" href="${ctxStatic}/cmpt/score_review.css?<%=System.currentTimeMillis()%>"/> <link rel="stylesheet" href="${ctxStatic}/cmpt/score_review.css?<%=System.currentTimeMillis()%>"/>
<script src="${ctxStatic}/My97DatePicker/WdatePicker.js" type="text/javascript"></script> <script src="${ctxStatic}/My97DatePicker/WdatePicker.js" type="text/javascript"></script>
<script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script> <script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script> <script type="text/javascript" charset="utf-8" src="${ctxStatic}/layerImport/layer.js"></script>
<link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css"> <link rel="stylesheet" href="${ctxStatic}/layerImport/need/layer.css">
<link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>"> <link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>">
<style> <style>
.img-item video{ .img-item video{
...@@ -80,18 +81,11 @@ ...@@ -80,18 +81,11 @@
<div class="flex-vt"> <div class="flex-vt">
<span class="title">审核结果</span> <span class="title">审核结果</span>
<span class="export-btn">导出名单</span> <span class="export-btn">导出名单</span>
<span class="import-score-btn" >导入成绩</span>
<input type="file" name="file" style="display: none" id="import-btn">
</div> </div>
<div class="flex" style="margin: 20px 0px 0px 0px"> <div class="flex" style="margin: 20px 0px 0px 0px">
<div class="flex-vt select-section">
<label>项目</label>
<div style="position: relative;">
<select v-on:change="changeRoad" v-model="selectedRoadId" class="select" name="">
<option v-for="road in roads" v-text="road.name" :value="road.roadId" :data-roadId="road.roadId"></option>
</select>
<span class="down-arrow"></span>
</div>
</div>
<div class="flex-vt select-section"> <div class="flex-vt select-section">
<label style="width: 100px;">成绩记录方式</label> <label style="width: 100px;">成绩记录方式</label>
<div style="position: relative; width: 136px;"> <div style="position: relative; width: 136px;">
...@@ -112,6 +106,27 @@ ...@@ -112,6 +106,27 @@
</div> </div>
</div> </div>
<div class="flex" style="margin: 20px 0px 0px 0px">
<div class="flex-vt select-section">
<label>项目</label>
<div style="position: relative;">
<select v-on:change="changeRoad" v-model="selectedRoadId" class="select" name="">
<option v-for="road in roads" v-text="road.name" :value="road.roadId" :data-roadId="road.roadId"></option>
</select>
<span class="down-arrow"></span>
</div>
</div>
<div class="flex-vt select-section" >
<label>路线</label>
<div style="position: relative;">
<select v-on:change="changePath" v-model="selectedPathId" class="select" name="">
<option v-for="path in paths" v-text="path.pathName" :value="path.pathId" :data-roadId="path.pathId"></option>
</select>
<span class="down-arrow"></span>
</div>
</div>
</div>
<div class="tab"> <div class="tab">
<div class="flex"> <div class="flex">
<span :class="['review-status',reviewStatus==0?'active':'']" v-on:click="changeStatus(0)" >待审核(<span v-text="reviewCount.waiting"></span>)</span> <span :class="['review-status',reviewStatus==0?'active':'']" v-on:click="changeStatus(0)" >待审核(<span v-text="reviewCount.waiting"></span>)</span>
...@@ -260,9 +275,33 @@ ...@@ -260,9 +275,33 @@
<span v-on:click="closeDialog" class="iconClose"></span> <span v-on:click="closeDialog" class="iconClose"></span>
</div> </div>
</div> </div>
<div class="mask">
<div class="dialog">
<h3>成绩导入</h3>
<div style="margin: 70px 0px 0px 0px;text-align: right;">
<span class="btn cancel" style="margin-right: 30px">取消</span>
<a class="btn" href="${jaaproot}/static/nameListFile/score_import_template.xlsx" download="成绩导入模板"> 下载模板 </a>
<span class="btn sure" v-on:click="importList()">导入</span>
</div>
</div>
</div>
<div class="maskErr">
<div class="dialog">
<h3>错误文件下载</h3>
<div style="margin: 70px 0px 0px 0px;text-align: right;">
<span class="btn cancel" id="errCancel" style="margin-right: 30px">取消</span>
<span class="btn sure" id="errorDetail">文件下载</span>
</div>
</div>
</div>
</div> </div>
</div> </div>
<script src="${ctxStatic}/vue/vue.js"></script> <script src="${ctxStatic}/vue/vue.js"></script>
<script src="${ctxStatic}/upload/vendor/jquery.ui.widget.js"></script>
<script src="${ctxStatic}/upload/jquery.fileupload.js"></script>
<script src="${ctxStatic}/newdermon/vendor/popper.js/umd/popper.min.js"></script> <script src="${ctxStatic}/newdermon/vendor/popper.js/umd/popper.min.js"></script>
<script src="${ctxStatic}/js/qikoo.js"></script> <script src="${ctxStatic}/js/qikoo.js"></script>
......
...@@ -246,6 +246,16 @@ label{ ...@@ -246,6 +246,16 @@ label{
z-index: 99; z-index: 99;
display: none; display: none;
} }
.maskErr{
width: 100%;
height: 100%;
position: fixed;
left: 0px;
top: 0px;
background: rgba(0,0,0,0.3);
z-index: 99;
display: none;
}
.dialog{ .dialog{
padding: 30px 40px; padding: 30px 40px;
height: 300px; height: 300px;
...@@ -288,6 +298,7 @@ label{ ...@@ -288,6 +298,7 @@ label{
height:42px; height:42px;
background:rgba(206,57,57,1); background:rgba(206,57,57,1);
border-radius:4px; border-radius:4px;
margin-left: 20px;
} }
.extra-item{ .extra-item{
height: 80px; height: 80px;
......
...@@ -383,6 +383,17 @@ input.score-input-bigger{ ...@@ -383,6 +383,17 @@ input.score-input-bigger{
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
} }
.import-score-btn{
width:145px;
height:40px;
background: rgba(206,57,57,1);
border-radius: 4px;
font-size: 16px;
color: white;
line-height: 40px;
text-align: center;
cursor: pointer;
}
.pass-icon{ .pass-icon{
background: url("/static/images/manage/score_pass.png") center no-repeat; background: url("/static/images/manage/score_pass.png") center no-repeat;
background-size: contain; background-size: contain;
......
$(document).ready(function () { $(document).ready(function () {
//切换项目,获取不同计时的打卡点 //切换项目,获取不同计时的打卡点
var roadId = $('.road-name').first().attr('road-id'); var roadId = $('.road-name').first().attr('road-id');
getTimeCp(roadId); var pathId = $('.road-name').first().attr('path-id');
getTimeCp(roadId,pathId);
//获取gpx路线上的打卡点 //获取gpx路线上的打卡点
//初始化已经配置好的GPS计时点配置列表 //初始化已经配置好的GPS计时点配置列表
...@@ -64,10 +65,11 @@ $(document).ready(function () { ...@@ -64,10 +65,11 @@ $(document).ready(function () {
var hasCp = $(this).attr('data-hasCp'); var hasCp = $(this).attr('data-hasCp');
if(hasCp == 'false') return; if(hasCp == 'false') return;
var roadId = $(this).parent().attr('road-id'); var roadId = $(this).parent().attr('road-id');
var pathId = $(this).parent().attr('path-id');
console.log(roadId); console.log(roadId);
const link = document.createElement('a') const link = document.createElement('a')
const body = document.querySelector('body') const body = document.querySelector('body')
link.href = "/gk/scan/downLoadAllQRByRoadId/"+getCId()+"/"+roadId link.href = "/gk/scan/downLoadAllQRByRoadId/"+getCId()+"/"+roadId+"/"+pathId
// fix Firefox // fix Firefox
link.style.display = 'none' link.style.display = 'none'
body.appendChild(link) body.appendChild(link)
...@@ -111,7 +113,7 @@ function getCpGpsList(roadId) { ...@@ -111,7 +113,7 @@ function getCpGpsList(roadId) {
* 获取计时的打卡点 * 获取计时的打卡点
* @param roadId * @param roadId
*/ */
function getTimeCp(roadId) { function getTimeCp(roadId,pathId) {
$('tbody').empty() $('tbody').empty()
$.ajax({ $.ajax({
url : '/gk/roadGpsCheckpoint/getTimeCheckpointByRoadId/'+getCId()+"/"+roadId, url : '/gk/roadGpsCheckpoint/getTimeCheckpointByRoadId/'+getCId()+"/"+roadId,
...@@ -131,7 +133,7 @@ function getTimeCp(roadId) { ...@@ -131,7 +133,7 @@ function getTimeCp(roadId) {
' <td>'+Number(e.checkpointLatitude == null? "0" : e.checkpointLatitude).toFixed(6)+','+Number(e.checkpointLongitude==null?"0":e.checkpointLongitude).toFixed(6)+'</td>\n' + ' <td>'+Number(e.checkpointLatitude == null? "0" : e.checkpointLatitude).toFixed(6)+','+Number(e.checkpointLongitude==null?"0":e.checkpointLongitude).toFixed(6)+'</td>\n' +
' </tr>'); ' </tr>');
}) })
getGpsCp(roadId); getGpsCp(roadId,pathId);
} }
} }
}) })
...@@ -143,9 +145,9 @@ function getTimeCp(roadId) { ...@@ -143,9 +145,9 @@ function getTimeCp(roadId) {
* 获取路线上的打卡点 * 获取路线上的打卡点
* @param roadId * @param roadId
*/ */
function getGpsCp(roadId) { function getGpsCp(roadId,pathId) {
$.ajax({ $.ajax({
url : '/gk/roadGpsCheckpoint/getGpsCheckPointByRoadId/'+getCId()+"/"+roadId, url : '/gk/roadGpsCheckpoint/getGpsCheckPointByRoadId/'+getCId()+"/"+roadId+"/"+pathId,
success:function (data) { success:function (data) {
if(data.status){ if(data.status){
$('.load').show(); $('.load').show();
......
...@@ -2,6 +2,7 @@ var score = new Vue({ ...@@ -2,6 +2,7 @@ var score = new Vue({
el : '#score', el : '#score',
data : { data : {
selectedRoadId:-1, selectedRoadId:-1,
selectedPathId:-1,
selectedOrigin:1, selectedOrigin:1,
searchWord:"", searchWord:"",
param:{ param:{
...@@ -27,8 +28,10 @@ var score = new Vue({ ...@@ -27,8 +28,10 @@ var score = new Vue({
dialog: false, dialog: false,
totalPage:0, totalPage:0,
roads: [], roads: [],
paths: [],
rules: [], rules: [],
scores: [] scores: [],
mark: ""
}, },
filters: { filters: {
substr:function(value,length){ substr:function(value,length){
...@@ -100,6 +103,11 @@ var score = new Vue({ ...@@ -100,6 +103,11 @@ var score = new Vue({
score.$data.param.page = 0; score.$data.param.page = 0;
reviewPage.reloadPage(); reviewPage.reloadPage();
}, },
changePath:function () {
score.$data.jumpToPage = 1;
score.$data.param.page = 0;
reviewPage.reloadPage();
},
searchKd:function () { searchKd:function () {
score.$data.jumpToPage = 1; score.$data.jumpToPage = 1;
score.$data.param.page = 0; score.$data.param.page = 0;
...@@ -110,6 +118,9 @@ var score = new Vue({ ...@@ -110,6 +118,9 @@ var score = new Vue({
score.$data.param.page = 0; score.$data.param.page = 0;
reviewPage.reloadPage(); reviewPage.reloadPage();
}, },
importList:function () {
$("#import-btn").trigger("click");
},
next:function () { next:function () {
if((score.$data.param.page+2) > Math.ceil(score.$data.totalPage/10)){ if((score.$data.param.page+2) > Math.ceil(score.$data.totalPage/10)){
layer.alert('已经是最后一页!'); layer.alert('已经是最后一页!');
...@@ -256,6 +267,19 @@ var reviewPage = { ...@@ -256,6 +267,19 @@ var reviewPage = {
if(data.status == 1){ if(data.status == 1){
score.$data.roads = data.content; score.$data.roads = data.content;
score.$data.selectedRoadId = score.$data.roads[0].roadId; score.$data.selectedRoadId = score.$data.roads[0].roadId;
reviewPage.getPaths();
reviewPage.reloadPage();
}
}
});
},
getPaths:function () {
$.ajax({
url:"/gk/review/paths/"+getCId()+"/"+score.$data.selectedRoadId,
success:function (data) {
if(data.status == 1){
score.$data.paths = data.content;
score.$data.selectedPathId = score.$data.paths[0].pathId;
reviewPage.reloadPage(); reviewPage.reloadPage();
} }
} }
...@@ -275,6 +299,7 @@ var reviewPage = { ...@@ -275,6 +299,7 @@ var reviewPage = {
}, },
reloadPage:function () { reloadPage:function () {
score.$data.param.roadId = score.$data.selectedRoadId; score.$data.param.roadId = score.$data.selectedRoadId;
score.$data.param.pathId = score.$data.selectedPathId;
score.$data.param.origin = score.$data.selectedOrigin; score.$data.param.origin = score.$data.selectedOrigin;
score.$data.param.keyword = score.$data.searchWord; score.$data.param.keyword = score.$data.searchWord;
$.ajax({ $.ajax({
...@@ -282,7 +307,7 @@ var reviewPage = { ...@@ -282,7 +307,7 @@ var reviewPage = {
data:score.$data.param, data:score.$data.param,
type:'post', type:'post',
beforeSend:function(){ beforeSend:function(){
layer.load(); //layer.load();
}, },
success:function (data) { success:function (data) {
if(data.code == 200){ if(data.code == 200){
...@@ -315,7 +340,7 @@ var reviewPage = { ...@@ -315,7 +340,7 @@ var reviewPage = {
getStatistic:function(){ getStatistic:function(){
$.ajax({ $.ajax({
url : '/geexekscore/api/v1/cmpt-score-rule-scoreinfo/getCmptScoreRuleScoreInfoStatistics?cmptId='+getCId()+'&roadId='+ url : '/geexekscore/api/v1/cmpt-score-rule-scoreinfo/getCmptScoreRuleScoreInfoStatistics?cmptId='+getCId()+'&roadId='+
score.$data.selectedRoadId score.$data.selectedRoadId + "&pathId=" + score.$data.selectedPathId
+'&origin='+ score.$data.selectedOrigin+"&keyword="+score.$data.searchWord, +'&origin='+ score.$data.selectedOrigin+"&keyword="+score.$data.searchWord,
type:'post', type:'post',
success:function (data) { success:function (data) {
...@@ -365,6 +390,80 @@ var reviewPage = { ...@@ -365,6 +390,80 @@ var reviewPage = {
}) })
} }
} }
var _upload={
//成绩导入
xls:function(){
var uploadIndex=0;
var jqXHR =null;
score.$data.mark = new Date().getTime();
$('body').on('click','#import-btn',function(e){
var url = "/gk/review/importScore?cmptId="+getCId()+"&roadId="+score.$data.selectedRoadId+"&pathId="+score.$data.selectedPathId+"&mark="+score.$data.mark;
jqXHR = $(this).fileupload({
url: url,
dataType: 'json',
add: function (e, data) {
var files=data.files;
if (files.length > 1) {
layer.error('只能上传一个excel');
return false;
}
if (files.length <= 0) {
layer.error("请选择上传的excel");
return false;
}
if (files.length == 1) {
var picFile = files[0];
var fileSize = Math.round(picFile.size / 1024);// kB
if (fileSize > 7*1024) {
layer.error("excel必须小于7MB");
return false;
}
var jqXHR =data.submit();
layer.waiting("名单导入过程中,请耐心等待...");
uploadIndex=layer.upload("正在上传excel,请等待...",jqXHR);
}
},
done: function (e, data) {
layer.closeAll();
layer.info("文件上传成功");
if(data.result.status){
$('.mask').fadeOut();
return ;
}else{
layer.alert(data.result.msg);
$('.mask').fadeOut();
$('.maskErr').fadeIn();
return ;
}
},
fail:function (jqXHR, textStatus) {
if (textStatus.textStatus === 'abort') {
layer.close(uploadIndex);
return;
}
layer.closeAll();
layer.error("上传excel失败");
return false;
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css(
'width',
progress + '%'
);
if(progress==100){
layer.close(uploadIndex);
}
}
});
});
return jqXHR;
}
};
$(document).ready(function () { $(document).ready(function () {
$('body').on('click', '.status', function () { $('body').on('click', '.status', function () {
var checked = $(this).hasClass('checked'); var checked = $(this).hasClass('checked');
...@@ -390,7 +489,33 @@ $(document).ready(function () { ...@@ -390,7 +489,33 @@ $(document).ready(function () {
$('.export-btn').click(function () { $('.export-btn').click(function () {
window.open("/geexekscore/api/v1/cmpt-score-rank/export/"+getCId()) window.open("/geexekscore/api/v1/cmpt-score-rank/export/"+getCId())
}) })
$('.export-btn').click(function () {
window.open("/geexekscore/api/v1/cmpt-score-rank/export/"+getCId())
})
$('.import-score-btn').click(function () {
$('.mask').fadeIn();
});
$('.cancel').click(function () {
$('.mask').fadeOut();
$('.dialog').removeAttr('data-id');
$('.dialog').removeAttr('data-type');
})
$('#errCancel').click(function () {
$('.maskErr').fadeOut();
})
//下载详细信息excel
$('body').on('click','#errorDetail',function(e){
// window.location.href = '/gk/review/downloadImportResultExcel?operation=importScoreData&mark='+score.$data.mark;
var url = '/gk/review/downloadImportResultExcel?operation=importScoreData&mark='+score.$data.mark;
window.open(url);
});
reviewPage.getRoads(); reviewPage.getRoads();
_upload.xls();
}); });
function calculateScore(){ function calculateScore(){
var scoreId = $($dp.el).parents('.score-detail').attr('scoreId') var scoreId = $($dp.el).parents('.score-detail').attr('scoreId')
......
This diff is collapsed.
/* 动画部分 */
/* 默认 */
@-webkit-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(.5);
transform: scale(.5)
}
100% {
opacity: 1;
-webkit-transform: scale(1);
transform: scale(1)
}
}
.layermanim{animation-name: bounceIn; -webkit-animation-name: bounceIn;}
/* 下移 */
@-webkit-keyframes fadeInDown {
0% {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@keyframes fadeInDown {
0% {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
.fadeInDown {
-webkit-animation-name: fadeInDown;
animation-name: fadeInDown;
}
@-webkit-keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
.fadeInUp {
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
@-webkit-keyframes slideInDown {
0% {
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
visibility: visible;
}
100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes slideInDown {
0% {
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
visibility: visible;
}
100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.slideInDown {
-webkit-animation-name: slideInDown;
animation-name: slideInDown;
}
@-webkit-keyframes slideInUp {
0% {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
visibility: visible;
}
100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes slideInUp {
0% {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
visibility: visible;
}
100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.slideInUp {
-webkit-animation-name: slideInUp;
animation-name: slideInUp;
}
/* layer弹层移动版样式 90000*/
.layermbox{position:absolute; left:0; top:0; width:100%; z-index:998;}
.laymshade,
.layermmain{position:fixed; left:0; top:0; width:100%; height:100%;}
.laymshade{background-color:rgba(0,0,0, .5); pointer-events:auto;}
.layermmain{display:table; font-family: Helvetica, arial, sans-serif; pointer-events: none;}
.layermmain .section{display:table-cell; vertical-align:middle; text-align:center;}
.layermchild{position:relative; display:inline-block; text-align:left; background-color:#fff; font-size:14px; border-radius:6px; box-shadow:0 0 8px rgba(0, 0, 0, 0.1); pointer-events:auto;}
.layermchild{-webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration: .18s; animation-duration: .18s;}
.layermborder{border:1px solid #999;}
.layermbox0 .layermchild{max-width:260px; min-width:150px;}
.layermbox1 .layermchild{border:none; border-radius:0;}
.layermbox2 .layermchild{width:auto; max-width:260px; min-width:40px; border:none; background-color:rgba(0,0,0,.6); color:#fff;}
.layermchild h3{padding:0 45px 0 10px; height:50px; line-height:50px; border-bottom:1px solid #EBEBEB; font-size:16px; font-weight:400; border-radius:5px 5px 0 0; border-bottom:1px solid #EBEBEB;}
.layermchild h3,
.layermbtn span{ text-overflow:ellipsis; overflow:hidden; white-space:nowrap;}
.layermcont{padding:20px 15px; line-height:22px; border-radius:5px;}
.layermbox1 .layermcont{padding:0;}
.layermbox2 .layermcont{text-align:center; padding:30px 30px 0; line-height: 0;}
.layermbox2 .layermcont i{width:1.5rem; height:1.5rem; margin-left:8px; display:inline-block; background-color:#fff; border-radius:100%;}
.layermbox2 .layermcont i{-webkit-animation: bouncedelay 1.4s infinite ease-in-out; animation: bouncedelay 1.4s infinite ease-in-out; -webkit-animation-fill-mode: both; animation-fill-mode: both;}
@-webkit-keyframes bouncedelay{
0%,80%,100%{-webkit-transform:scale(0)}
40%{-webkit-transform:scale(1)}
}
@keyframes bouncedelay{
0%,80%,100%{transform:scale(0);-webkit-transform:scale(0)}
40%{transform:scale(1);-webkit-transform:scale(1)}
}
.layermbox2 .layermcont i:first-child{margin-left:0; -webkit-animation-delay: -.32s; animation-delay: -.32s;}
.layermbox2 .layermcont i.laymloadtwo{-webkit-animation-delay: -.16s; animation-delay: -.16s;}
.layermbox2 .layermcont>div{line-height:22px; padding-top:7px; margin-bottom:20px; font-size: 14px;}
.layermbtn{position:relative; height:40px; line-height:40px; font-size:0; text-align:center; border-top:1px solid #EBEBEB;}
.layermbtn span{position:relative; display:inline-block; width:50%; text-align:center; font-size:14px; cursor:pointer; border-radius: 0 5px 0 0;}
.layermbtn span:first-child{height:39px; background-color:#fff; border-radius: 0 0 0 5px;}
.layermbtn:before{content:'\20'; position:absolute; width:1px; height:39px; left:50%; top:0; background-color:#EBEBEB;}
.layermend{position:absolute; right:7px; top:10px; width:30px; height:30px; border: 0; font-weight:400; background: transparent; cursor: pointer; -webkit-appearance: none; font-size:30px;}
.layermend::before, .layermend::after{position:absolute; left:5px; top:13px; content:''; width:20px; height:2px; background-color:rgba(0,0,0,.3); transform:rotate(45deg); -webkit-transform:rotate(45deg); border-radius: 3px;}
.layermend::after{transform:rotate(-45deg); -webkit-transform:rotate(-45deg);}
jQuery.extend({
createUploadIframe: function(id, uri)
{
//create frame
var frameId = 'jUploadFrame' + id;
var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
if(window.ActiveXObject)
{
if(typeof uri== 'boolean'){
iframeHtml += ' src="' + 'javascript:false' + '"';
}
else if(typeof uri== 'string'){
iframeHtml += ' src="' + uri + '"';
}
}
iframeHtml += ' />';
jQuery(iframeHtml).appendTo(document.body);
return jQuery('#' + frameId).get(0);
},
createUploadForm: function(id, fileElementId, data)
{
//create form
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
if(data)
{
for(var i in data)
{
jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
}
}
var oldElement = jQuery('#' + fileElementId);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr('id', fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);
//set attributes
jQuery(form).css('position', 'absolute');
jQuery(form).css('top', '-1200px');
jQuery(form).css('left', '-1200px');
jQuery(form).appendTo('body');
return form;
},
ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = new Date().getTime()
var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
var io = jQuery.createUploadIframe(id, s.secureuri);
var frameId = 'jUploadFrame' + id;
var formId = 'jUploadForm' + id;
// Watch for a new set of requests
if ( s.global && ! jQuery.active++ )
{
jQuery.event.trigger( "ajaxStart" );
}
var requestDone = false;
// Create the request object
var xml = {}
if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
// Wait for a response to come back
var uploadCallback = function(isTimeout)
{
var io = document.getElementById(frameId);
try
{
if(io.contentWindow)
{
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
}else if(io.contentDocument)
{
xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
}
}catch(e)
{
jQuery.handleError(s, xml, null, e);
}
if ( xml || isTimeout == "timeout")
{
requestDone = true;
var status;
try {
status = isTimeout != "timeout" ? "success" : "error";
// Make sure that the request was successful or notmodified
if ( status != "error" )
{
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType );
// If a local callback was specified, fire it and pass it the data
if ( s.success )
s.success( data, status );
// Fire the global callback
if( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
} else
jQuery.handleError(s, xml, status);
} catch(e)
{
status = "error";
jQuery.handleError(s, xml, status, e);
}
// The request was completed
if( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] );
// Handle the global AJAX counter
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" );
// Process result
if ( s.complete )
s.complete(xml, status);
jQuery(io).unbind()
setTimeout(function()
{ try
{
jQuery(io).remove();
jQuery(form).remove();
} catch(e)
{
jQuery.handleError(s, xml, null, e);
}
}, 100)
xml = null
}
}
// Timeout checker
if ( s.timeout > 0 )
{
setTimeout(function(){
// Check to see if the request is still happening
if( !requestDone ) uploadCallback( "timeout" );
}, s.timeout);
}
try
{
var form = jQuery('#' + formId);
jQuery(form).attr('action', s.url);
jQuery(form).attr('method', 'POST');
jQuery(form).attr('target', frameId);
if(form.encoding)
{
jQuery(form).attr('encoding', 'multipart/form-data');
}
else
{
jQuery(form).attr('enctype', 'multipart/form-data');
}
jQuery(form).submit();
} catch(e)
{
jQuery.handleError(s, xml, null, e);
}
jQuery('#' + frameId).load(uploadCallback );
return {abort: function () {}};
},
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
}
// Fire the global callback
if ( s.global ) {
(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
}
},
uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
// eval( "data = " + data );
data=eval("("+data.replace("<pre>","").replace("</pre>","")+")");
//eval("data = \" "+data+" \" ");
// evaluate scripts within html
if ( type == "html" )
jQuery("<div>").html(data).evalScripts();
return data;
}
})
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment