Commit 75bc5fda authored by Administrator's avatar Administrator

修改

parent 1aca836a
package com.yxproject.start.api;
import com.yxproject.start.service.UtilService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Administrator
* @date 2019/6/18
*/
@RestController
@RequestMapping("UtilApi")
public class AccDatabaseApi {
@Autowired
UtilService utilService;
/**
* 更新受理库导入时间
*/
@GetMapping(value = "updateImportTime")
public boolean updateImportTime() {
return utilService.updateImportTime();
}
/**
* 更新受理库处理标志
*
* @param dealFlag 受理库处理标志
*/
@GetMapping(value = "updateDealFlag")
public boolean updateDealFlag(@RequestParam("dealFlag") String dealFlag) {
return utilService.updateDealFlag(dealFlag);
}
}
......@@ -214,12 +214,12 @@ public class DeliveredApi {
@RequestMapping("queryDeliveredReport")
// @RequiresPermissions("userInfo.add")//权限管理;
@Transactional(rollbackFor = Exception.class)
public List<Map<String, Object>> queryDeliveredReport(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, HttpServletRequest requ) {
public List<Map<String, Object>> queryDeliveredReport(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate,@RequestParam("type") int reportType, HttpServletRequest requ) {
String remoteAddr = requ.getRemoteAddr();
MDC.put("ip", remoteAddr);
List<Map<String, Object>> report = new ArrayList<>();
try {
report = deliveredService.selectDeliveredReport(replaceDate(startDate), replaceDate(endDate));
report = deliveredService.selectDeliveredReport(replaceDate(startDate), replaceDate(endDate),reportType);
} catch (Exception e) {
logger.error("运单寄出开始时间:" + startDate + "运单寄出结束时间:" + endDate);
logger.error("Exception 登记投递失败信息异常", e);
......@@ -237,10 +237,10 @@ public class DeliveredApi {
@RequestMapping("queryDeliveredByImportDate")
// @RequiresPermissions("userInfo.add")//权限管理;
@Transactional(rollbackFor = Exception.class)
public List<DeliveredImportDicEntity> queryDeliveredByImportDate(@RequestParam("date") String date, HttpServletRequest requ) {
public List<Map<String,Object>> queryDeliveredByImportDate(@RequestParam("date") String date, HttpServletRequest requ) {
String remoteAddr = requ.getRemoteAddr();
MDC.put("ip", remoteAddr);
List<DeliveredImportDicEntity> deliveredImportDicEntities = new ArrayList<DeliveredImportDicEntity>();
List<Map<String,Object>> deliveredImportDicEntities = new ArrayList<>();
try {
deliveredImportDicEntities = deliveredService.selectDeliveredByImportDate(replaceDate(date));
} catch (Exception e) {
......@@ -294,16 +294,16 @@ public class DeliveredApi {
deliveredService.updateDeliveredFailedInfo(cardId,name);
//查询出对应详单信息
List<DetailReceiptListEntity> detailReceiptListEntityList = detailReceiptListService.selectDetailReceiptListEntityByCardId(cardId);
if (detailReceiptListEntityList.size() > 0) {
if (detailReceiptListEntityList.size()>0) {
//生成新的交接单信息
ReceiptListEntity receiptListEntity = new ReceiptListEntity();
DetailReceiptListEntity detailReceiptListEntity = detailReceiptListEntityList.get(0);
receiptListEntity.setPoliceCode(detailReceiptListEntity.getUploadNo().substring(0, 9));
receiptListEntity.setPoliceCode(detailReceiptListEntity.getUploadNo().substring(0,9));
receiptListEntity.setQrCode(detailReceiptListEntity.getAcceptNo());
receiptListEntity.setFinishCount((long) 1);
receiptListEntity.setState((long) 1);
receiptListEntity.setFinishCount((long)1);
receiptListEntity.setState((long)0);
receiptListEntity.setCheckName(name);
receiptListEntity.setCardTypeId((long) 0);
receiptListEntity.setCardTypeId((long)0);
long id = receiptService.saveReceiptList(receiptListEntity);
//更改对应的详单信息
detailReceiptListService.updateDetailReceiptList(detailReceiptListEntity, id);
......
......@@ -24,6 +24,9 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import static com.yxproject.start.utils.YXStringUtils.getCurrentDate2String;
import static com.yxproject.start.utils.YXStringUtils.inputStream2byte;
@RestController
@RequestMapping("exportExcel")
public class ExportExcelApi {
......@@ -45,25 +48,14 @@ public class ExportExcelApi {
JSONArray jsonArray = JSONArray.fromObject(jsonObject.get("list"));
String isHistory = jsonObject.get("isHistory").toString();
String name = jsonObject.get("name").toString();
List<Map<String, Object>> mapList = detailReceiptListService.selectPostDetails(jsonArray, name, isHistory);
List<Map<String, Object>> mapList = detailReceiptListService.selectPostDetails(jsonArray, name,isHistory);
response.setContentType("application/x-download");
response.setCharacterEncoding("UTF-8");
String dateTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd");
// //使用Servlet实现文件下载的时候,避免浏览器自动打开文件
String fout = null;
fout = ExportExcel.exportExcelDate(mapList);
String outFile = dateTime + "公安网信息表";
//使用Servlet实现文件下载的时候,避免浏览器自动打开文件
String fout = ExportExcel.exportExcelDate(mapList);
try {
FileInputStream fis = new FileInputStream(new File(fout));
byte[] b = new byte[fis.available()];
fis.read(b);
fis.close();
response.addHeader("Content-Disposition", "attachment;filename=" + outFile + ".xls");
return b;
} catch (FileNotFoundException e) {
e.printStackTrace();
logger.error("导出文件名:" + fout);
logger.error("FileNotFoundException 导出公安网数据未找到异常", e);
response.addHeader("Content-Disposition", "attachment;filename=" + getCurrentDate2String("yyyy-MM-dd") + "公安网信息表" + ".xls");
return inputStream2byte(fout);
} catch (IOException e) {
e.printStackTrace();
logger.error("导出文件名:" + fout);
......@@ -88,29 +80,6 @@ public class ExportExcelApi {
type = jsonObject.get("type").toString();
jsonArray = JSONArray.fromObject(jsonObject.get("list"));
map = receiptService.selectReceiptList(jsonArray, Long.valueOf(type));
// response.setContentType("application/x-download");
// response.setCharacterEncoding("UTF-8");
// String dateTime = DateFormatUtils.format(new Date(), "yyyy_MM_dd");
//// //使用Servlet实现文件下载的时候,避免浏览器自动打开文件
// String fout = null;
// fout = ExportExcel.exportReceiptExcelDate(mapList);
// String outFile = dateTime + "";
//
// try {
// FileInputStream fis = new FileInputStream(new File(fout));
// byte[] b = new byte[fis.available()];
// fis.read(b);
// fis.close();
// response.setCharacterEncoding("utf-8");
// response.setContentType("application/octet-stream");
// response.addHeader("Content-Disposition", "attachment;" + new String(outFile.getBytes(), "iso-8859-1") + ".xls");
// return b;
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
// return null;
} catch (Exception e) {
e.printStackTrace();
logger.error("异常参数:" + jsonObject);
......@@ -120,16 +89,6 @@ public class ExportExcelApi {
}
// /**
// * 查询公安网数据
// */
// @RequestMapping("selectExcelData")
// public List<Map<String, Object>> selectExcelData(@RequestParam("date") String date) {
// List<Map<String, Object>> mapList = detailReceiptListService.selectPostDetails(replaceDate(date));
// return mapList;
// }
/**
* 去除字符串中中线
*
......
......@@ -20,8 +20,8 @@ public interface CardDetailedListMapper {
/**
* 生成身份证详单
*/
@Insert("INSERT INTO DETAIL_RECEIPT_LIST (UPLOAD_NO,POLICE_CODE,CARD_ID,NAME)VALUES(#{uploadNo},#{policeCode},#{cardId},#{name})")
public boolean saveCardDetailedList(@Param("uploadNo") String uploadNo, @Param("policeCode") String policeCode, @Param("cardId") String cardId, @Param("name") String name);
// @Insert("INSERT INTO DETAIL_RECEIPT_LIST (UPLOAD_NO,POLICE_CODE,CARD_ID,NAME)VALUES(#{uploadNo},#{policeCode},#{cardId},#{name})")
// public boolean saveCardDetailedList(@Param("uploadNo") String uploadNo, @Param("policeCode") String policeCode, @Param("cardId") String cardId, @Param("name") String name);
/**
* 查询详单数据
......
......@@ -20,18 +20,56 @@ public interface DeliveredInfoMapper {
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "ID")
public boolean saveDeliveredInfo(DeliveredInfoEntity deliveredInfoEntity);
@Select("select to_char(PRINT_DATE,'yyyyMMdd') PRINT_DATE ,count(PERSON_POST.WAYBILL_NUMBER) post_Count,\n" +
"sum(decode(DELIVERED_INFO.WAYBILL_NUMBER,null,0,1)) DELIVERED_count,\n" +
"sum(decode(DELIVERED_FAILED_INFO.WAYBILL_NUMBER,null,0,1)) DELIVERED_FAILED_count from PERSON_POST \n" +
"left join DELIVERED_INFO on PERSON_POST.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER\n" +
"left join DELIVERED_FAILED_INFO on PERSON_POST.WAYBILL_NUMBER = DELIVERED_FAILED_INFO.WAYBILL_NUMBER\n" +
"where to_char(PRINT_DATE,'yyyyMMdd') BETWEEN #{startDate} and #{endDate} \n" +
"group by to_char(PRINT_DATE,'yyyyMMdd')")
public List<Map<String, Object>> selectReport(@Param("startDate") String startDate, @Param("endDate") String endDate);
@Select("select * from DELIVERED_IMPORT_DIC where TO_CHAR(IMPORT_DATE,'yyyyMMdd') = #{date} ")
public List<DeliveredImportDicEntity> selectDeliveredByImportDate(@Param("date") String date);
@Select("<script>" +
"<if test = 'reportType == 0 ' >" +
"select to_char(PRINT_DATE,'yyyyMMdd') PRINT_DATE ,count(PERSON_POST.WAYBILL_NUMBER) post_Count,\n" +
"sum(decode(DELIVERED_INFO.deal_state,1,1,0)) DELIVERED_count,\n" +
"sum(decode(DELIVERED_INFO.deal_state,0,1,0)) DELIVERED_FAILED_count,\n" +
"'0' REPORT_TYPE \n" +
"from PERSON_POST \n" +
"left join DELIVERED_INFO on PERSON_POST.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER\n" +
"where 1=1\n" +
"and to_char(PRINT_DATE,'yyyyMMdd') BETWEEN #{startDate} and #{endDate} \n" +
"group by to_char(PRINT_DATE,'yyyyMMdd')" +
"</if>\n" +
"<if test = 'reportType == 1' >" +
"select RECEIPT_DATE PRINT_DATE ,\n" +
"count(GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER) post_Count, sum(decode(DELIVERED_INFO.deal_state,1,1,0)) DELIVERED_count, \n" +
"sum(decode(DELIVERED_INFO.deal_state,0,1,0)) DELIVERED_FAILED_count, \n" +
"'1' REPORT_TYPE \n" +
"from GREEN_PACKAGE_INFORMATION \n" +
"left join DELIVERED_INFO on GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER \n" +
"where 1=1 and RECEIPT_DATE BETWEEN #{startDate} and #{endDate} group by RECEIPT_DATE" +
"</if>\n" +
" <if test = 'reportType == -1' >" +
"select to_char(PRINT_DATE,'yyyyMMdd') PRINT_DATE ,count(PERSON_POST.WAYBILL_NUMBER) post_Count,\n" +
"sum(decode(DELIVERED_INFO.deal_state,1,1,0)) DELIVERED_count,\n" +
"sum(decode(DELIVERED_INFO.deal_state,0,1,0)) DELIVERED_FAILED_count, \n" +
"'0' REPORT_TYPE \n" +
"from PERSON_POST \n" +
"left join DELIVERED_INFO on PERSON_POST.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER\n" +
"where 1=1\n" +
"and to_char(PRINT_DATE,'yyyyMMdd') BETWEEN #{startDate} and #{endDate} \n" +
"group by to_char(PRINT_DATE,'yyyyMMdd')" +
" UNION all\n" +
"select RECEIPT_DATE PRINT_DATE ,\n" +
"count(GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER) post_Count, sum(decode(DELIVERED_INFO.deal_state,1,1,0)) DELIVERED_count, \n" +
"sum(decode(DELIVERED_INFO.deal_state,0,1,0)) DELIVERED_FAILED_count, \n" +
"'1' REPORT_TYPE \n" +
"from GREEN_PACKAGE_INFORMATION \n" +
"left join DELIVERED_INFO on GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER \n" +
"where 1=1 and RECEIPT_DATE BETWEEN #{startDate} and #{endDate} group by RECEIPT_DATE" +
"</if> " +
"</script>")
public List<Map<String, Object>> selectReport(@Param("startDate") String startDate, @Param("endDate") String endDate,@Param("reportType")int reportType);
@Select("select FILE_NAME,IMPORT_DATE,IMPORT_NAME,DELIVERED_INFO.FILE_ID,sum(decode(DELIVERED_INFO.DEAL_STATE,1,1,0)) delive,\n" +
"sum(decode(DELIVERED_INFO.DEAL_STATE,0,1,0)) undelice \n" +
"from DELIVERED_IMPORT_DIC \n" +
"left join DELIVERED_INFO on DELIVERED_INFO.FILE_ID = DELIVERED_IMPORT_DIC.ID " +
"where TO_CHAR(IMPORT_DATE,'yyyyMMdd') = #{date} " +
"group by FILE_NAME,IMPORT_DATE,IMPORT_NAME,DELIVERED_INFO.FILE_ID order by to_char(import_date,'yyyy-mm-dd')")
public List<Map<String,Object>> selectDeliveredByImportDate(@Param("date") String date);
@Select("select DELIVERED_FAILED_INFO.*,DELIVERED_FAILED_REASON.REASON from DELIVERED_FAILED_INFO\n" +
"left join DELIVERED_FAILED_REASON on DELIVERED_FAILED_REASON.ID = DELIVERED_FAILED_INFO.BACK_REASON\n" +
......@@ -50,10 +88,15 @@ public interface DeliveredInfoMapper {
@Select("select * from DELIVERED_FAILED_REASON ")
public List<DeliveredFailedReasonEntity> selectDeliveredFailedType();
@Select("select to_char(PRINT_DATE,'yyyyMMdd') PRINT_DATE ,DELIVERED_INFO.WAYBILL_NUMBER\n" +
@Select("select PERSON_POST.WAYBILL_NUMBER , to_date(PRINT_DATE,'yyyy-MM-dd hh24:mi:ss') PRINT_DATE\n" +
"from PERSON_POST \n" +
"left join DELIVERED_INFO on PERSON_POST.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER\n" +
"where to_char(PRINT_DATE,'yyyyMMdd') in (${date}) and DELIVERED_INFO.DEAL_STATE =0")
"where to_char(PRINT_DATE,'yyyyMMdd') in (${date}) and DELIVERED_INFO.DEAL_STATE is NULL\n" +
"UNION all\n" +
"select GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER ,to_date(RECEIPT_DATE,'yyyy-MM-dd hh24:mi:ss') PRINT_DATE\n" +
"from GREEN_PACKAGE_INFORMATION \n" +
"left join DELIVERED_INFO on GREEN_PACKAGE_INFORMATION.WAYBILL_NUMBER = DELIVERED_INFO.WAYBILL_NUMBER \n" +
"where RECEIPT_DATE in (${date})")
public List<Map<String,Object>> selectDeliverData(@Param("date")String date);
@Select("select * from DETAIL_RECEIPT_LIST left join PERSON_POST on PERSON_POST.ID_CARD = DETAIL_RECEIPT_LIST.CARD_ID where PERSON_POST.BACK_WAYBILL_NUMBER = #{waybillNumber} and DETAIL_RECEIPT_LIST.CARD_ID = #{cardId} ")
......
......@@ -72,6 +72,7 @@ public interface ReceiptMapper {
") </script>")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="ID")
public long saveReceiptList(ReceiptListEntity receiptListEntity);
//根据身份证号查询交接单详单信息
@Select("select prod_card_t.upload_no," +
"PROD_CARD_T.ACCEPT_NO," +
......@@ -219,13 +220,15 @@ public interface ReceiptMapper {
@Select("select RECEIPT_LIST.id,RECEIPT_LIST.QR_CODE,RECEIPT_LIST.RECEIPT_DATE,RECEIPT_LIST.POLICE_CODE,decode(RECEIPT_LIST.Old_CARD_TYPE_ID,null,RECEIPT_LIST.CARD_TYPE_ID,RECEIPT_LIST.Old_CARD_TYPE_ID) CARD_TYPE_ID,\n" +
@Select("<script>" +
"select RECEIPT_LIST.id,RECEIPT_LIST.QR_CODE,to_char(RECEIPT_LIST.RECEIPT_DATE,'yyyy-MM-dd') RECEIPT_DATE,RECEIPT_LIST.POLICE_CODE,decode(RECEIPT_LIST.Old_CARD_TYPE_ID,null,RECEIPT_LIST.CARD_TYPE_ID,RECEIPT_LIST.Old_CARD_TYPE_ID) CARD_TYPE_ID,\n" +
"RECEIPT_LIST.FINISH_COUNT,GAJG_DM.GAJG_DM,GAJG_DM.GAJG_MC,to_char(CHECK_DATE,'yyyyMMdd') CHECK_DATE,RECEIPT_LIST.CHECK_NAME\n" +
",CARD_TYPE_DIC.CARD_TYPE,COUNTY_DIC.COUNTY_CODE ,COUNTY_DIC.COUNTYNAME from RECEIPT_LIST \n" +
"left join CARD_TYPE_DIC on CARD_TYPE_DIC.CARD_TYPE_ID = decode(RECEIPT_LIST.Old_CARD_TYPE_ID,null,RECEIPT_LIST.CARD_TYPE_ID,RECEIPT_LIST.Old_CARD_TYPE_ID)\n" +
"left join GAJG_DM on GAJG_DM.GAJG_DM = RECEIPT_LIST.POLICE_CODE\n" +
"left join COUNTY_DIC on substr(RECEIPT_LIST.POLICE_CODE,0,6) = COUNTY_DIC.COUNTY_CODE" +
" where RECEIPT_LIST.id in (${string}) order by RECEIPT_LIST.QR_CODE ")
" where RECEIPT_LIST.id in (${string}) order by RECEIPT_LIST.id " +
"</script>")
public List<Map<String,Object>> selectReceiptDate(@Param("string") String string);
@Select("select DETAIL_RECEIPT_LIST.* , GAJG_DM.GAJG_MC from DETAIL_RECEIPT_LIST LEFT JOIN GAJG_DM ON GAJG_DM.GAJG_DM =DETAIL_RECEIPT_LIST.POLICE_CODE where ACCEPT_NO=#{acceptNo} or card_id=#{acceptNo}")
......
......@@ -17,7 +17,7 @@ public interface CardDetailedListService {
public List<DetailReceiptListEntity> findCardDetailedListByIdCard(String idCard);
public List<Map<String,Object>> findAllCardDetailedListByIdCard(String idCard);
public boolean saveCardDetailedList(String uploadNo,String policeCode,String cardId,String name);
// public boolean saveCardDetailedList(String uploadNo,String policeCode,String cardId,String name);
}
......@@ -16,8 +16,8 @@ public interface DeliveredService {
public boolean saveDeliveredImportDic(DeliveredImportDicEntity deliveredImportDicEntity);
public boolean saveDeliveredInfoList(List<DeliveredInfoEntity> deliveredInfoEntityList);
public boolean saveDeliveredFailedInfoList(List<DeliveredFailedInfoEntity> deliveredFailedInfoEntities);
public List<Map<String,Object>> selectDeliveredReport(String startDate,String endDate);
public List<DeliveredImportDicEntity> selectDeliveredByImportDate(String date);
public List<Map<String,Object>> selectDeliveredReport(String startDate,String endDate, int reportType);
public List<Map<String,Object>> selectDeliveredByImportDate(String date);
public List<Map<String,Object>> selectDeliveredFailedByRegisterDate(String startDate,String endDate);
public boolean deleteDeliveredByFileId(long filedID);
public boolean deleteDeliveredFailedById(long id);
......
......@@ -31,9 +31,9 @@ public class CardDetailedListServiceImpl implements CardDetailedListService {
}
@Override
public boolean saveCardDetailedList(String uploadNo, String policeCode, String cardId, String name) {
cardDetailedListMapper.saveCardDetailedList(uploadNo, policeCode, cardId, name);
return true;
}
// @Override
// public boolean saveCardDetailedList(String uploadNo, String policeCode, String cardId, String name) {
// cardDetailedListMapper.saveCardDetailedList(uploadNo, policeCode, cardId, name);
// return true;
// }
}
......@@ -56,13 +56,13 @@ public class DeliveredServiceImpl implements DeliveredService {
}
@Override
public List<Map<String, Object>> selectDeliveredReport(String startDate, String endDate) {
List<Map<String, Object>> mapList = deliveredInfoMapper.selectReport(startDate, endDate);
public List<Map<String, Object>> selectDeliveredReport(String startDate, String endDate, int reportType) {
List<Map<String, Object>> mapList = deliveredInfoMapper.selectReport(startDate, endDate, reportType);
return mapList;
}
@Override
public List<DeliveredImportDicEntity>selectDeliveredByImportDate(String date) {
public List<Map<String,Object>>selectDeliveredByImportDate(String date) {
return deliveredInfoMapper.selectDeliveredByImportDate(date);
}
......
......@@ -29,7 +29,6 @@ public class DetailReceiptListServiceImpl implements DetailReceiptListService {
}
}
// str+=")";
if ("0".equals(isHistory)) {
detailReceiptListMapper.updateReceiptListEntityByCardId(str, name);
}
......
......@@ -7,6 +7,8 @@ import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by zhangdahui on 2017/8/23.
......@@ -36,6 +38,11 @@ public class YXStringUtils {
return str;
}
public static String getCurrentDate2String(String pattern) {
SimpleDateFormat dt = new SimpleDateFormat(pattern);
return dt.format(new Date());
}
public static String inputStream2String(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
......@@ -95,14 +102,12 @@ public class YXStringUtils {
return encoder.encode(data);
}
public static byte[] inputStream2byte(InputStream inStream) throws IOException {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc;
while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
return swapStream.toByteArray();
public static byte[] inputStream2byte(String filename) throws IOException,FileNotFoundException {
FileInputStream fis = new FileInputStream(new File(filename));
byte[] b = new byte[fis.available()];
fis.read(b);
fis.close();
return b;
}
public static void saveDom2File(Document document, String filepath) throws IOException {
......
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