diff --git a/cjy-project/src/main/java/com/cjy/reservationdata/controller/AppointmentCenterDataController.java b/cjy-project/src/main/java/com/cjy/reservationdata/controller/AppointmentCenterDataController.java index 47561af9..3003116f 100644 --- a/cjy-project/src/main/java/com/cjy/reservationdata/controller/AppointmentCenterDataController.java +++ b/cjy-project/src/main/java/com/cjy/reservationdata/controller/AppointmentCenterDataController.java @@ -1,10 +1,10 @@ package com.cjy.reservationdata.controller; import java.util.List; -import java.util.Map; + import javax.servlet.http.HttpServletResponse; -import com.alibaba.fastjson2.JSONArray; + import com.cjy.reservationdata.domain.vo.SynchronousWriteOffDataVO; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +23,9 @@ import com.ruoyi.common.enums.BusinessType; import com.cjy.reservationdata.domain.AppointmentCenterData; import com.cjy.reservationdata.service.IAppointmentCenterDataService; import com.ruoyi.common.utils.poi.ExcelUtil; + import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 预约记录Controller @@ -113,6 +115,28 @@ public class AppointmentCenterDataController extends BaseController } + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) { + + + ExcelUtil util = new ExcelUtil(AppointmentCenterData.class); + List list = null; + try { + list = util.importExcel(file.getInputStream(), 1); + } catch (Exception e) { + e.printStackTrace(); + } + + String message = appointmentCenterDataService.importData(list, 2,getUserOrganCode()); + return AjaxResult.success(message); + } + + + /** + * 同步预约数据 + * @param list + * @return + */ @RequestMapping("/synchronousData") public AjaxResult synchronousData(@RequestBody List list) { try { @@ -123,13 +147,35 @@ public class AppointmentCenterDataController extends BaseController } } + /** + * 核销预约数据 + * @param list + * @return + */ @RequestMapping("/synchronousWriteOffData") - public AjaxResult synchronousWriteOffData( @RequestBody SynchronousWriteOffDataVO synchronousWriteOffDataVO) { + public AjaxResult synchronousWriteOffData( @RequestBody List list) { + try { + //通过id去修改数据 + appointmentCenterDataService.synchronousWriteOffData(list); + return AjaxResult.success("接收成功"); + }catch (Exception e){ + return AjaxResult.error("接收数据异常"); + } + } + + /** + * 取消预约数据 + * @param list + * @return + */ + @RequestMapping("/synchronousCancelData") + public AjaxResult synchronousCancelData( @RequestBody List list) { try { //通过id去修改数据 - appointmentCenterDataService.synchronousWriteOffData(synchronousWriteOffDataVO); + appointmentCenterDataService.synchronousCancelData(list); return AjaxResult.success("接收成功"); }catch (Exception e){ + e.printStackTrace(); return AjaxResult.error("接收数据异常"); } } diff --git a/cjy-project/src/main/java/com/cjy/reservationdata/domain/AppointmentCenterData.java b/cjy-project/src/main/java/com/cjy/reservationdata/domain/AppointmentCenterData.java index f5f92175..7d3cb861 100644 --- a/cjy-project/src/main/java/com/cjy/reservationdata/domain/AppointmentCenterData.java +++ b/cjy-project/src/main/java/com/cjy/reservationdata/domain/AppointmentCenterData.java @@ -27,32 +27,32 @@ public class AppointmentCenterData extends BaseEntity private String appointmentNumber; /** 景区名称 */ - @Excel(name = "景区名称") + @Excel(name = "景区名称(必填)") private String scenicName; /** 预约日期 */ @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "预约日期", width = 30, dateFormat = "yyyy-MM-dd") + @Excel(name = "预约日期(必填)", width = 30, dateFormat = "yyyy-MM-dd") private Date appointmentDate; /** 预约时段 */ - @Excel(name = "预约时段") + @Excel(name = "预约时段(必填)") private String appointmentSlot; /** 预约人姓名 */ - @Excel(name = "预约人姓名") + @Excel(name = "预约人姓名(必填)") private String appointmentPeopleName; /** 预约人手机号 */ - @Excel(name = "预约人手机号") + @Excel(name = "预约人手机号(必填)") private String appointmentPeoplePhone; /** 证件类型 */ - @Excel(name = "证件类型") + @Excel(name = "证件类型(必填)") private String certificateType; /** 证件号码 */ - @Excel(name = "证件号码") + @Excel(name = "证件号码(必填)") private String documentsNumber; /** 核销码 */ @@ -60,7 +60,7 @@ public class AppointmentCenterData extends BaseEntity private String verificationCode; /** 状态 */ - @Excel(name = "状态") + @Excel(name = "状态(必填)") private String state; /** 核销日期 */ @@ -123,7 +123,7 @@ public class AppointmentCenterData extends BaseEntity this.appointmentDate = appointmentDate; } - public Date getAppointmentDate() + public Date getAppointmentDate() { return appointmentDate; } diff --git a/cjy-project/src/main/java/com/cjy/reservationdata/mapper/AppointmentCenterDataMapper.java b/cjy-project/src/main/java/com/cjy/reservationdata/mapper/AppointmentCenterDataMapper.java index c1cadb98..15b5d3dd 100644 --- a/cjy-project/src/main/java/com/cjy/reservationdata/mapper/AppointmentCenterDataMapper.java +++ b/cjy-project/src/main/java/com/cjy/reservationdata/mapper/AppointmentCenterDataMapper.java @@ -62,11 +62,23 @@ public interface AppointmentCenterDataMapper public int deleteAppointmentCenterDataByIds(Long[] ids); /** - * 同步数据批量插入 + * 同步预约数据 * @param list * @return */ int synchronousData(@Param("list") List list); - int synchronousWriteOffData(SynchronousWriteOffDataVO synchronousWriteOffDataVO); + /** + * 核销预约数据 + * @param list + * @return + */ + int synchronousWriteOffData(@Param("list") List list); + + /** + * 取消预约数据 + * @param list + * @return + */ + int synchronousCancelData(@Param("list") List list ); } diff --git a/cjy-project/src/main/java/com/cjy/reservationdata/service/IAppointmentCenterDataService.java b/cjy-project/src/main/java/com/cjy/reservationdata/service/IAppointmentCenterDataService.java index d7afe1bb..8ccf2210 100644 --- a/cjy-project/src/main/java/com/cjy/reservationdata/service/IAppointmentCenterDataService.java +++ b/cjy-project/src/main/java/com/cjy/reservationdata/service/IAppointmentCenterDataService.java @@ -60,8 +60,26 @@ public interface IAppointmentCenterDataService */ public int deleteAppointmentCenterDataById(Long id); - + /** + * 同步预约数据 + * @param list + * @return + */ int synchronousData(List list); - int synchronousWriteOffData(SynchronousWriteOffDataVO synchronousWriteOffDataVO); + /** + * 核销预约数据 + * @param list + * @return + */ + int synchronousWriteOffData(List list ); + + /** + * 取消预约数据 + * @param list + * @return + */ + int synchronousCancelData(List list ); + + String importData( List list,int row,Long organCode); } diff --git a/cjy-project/src/main/java/com/cjy/reservationdata/service/impl/AppointmentCenterDataServiceImpl.java b/cjy-project/src/main/java/com/cjy/reservationdata/service/impl/AppointmentCenterDataServiceImpl.java index 2cd6432c..2bdc3f04 100644 --- a/cjy-project/src/main/java/com/cjy/reservationdata/service/impl/AppointmentCenterDataServiceImpl.java +++ b/cjy-project/src/main/java/com/cjy/reservationdata/service/impl/AppointmentCenterDataServiceImpl.java @@ -1,9 +1,15 @@ package com.cjy.reservationdata.service.impl; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import com.cjy.reservationdata.domain.vo.SynchronousWriteOffDataVO; +import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysDictDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.cjy.reservationdata.mapper.AppointmentCenterDataMapper; @@ -21,7 +27,8 @@ public class AppointmentCenterDataServiceImpl implements IAppointmentCenterDataS { @Autowired private AppointmentCenterDataMapper appointmentCenterDataMapper; - + @Autowired + private ISysDictDataService iSysDictDataService; /** * 查询预约记录 * @@ -96,13 +103,113 @@ public class AppointmentCenterDataServiceImpl implements IAppointmentCenterDataS return appointmentCenterDataMapper.deleteAppointmentCenterDataById(id); } + /** + * 同步预约数据 + * @param list + * @return + */ @Override public int synchronousData(List list) { return appointmentCenterDataMapper.synchronousData(list); } + /** + * 核销预约数据 + * @param list + * @return + */ + @Override + public int synchronousWriteOffData(List list) { + return appointmentCenterDataMapper.synchronousWriteOffData(list); + } + + /** + * 取消预约数据 + * @param list + * @return + */ + @Override + public int synchronousCancelData(List list) { + return appointmentCenterDataMapper.synchronousCancelData(list); + } + @Override - public int synchronousWriteOffData(SynchronousWriteOffDataVO synchronousWriteOffDataVO) { - return appointmentCenterDataMapper.synchronousWriteOffData(synchronousWriteOffDataVO); + public String importData(List list, int row,Long organCode) { + List newList= new ArrayList<>(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List dictTypes =new ArrayList<>(); + dictTypes.add("write_off_status"); + dictTypes.add("certificate_type"); + List dictData=iSysDictDataService.selectDictDataListByType(dictTypes); + for (int i = 0; i < list.size(); i++) { + AppointmentCenterData appointmentCenterData= new AppointmentCenterData(); + appointmentCenterData.setDataSources("1"); + appointmentCenterData.setOrganCode(organCode); + if (StringUtils.isBlank(list.get(i).getScenicName())) { + return "第" + (row + i) + "行数据,景区名称不能为空,请核验"; + } + appointmentCenterData.setScenicName(list.get(i).getScenicName()); + if (StringUtils.isBlank( dateFormat.format(list.get(i).getAppointmentDate()))) { + return "第" + (row + i) + "行数据,预约日期不能为空,请核验"; + } + appointmentCenterData.setAppointmentDate(list.get(i).getAppointmentDate()); + if (StringUtils.isBlank( list.get(i).getAppointmentSlot())) { + return "第" + (row + i) + "行数据,预约时段不能为空,请核验"; + } + appointmentCenterData.setAppointmentSlot( list.get(i).getAppointmentSlot()); + + if (StringUtils.isBlank( list.get(i).getAppointmentPeopleName())) { + return "第" + (row + i) + "行数据,预约人姓名不能为空,请核验"; + } + appointmentCenterData.setAppointmentPeopleName(list.get(i).getAppointmentPeopleName()); + + if (StringUtils.isBlank( list.get(i).getAppointmentPeoplePhone())) { + return "第" + (row + i) + "行数据,预约人电话不能为空,请核验"; + } + appointmentCenterData.setAppointmentPeoplePhone(list.get(i).getAppointmentPeoplePhone()); + if (StringUtils.isBlank( list.get(i).getDocumentsNumber())) { + return "第" + (row + i) + "行数据,证件号码不能为空,请核验"; + } + appointmentCenterData.setDocumentsNumber(list.get(i).getDocumentsNumber()); + + if (StringUtils.isBlank( list.get(i).getCertificateType())) { + return "第" + (row + i) + "行数据,证件类型不能为空,请核验"; + } + try { + int finalI = i; + String state=dictData.stream().filter(dataSate ->dataSate.getDictLabel().equals(list.get(finalI).getState())).collect(Collectors.toList()).get(0).getDictValue(); + appointmentCenterData.setState(state); + }catch (Exception e){ + return "第" + (row + i) + "行数据,证件类型不能正确,请核验"; + } + + + + if (StringUtils.isBlank( list.get(i).getState())) { + return "第" + (row + i) + "行数据,状态不能为空,请核验"; + } + try { + int finalI = i; + String state = dictData.stream().filter(dataSate -> dataSate.getDictLabel().equals(list.get(finalI).getState())).collect(Collectors.toList()).get(0).getDictValue(); + appointmentCenterData.setState(state); + }catch (Exception e){ + return "第" + (row + i) + "行数据,状态数据错,请核验"; + } + + + + + if(newList.size()<1000){ + newList.add(appointmentCenterData); + }else { + appointmentCenterDataMapper.synchronousData(newList); + newList.clear(); + newList.add(appointmentCenterData); + } + } + if(!newList.isEmpty()){ + appointmentCenterDataMapper.synchronousData(newList); + } + return "导入"+newList.size() + "条数据"; } } diff --git a/cjy-project/src/main/resources/mapper/reservationdata/AppointmentCenterDataMapper.xml b/cjy-project/src/main/resources/mapper/reservationdata/AppointmentCenterDataMapper.xml index 0a9a2a79..573e33f3 100644 --- a/cjy-project/src/main/resources/mapper/reservationdata/AppointmentCenterDataMapper.xml +++ b/cjy-project/src/main/resources/mapper/reservationdata/AppointmentCenterDataMapper.xml @@ -155,6 +155,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - update appointment_center_data set state=1,write_off_time=#{date} where appointment_people_id=#{id} + + update appointment_center_data set state=1,write_off_time=#{item.date} + where appointment_people_id=#{item.id} + + + + update appointment_center_data set state=3 where appointment_people_id in + + #{item} + + + \ No newline at end of file diff --git a/cjy-project/src/main/resources/static/appointmentInformationStencil.xlsx b/cjy-project/src/main/resources/static/appointmentInformationStencil.xlsx new file mode 100644 index 00000000..ef879087 Binary files /dev/null and b/cjy-project/src/main/resources/static/appointmentInformationStencil.xlsx differ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 7e575033..0e05a229 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -111,9 +111,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter // 过滤请求 .authorizeRequests() // 对于登录login 注册register 验证码captchaImage 允许匿名访问 - .antMatchers("/device/**","/login", "/register", "/captchaImage","/enterprise/loginPageConfig","/app/login","/weibo/**","/reservationdata/appointmentrecord/synchronousData","/reservationdata/appointmentrecord/synchronousWriteOffData").permitAll() + .antMatchers("/device/**","/login", "/register", "/captchaImage","/enterprise/loginPageConfig","/app/login","/weibo/**","/reservationdata/appointmentrecord/synchronousData","/reservationdata/appointmentrecord/synchronousWriteOffData","/reservationdata/appointmentrecord/synchronousCancelData").permitAll() // 静态资源,可匿名访问 - .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**","/**/*.xlsx").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated() diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java index e4ce1074..1d589c52 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -1,103 +1,106 @@ package com.ruoyi.system.mapper; import java.util.List; + import org.apache.ibatis.annotations.Param; import com.ruoyi.common.core.domain.entity.SysDictData; /** * 字典表 数据层 - * + * * @author ruoyi */ -public interface SysDictDataMapper -{ - /** - * 根据条件分页查询字典数据 - * - * @param dictData 字典数据信息 - * @return 字典数据集合信息 - */ - public List selectDictDataList(SysDictData dictData); +public interface SysDictDataMapper { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + public List selectDictDataByType(String dictType); - /** - * 根据字典类型查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据集合信息 - */ - public List selectDictDataByType(String dictType); + /** + * 通过 dictType 和dictValue 获取数据 + * + * @param dictType + * @param list + * @return + */ + public List selectDictDataByTypeAndDictValue(@Param("dictType") String dictType, @Param("list") List list); - /** - * 通过 dictType 和dictValue 获取数据 - * @param dictType - * @param list - * @return - */ - public List selectDictDataByTypeAndDictValue(@Param("dictType") String dictType,@Param("list") List list); + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); - /** - * 根据字典类型和字典键值查询字典数据信息 - * - * @param dictType 字典类型 - * @param dictValue 字典键值 - * @return 字典标签 - */ - public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + public SysDictData selectDictDataById(Long dictCode); - /** - * 根据字典数据ID查询信息 - * - * @param dictCode 字典数据ID - * @return 字典数据 - */ - public SysDictData selectDictDataById(Long dictCode); + /** + * 查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据 + */ + public int countDictDataByType(String dictType); - /** - * 查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据 - */ - public int countDictDataByType(String dictType); + /** + * 通过字典ID删除字典数据信息 + * + * @param dictCode 字典数据ID + * @return 结果 + */ + public int deleteDictDataById(Long dictCode); - /** - * 通过字典ID删除字典数据信息 - * - * @param dictCode 字典数据ID - * @return 结果 - */ - public int deleteDictDataById(Long dictCode); + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + public int deleteDictDataByIds(Long[] dictCodes); - /** - * 批量删除字典数据信息 - * - * @param dictCodes 需要删除的字典数据ID - * @return 结果 - */ - public int deleteDictDataByIds(Long[] dictCodes); + /** + * 新增字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int insertDictData(SysDictData dictData); - /** - * 新增字典数据信息 - * - * @param dictData 字典数据信息 - * @return 结果 - */ - public int insertDictData(SysDictData dictData); + /** + * 修改字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int updateDictData(SysDictData dictData); - /** - * 修改字典数据信息 - * - * @param dictData 字典数据信息 - * @return 结果 - */ - public int updateDictData(SysDictData dictData); + /** + * 同步修改字典类型 + * + * @param oldDictType 旧字典类型 + * @param newDictType 新旧字典类型 + * @return 结果 + */ + public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); - /** - * 同步修改字典类型 - * - * @param oldDictType 旧字典类型 - * @param newDictType 新旧字典类型 - * @return 结果 - */ - public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); + String getDictValueByDictLabel(@Param("dictType") String dictType, @Param("dictLable") String dictLable); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java index 38045c01..a684a12b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -2,6 +2,7 @@ package com.ruoyi.system.service; import java.util.List; import com.ruoyi.common.core.domain.entity.SysDictData; +import org.apache.ibatis.annotations.Param; /** * 字典 业务层 @@ -65,4 +66,6 @@ public interface ISysDictDataService * @return */ public List selectDictDataListByType(List dictTypes); + + String getDictValueByDictLabel( String dictType, String dictLable); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index 6c85436a..fb4bc06a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -131,4 +131,9 @@ public class SysDictDataServiceImpl implements ISysDictDataService } return list; } + + @Override + public String getDictValueByDictLabel(String dictType, String dictLable) { + return dictDataMapper.getDictValueByDictLabel(dictType,dictLable); + } } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml index f270c1e4..4f3db92d 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -130,5 +130,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sysdate() ) - + \ No newline at end of file diff --git a/ruoyi-ui/src/views/reservationdata/appointmentrecord/index.vue b/ruoyi-ui/src/views/reservationdata/appointmentrecord/index.vue index 15613b20..fc384eea 100644 --- a/ruoyi-ui/src/views/reservationdata/appointmentrecord/index.vue +++ b/ruoyi-ui/src/views/reservationdata/appointmentrecord/index.vue @@ -1,6 +1,8 @@