|
|
|
@ -7,6 +7,7 @@ import com.cjy.common.groups.AddGroup; |
|
|
|
|
import com.cjy.common.groups.UpdaeGroup; |
|
|
|
|
import com.cjy.parking.domain.CarParkData; |
|
|
|
|
import com.cjy.parking.domain.InParkRecords; |
|
|
|
|
import com.cjy.parking.domain.ParkingLotMsgEntity; |
|
|
|
|
import com.cjy.parking.util.AdmissionDataprocessFactory; |
|
|
|
|
import com.cjy.parking.util.ProcessFactory; |
|
|
|
|
import com.cjy.parking.vo.ParkingLotAccessSummaryVO; |
|
|
|
@ -36,189 +37,201 @@ import com.ruoyi.common.core.page.TableDataInfo; |
|
|
|
|
*/ |
|
|
|
|
@RestController |
|
|
|
|
@RequestMapping("/parking/turnoverData") |
|
|
|
|
public class ParkingTurnoverDataController extends BaseController |
|
|
|
|
{ |
|
|
|
|
@Autowired |
|
|
|
|
private IParkingTurnoverDataService parkingTurnoverDataService; |
|
|
|
|
@Autowired |
|
|
|
|
ProcessFactory processFactory; |
|
|
|
|
@Autowired |
|
|
|
|
AdmissionDataprocessFactory admissionDataprocessFactory; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private ISysConfigService configService; |
|
|
|
|
/** |
|
|
|
|
* 查询停车场流水数据列表 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:list')") |
|
|
|
|
@GetMapping("/list") |
|
|
|
|
public TableDataInfo list(ParkingTurnoverData parkingTurnoverData) |
|
|
|
|
{ |
|
|
|
|
startPage(); |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverData> list = parkingTurnoverDataService.selectParkingTurnoverDataList(parkingTurnoverData); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 导出停车场流水数据列表 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:export')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.EXPORT) |
|
|
|
|
@PostMapping("/export") |
|
|
|
|
public void export(HttpServletResponse response, ParkingTurnoverData parkingTurnoverData) |
|
|
|
|
{ |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverData> list = parkingTurnoverDataService.selectParkingTurnoverDataList(parkingTurnoverData); |
|
|
|
|
ExcelUtil<ParkingTurnoverData> util = new ExcelUtil<ParkingTurnoverData>(ParkingTurnoverData.class); |
|
|
|
|
util.exportExcel(response, list, "停车场流水数据数据"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取停车场流水数据详细信息 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:query')") |
|
|
|
|
@GetMapping(value = "/{id}") |
|
|
|
|
public AjaxResult getInfo(@PathVariable("id") Long id) |
|
|
|
|
{ |
|
|
|
|
return success(parkingTurnoverDataService.selectParkingTurnoverDataById(id)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 新增停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:add')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.INSERT) |
|
|
|
|
@PostMapping |
|
|
|
|
public AjaxResult add(@Validated(AddGroup.class) @RequestBody ParkingTurnoverData parkingTurnoverData) |
|
|
|
|
{ |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
parkingTurnoverData.setCreateBy(getUserId().toString()); |
|
|
|
|
int returnValue =parkingTurnoverDataService.insertParkingTurnoverData(parkingTurnoverData); |
|
|
|
|
if(returnValue>0){ |
|
|
|
|
return AjaxResult.success("创建成功"); |
|
|
|
|
}else { |
|
|
|
|
return AjaxResult.error("请输入合法车牌号"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 修改停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:edit')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.UPDATE) |
|
|
|
|
@PutMapping |
|
|
|
|
public AjaxResult edit( @Validated(UpdaeGroup.class) @RequestBody ParkingTurnoverData parkingTurnoverData) |
|
|
|
|
{ |
|
|
|
|
parkingTurnoverData.setDelFlag("1"); |
|
|
|
|
parkingTurnoverData.setUpdateBy(getUserId().toString()); |
|
|
|
|
int returnValue =parkingTurnoverDataService.updateParkingTurnoverData(parkingTurnoverData); |
|
|
|
|
if(returnValue>0){ |
|
|
|
|
return AjaxResult.success("修改成功"); |
|
|
|
|
}else { |
|
|
|
|
return AjaxResult.error("请输入合法车牌号"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 删除停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:remove')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.DELETE) |
|
|
|
|
public class ParkingTurnoverDataController extends BaseController { |
|
|
|
|
@Autowired |
|
|
|
|
private IParkingTurnoverDataService parkingTurnoverDataService; |
|
|
|
|
@Autowired |
|
|
|
|
ProcessFactory processFactory; |
|
|
|
|
@Autowired |
|
|
|
|
AdmissionDataprocessFactory admissionDataprocessFactory; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private ISysConfigService configService; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 查询停车场流水数据列表 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:list')") |
|
|
|
|
@GetMapping("/list") |
|
|
|
|
public TableDataInfo list(ParkingTurnoverData parkingTurnoverData) { |
|
|
|
|
startPage(); |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverData> list = parkingTurnoverDataService.selectParkingTurnoverDataList(parkingTurnoverData); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 导出停车场流水数据列表 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:export')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.EXPORT) |
|
|
|
|
@PostMapping("/export") |
|
|
|
|
public void export(HttpServletResponse response, ParkingTurnoverData parkingTurnoverData) { |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverData> list = parkingTurnoverDataService.selectParkingTurnoverDataList(parkingTurnoverData); |
|
|
|
|
ExcelUtil<ParkingTurnoverData> util = new ExcelUtil<ParkingTurnoverData>(ParkingTurnoverData.class); |
|
|
|
|
util.exportExcel(response, list, "停车场流水数据数据"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取停车场流水数据详细信息 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:query')") |
|
|
|
|
@GetMapping(value = "/{id}") |
|
|
|
|
public AjaxResult getInfo(@PathVariable("id") Long id) { |
|
|
|
|
return success(parkingTurnoverDataService.selectParkingTurnoverDataById(id)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 新增停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:add')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.INSERT) |
|
|
|
|
@PostMapping |
|
|
|
|
public AjaxResult add(@Validated(AddGroup.class) @RequestBody ParkingTurnoverData parkingTurnoverData) { |
|
|
|
|
parkingTurnoverData.setOrganCode(getUserOrganCode()); |
|
|
|
|
parkingTurnoverData.setCreateBy(getUserId().toString()); |
|
|
|
|
int returnValue = parkingTurnoverDataService.insertParkingTurnoverData(parkingTurnoverData); |
|
|
|
|
if (returnValue > 0) { |
|
|
|
|
return AjaxResult.success("创建成功"); |
|
|
|
|
} else { |
|
|
|
|
return AjaxResult.error("请输入合法车牌号"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 修改停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:edit')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.UPDATE) |
|
|
|
|
@PutMapping |
|
|
|
|
public AjaxResult edit(@Validated(UpdaeGroup.class) @RequestBody ParkingTurnoverData parkingTurnoverData) { |
|
|
|
|
parkingTurnoverData.setDelFlag("1"); |
|
|
|
|
parkingTurnoverData.setUpdateBy(getUserId().toString()); |
|
|
|
|
int returnValue = parkingTurnoverDataService.updateParkingTurnoverData(parkingTurnoverData); |
|
|
|
|
if (returnValue > 0) { |
|
|
|
|
return AjaxResult.success("修改成功"); |
|
|
|
|
} else { |
|
|
|
|
return AjaxResult.error("请输入合法车牌号"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 删除停车场流水数据 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:remove')") |
|
|
|
|
@Log(title = "停车场流水数据", businessType = BusinessType.DELETE) |
|
|
|
|
@DeleteMapping("/{ids}") |
|
|
|
|
public AjaxResult remove(@PathVariable Long[] ids) |
|
|
|
|
{ |
|
|
|
|
return toAjax(parkingTurnoverDataService.deleteParkingTurnoverDataByIds(ids)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取车辆归属地 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
@GetMapping("/vehicleAttributionList") |
|
|
|
|
public TableDataInfo vehicleAttributionList() |
|
|
|
|
{ |
|
|
|
|
List<VehicleAttributionVO> list = parkingTurnoverDataService.vehicleAttributionList(); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
*停车场出入明细 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingInAndOutDetails')") |
|
|
|
|
@PostMapping("/parkingInAndOutDetails") |
|
|
|
|
public TableDataInfo parkingInAndOutDetails(@RequestBody ParkingTurnoverDataVO parkingTurnoverDataVO) |
|
|
|
|
{ |
|
|
|
|
startPage(); |
|
|
|
|
parkingTurnoverDataVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverDataVO> list = parkingTurnoverDataService.parkingInAndOutDetails(parkingTurnoverDataVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 导出停车场出入明细 |
|
|
|
|
*/ |
|
|
|
|
@Log(title = "停车场出入明细数据", businessType = BusinessType.EXPORT) |
|
|
|
|
@PostMapping("/parkingInAndOutDetailsExport") |
|
|
|
|
public void parkingInAndOutDetailsExport(HttpServletResponse response, @RequestBody ParkingTurnoverDataVO parkingTurnoverDataVO) |
|
|
|
|
{ |
|
|
|
|
parkingTurnoverDataVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverDataVO> list = parkingTurnoverDataService.parkingInAndOutDetails(parkingTurnoverDataVO); |
|
|
|
|
ExcelUtil<ParkingTurnoverDataVO> util = new ExcelUtil<ParkingTurnoverDataVO>(ParkingTurnoverDataVO.class); |
|
|
|
|
util.exportExcel(response, list, "停车场出入明细数据"); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
*停车场出入汇总 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingLotAccessSummary')") |
|
|
|
|
@PostMapping("/parkingLotAccessSummary") |
|
|
|
|
public TableDataInfo parkingLotAccessSummary(@RequestBody ParkingLotAccessSummaryVO parkingLotAccessSummaryVO) |
|
|
|
|
{ |
|
|
|
|
parkingLotAccessSummaryVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingLotAccessSummaryVO> list = parkingTurnoverDataService.parkingLotAccessSummary(parkingLotAccessSummaryVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
*停车场时长汇总 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingLotDurationSummary')") |
|
|
|
|
@PostMapping("/parkingLotDurationSummary") |
|
|
|
|
public TableDataInfo parkingLotDurationSummary(@RequestBody ParkingLotDurationSummaryVO parkingLotDurationSummaryVO) |
|
|
|
|
{ |
|
|
|
|
parkingLotDurationSummaryVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingLotDurationSummaryVO> list = parkingTurnoverDataService.parkingLotDurationSummary(parkingLotDurationSummaryVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 出 |
|
|
|
|
* @param list |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@RequestMapping("/parkingLotSynchronousData") |
|
|
|
|
public AjaxResult parkingLotSynchronousData(@RequestBody List<CarParkData> list) { |
|
|
|
|
String appearanceTime = configService.selectConfigByKey("car.park.appearance.time"); |
|
|
|
|
try { |
|
|
|
|
processFactory.startProcess( list); |
|
|
|
|
return AjaxResult.success("接收成功",Long.parseLong(appearanceTime)); |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
return AjaxResult.error("接收数据异常",Long.parseLong(appearanceTime)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 入 |
|
|
|
|
* @param list |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@RequestMapping("/parkingLotSynchronousAdmissionData") |
|
|
|
|
public AjaxResult parkingLotSynchronousAdmissionData(@RequestBody List<InParkRecords> list) { |
|
|
|
|
String admissionTime = configService.selectConfigByKey("car.park.admission.time"); |
|
|
|
|
try { |
|
|
|
|
admissionDataprocessFactory.startAdmissionDataProcess( list); |
|
|
|
|
return AjaxResult.success("接收成功",admissionTime); |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
return AjaxResult.error("接收数据异常",admissionTime); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public AjaxResult remove(@PathVariable Long[] ids) { |
|
|
|
|
return toAjax(parkingTurnoverDataService.deleteParkingTurnoverDataByIds(ids)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取车辆归属地 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
@GetMapping("/vehicleAttributionList") |
|
|
|
|
public TableDataInfo vehicleAttributionList() { |
|
|
|
|
List<VehicleAttributionVO> list = parkingTurnoverDataService.vehicleAttributionList(); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 停车场出入明细 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingInAndOutDetails')") |
|
|
|
|
@PostMapping("/parkingInAndOutDetails") |
|
|
|
|
public TableDataInfo parkingInAndOutDetails(@RequestBody ParkingTurnoverDataVO parkingTurnoverDataVO) { |
|
|
|
|
startPage(); |
|
|
|
|
parkingTurnoverDataVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverDataVO> list = parkingTurnoverDataService.parkingInAndOutDetails(parkingTurnoverDataVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 导出停车场出入明细 |
|
|
|
|
*/ |
|
|
|
|
@Log(title = "停车场出入明细数据", businessType = BusinessType.EXPORT) |
|
|
|
|
@PostMapping("/parkingInAndOutDetailsExport") |
|
|
|
|
public void parkingInAndOutDetailsExport(HttpServletResponse response, @RequestBody ParkingTurnoverDataVO parkingTurnoverDataVO) { |
|
|
|
|
parkingTurnoverDataVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingTurnoverDataVO> list = parkingTurnoverDataService.parkingInAndOutDetails(parkingTurnoverDataVO); |
|
|
|
|
ExcelUtil<ParkingTurnoverDataVO> util = new ExcelUtil<ParkingTurnoverDataVO>(ParkingTurnoverDataVO.class); |
|
|
|
|
util.exportExcel(response, list, "停车场出入明细数据"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 停车场出入汇总 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingLotAccessSummary')") |
|
|
|
|
@PostMapping("/parkingLotAccessSummary") |
|
|
|
|
public TableDataInfo parkingLotAccessSummary(@RequestBody ParkingLotAccessSummaryVO parkingLotAccessSummaryVO) { |
|
|
|
|
parkingLotAccessSummaryVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingLotAccessSummaryVO> list = parkingTurnoverDataService.parkingLotAccessSummary(parkingLotAccessSummaryVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 停车场时长汇总 |
|
|
|
|
*/ |
|
|
|
|
@PreAuthorize("@ss.hasPermi('parking:turnoverData:parkingLotDurationSummary')") |
|
|
|
|
@PostMapping("/parkingLotDurationSummary") |
|
|
|
|
public TableDataInfo parkingLotDurationSummary(@RequestBody ParkingLotDurationSummaryVO parkingLotDurationSummaryVO) { |
|
|
|
|
parkingLotDurationSummaryVO.setOrganCode(getUserOrganCode()); |
|
|
|
|
List<ParkingLotDurationSummaryVO> list = parkingTurnoverDataService.parkingLotDurationSummary(parkingLotDurationSummaryVO); |
|
|
|
|
return getDataTable(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 启动服务日志 |
|
|
|
|
* |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@RequestMapping("/projectBeginingMsg") |
|
|
|
|
public AjaxResult projectBeginingMsg() { |
|
|
|
|
ParkingLotMsgEntity parkingLotMsgEntity = new ParkingLotMsgEntity(); |
|
|
|
|
parkingLotMsgEntity.setName("停车场同步服务"); |
|
|
|
|
parkingLotMsgEntity.setMsg("服务启动"); |
|
|
|
|
try { |
|
|
|
|
parkingTurnoverDataService.saveProjectBeginingMsg(parkingLotMsgEntity); |
|
|
|
|
return AjaxResult.success("接收成功"); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return AjaxResult.error("接收数据异常"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 出 |
|
|
|
|
* |
|
|
|
|
* @param list |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@RequestMapping("/parkingLotSynchronousData") |
|
|
|
|
public AjaxResult parkingLotSynchronousData(@RequestBody List<CarParkData> list) { |
|
|
|
|
String appearanceTime = configService.selectConfigByKey("car.park.appearance.time"); |
|
|
|
|
try { |
|
|
|
|
processFactory.startProcess(list); |
|
|
|
|
return AjaxResult.success("接收成功", Long.parseLong(appearanceTime)); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return AjaxResult.error("接收数据异常", Long.parseLong(appearanceTime)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 入 |
|
|
|
|
* |
|
|
|
|
* @param list |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@RequestMapping("/parkingLotSynchronousAdmissionData") |
|
|
|
|
public AjaxResult parkingLotSynchronousAdmissionData(@RequestBody List<InParkRecords> list) { |
|
|
|
|
String admissionTime = configService.selectConfigByKey("car.park.admission.time"); |
|
|
|
|
try { |
|
|
|
|
admissionDataprocessFactory.startAdmissionDataProcess(list); |
|
|
|
|
return AjaxResult.success("接收成功", admissionTime); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return AjaxResult.error("接收数据异常", admissionTime); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|