diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java index ec842cd..a3ba028 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/CouponMapper.java @@ -44,4 +44,14 @@ public interface CouponMapper { String findCityId(String hospitalId); + /** + * 查询报表详情(发放人数、发放券数、使用人数、使用券数) + * @param param + * @return + */ + List> findReport(Map param); + + List> findUsedInfo(Map param); + + List> findHospitals(Map param); } diff --git a/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml b/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml index 17ed825..7df1e19 100644 --- a/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml +++ b/platform-biz-service/src/main/resources/mainOrm/master/CouponMapper.xml @@ -134,4 +134,61 @@ where h.hospital_id=#{hospitalId} and ct.type=#{type} order by t.coupon_order ASC + + + + + + \ No newline at end of file diff --git a/platform-common/src/main/java/com/lyms/platform/common/enums/CouponEnums.java b/platform-common/src/main/java/com/lyms/platform/common/enums/CouponEnums.java index 3809744..2239e94 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/enums/CouponEnums.java +++ b/platform-common/src/main/java/com/lyms/platform/common/enums/CouponEnums.java @@ -6,12 +6,17 @@ package com.lyms.platform.common.enums; * @Version: V1.0 */ public enum CouponEnums { - - PRENATAL(1, "产检券"), - ANTENATAL(2, "产前券"), - POSTPARTUM(3, "产后券"), - REVIEW(4, "复查券"), - CHILD_HEALTH(5, "儿保券"); + /*** + * 1=孕妇建档 2=孕妇产检 3=产妇建档 4=产妇分娩 5=产妇出院小结 6=产妇产后复查 7=儿童建档 8=儿童保健 + */ + PRENATAL_FILE(1, "孕妇建档"), + ANTENATAL_CHECK(2, "孕妇产检"), + POSTPARTUM_FILE(3, "产妇建档"), + MATERNAL_DELIVER(4, "产妇分娩"), + MATERNAL_LEAVE_HOSPITAL(5, "产妇出院小结"), + MATERNAL_REVIEW(6, "产妇产后复查"), + CHILDREN_FILE(7, "儿童建档"), + CHILDREN_HEALTHCARE(8, "儿童保健"); private Integer code; private String name; diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/RespBuilder.java b/platform-common/src/main/java/com/lyms/platform/common/result/RespBuilder.java index 60bd646..5e96070 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/result/RespBuilder.java +++ b/platform-common/src/main/java/com/lyms/platform/common/result/RespBuilder.java @@ -1,5 +1,11 @@ package com.lyms.platform.common.result; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.Assert; + +import java.util.HashMap; +import java.util.Map; + /** * @Author: litao * @Date: 2017/4/27 0027 10:45 @@ -10,9 +16,17 @@ public class RespBuilder { return buildSuccess(null); } - public static BaseObjectResponse buildSuccess(Object data) { + public static BaseObjectResponse buildSuccess(Object ... data) { + Assert.notNull(data); + Assert.isTrue(data.length == 1 || data.length % 2 == 0, "length必须为偶数"); + BaseObjectResponse resp = new BaseObjectResponse(); - resp.setData(data); + if(data.length == 1) { + resp.setData(data); + } else { + resp.setData(createMap(data)); + } + return resp; } @@ -32,4 +46,16 @@ public class RespBuilder { } return resp; } + + private static Map createMap(Object ... args){ + Map map = new HashMap<>(); + for (int i = 0; i < args.length; i++) { + String key = args[i++].toString(); + Object value = args[i]; + if(value != null && StringUtils.isNotBlank(value.toString())) { + map.put(key, value); + } + } + return map; + } } diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java b/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java index 49f89ef..6b28e76 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java +++ b/platform-common/src/main/java/com/lyms/platform/common/result/ResponseCode.java @@ -8,10 +8,12 @@ package com.lyms.platform.common.result; public enum ResponseCode { SUCCESS(0, "成功"), ERROR(500, "系统错误,请联系管理员"), + DATA_ERROR(3001, "数据错误"), PERSON_NOT_FOUND(2001, "用户未查询到或type为空"), PATIENT_NOT_FOUND(2002, "未查询到患者"), + HOSPITAL_TEMP_NOT_UNIQUE(4001, "请选择优惠券模板"), COUPON_TEMP_NOT_FOUND(1006, "医院未绑定模板或无可生成的优惠券类型"), COUPON_IS_CREATED(1007, "该用户已生成优惠券"), diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/EnumUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/EnumUtil.java index 0658305..8e9f45f 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/utils/EnumUtil.java +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/EnumUtil.java @@ -1,5 +1,6 @@ package com.lyms.platform.common.utils; +import com.lyms.platform.common.enums.CouponEnums; import org.apache.commons.beanutils.PropertyUtils; import java.security.InvalidParameterException; @@ -39,7 +40,8 @@ public class EnumUtil { Object value = PropertyUtils.getProperty(ec,valueName); if(key != null && value != null) { Map tempMap = new HashMap<>(); - tempMap.put(key.toString(), value); + tempMap.put("key", key.toString()); + tempMap.put("value", value); list.add(tempMap); } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java index 6cd8dc7..9dc9614 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java @@ -5,6 +5,7 @@ import com.lyms.platform.common.base.BaseController; import com.lyms.platform.common.base.LoginContext; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.operate.web.service.IReportService; +import com.lyms.platform.operate.web.utils.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,6 +14,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.Map; /** * @Author: litao @@ -186,4 +189,36 @@ public class ReportController extends BaseController { // reportService.exportDoctor(startDate, endDate, childBirth, 753, resp); } + + /** + * 优惠券相关统计 + * @param request + * @param startDate 开始时间 + * @param endDate 结束时间 + * @param provinceId 省 + * @param cityId 市 + * @param areaId 区 + * @param hospitalId 医院id + * @param tempId 模板id + * @param couponType 优惠券类型 + * @return + */ + @ResponseBody + @TokenRequired + @RequestMapping(value = "/coupon", method = RequestMethod.GET) + public BaseObjectResponse coupon(HttpServletRequest request, Integer type, Date startDate, Date endDate, + String provinceId, String cityId, String areaId, String hospitalId, String tempId, String couponType) { + Map param = CollectionUtils.createMap("type", type, "userId", getUserId(request), "startDate", startDate, + "endDate", endDate, "hospitalType", hospitalId, "provinceId", provinceId, "cityId", cityId, "areaId", + areaId, "tempId", tempId, "couponType", couponType); + return reportService.couponInfo(param); + } + + @ResponseBody + @TokenRequired + @RequestMapping(value = "/init/coupon", method = RequestMethod.GET) + public BaseObjectResponse initCoupon(HttpServletRequest request) { + return reportService.couponInit(CollectionUtils.createMap("userId", getUserId(request))); + } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java index 1fd4381..9f0146c 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java @@ -4,7 +4,6 @@ import com.lyms.hospitalapi.qhdfy.QhdfyFmService; import com.lyms.hospitalapi.qhdfy.QhdfyHisService; import com.lyms.platform.biz.JdbcUtil; import com.lyms.platform.biz.service.*; -import com.lyms.platform.common.enums.CouponEnums; import com.lyms.platform.common.enums.YnEnums; import com.lyms.platform.common.utils.CompressEncodeingUtil; import com.lyms.platform.common.utils.DateUtil; @@ -1042,7 +1041,7 @@ public class TestController { public String initTicket() { List tickets = mongoTemplate.findAll(PatientCheckTicket.class); for (PatientCheckTicket ticket : tickets) { - ticket.setCoupon(CouponEnums.PRENATAL); +// ticket.setCoupon(CouponEnums.PRENATAL); mongoTemplate.save(ticket); } return "1"; diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java index 61d6346..1db5854 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java @@ -498,7 +498,7 @@ public class BookbuildingFacade { // ticket.setId(areaCode.getAreaCode() + ticketPid + i); ticket.setId(genSequenceIdService.poll(areaCode.getAreaCode())); ticket.setPid(p.getPid()); - ticket.setCoupon(CouponEnums.PRENATAL); +// ticket.setCoupon(CouponEnums.PRENATAL); // patientCheckTicketService.addTicket(ticket); } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java index 7da66a6..bdd82a2 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java @@ -3,6 +3,7 @@ package com.lyms.platform.operate.web.service; import com.lyms.platform.common.result.BaseObjectResponse; import javax.servlet.http.HttpServletResponse; +import java.util.Map; /** * 报表service @@ -65,4 +66,8 @@ public interface IReportService extends IBaseService { void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer userId, HttpServletResponse resp); void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, HttpServletResponse resp); + + BaseObjectResponse couponInfo(Map param); + + BaseObjectResponse couponInit(Map userId); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java index 90949d5..81b77f0 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java @@ -1,16 +1,24 @@ package com.lyms.platform.operate.web.service.impl; import com.lyms.hospitalapi.pojo.ReportModel; +import com.lyms.platform.common.enums.CouponEnums; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.common.result.PageResult; +import com.lyms.platform.common.result.RespBuilder; +import com.lyms.platform.common.result.ResponseCode; +import com.lyms.platform.common.utils.EnumUtil; import com.lyms.platform.operate.web.dao.IReportDao; import com.lyms.platform.operate.web.facade.AutoMatchFacade; import com.lyms.platform.operate.web.service.IReportService; +import com.lyms.platform.operate.web.utils.CollectionUtils; import com.lyms.platform.operate.web.utils.MathUtil; import com.lyms.platform.operate.web.utils.ResponseUtil; import com.lyms.platform.operate.web.utils.SystemDataSource; +import com.lyms.platform.permission.dao.master.CouponMapper; +import com.lyms.platform.pojo.BasicConfig; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; @@ -33,8 +41,29 @@ public class ReportServiceImpl extends BaseServiceImpl implements IReportService @Autowired AutoMatchFacade autoMatchFacade; + @Autowired + private CouponMapper couponMapper; + + @Autowired + private MongoTemplate mongoTemplate; + private static final Map colorMap = new HashMap<>(); + /** + * 用户类型所对应的优惠券类型 + * 1=孕妇 2=儿童 3=产妇 + * 1=孕妇建档 2=孕妇产检 3=产妇建档 4=产妇分娩 5=产妇出院小结 6=产妇产后复查 7=儿童建档 8=儿童保健 + * 1 : (1, 2) + * 2 : (7, 8) + * 3 : (3, 4, 5, 6) + * */ + private static final Map> personCouponMap = new HashMap<>(); + + /** + * 优惠券统计报表key(type + "_" + coupon_order)所对应的header名称 + */ + private static final Map couponReportMap = new HashMap<>(); + @Autowired private SystemDataSource db; @@ -44,6 +73,26 @@ public class ReportServiceImpl extends BaseServiceImpl implements IReportService colorMap.put("橙色预警", "#f17d02"); colorMap.put("红色预警", "#ff6767"); colorMap.put("紫色预警", "#be75ff"); + + personCouponMap.put(1, Arrays.asList(1, 2)); + personCouponMap.put(2, Arrays.asList(7, 8)); + personCouponMap.put(3, Arrays.asList(3, 4, 5, 6)); + + /** 孕妇 */ + couponReportMap.put("1_1", "孕期建档券使用人次"); + couponReportMap.put("2_1", "首次产检券使用人次"); + couponReportMap.put("2_2", "孕中期一券使用人次"); + couponReportMap.put("2_3", "孕中期二券使用人次"); + couponReportMap.put("2_4", "孕晚期一券使用人次"); + couponReportMap.put("2_5", "孕晚期二券使用人次"); + /** 儿童 */ + couponReportMap.put("7_1", "儿童建档券使用人次"); + couponReportMap.put("8_1", "新生儿保健券使用人次"); + couponReportMap.put("8_2", "
儿童保健券(一)
使用人次
"); + couponReportMap.put("8_3", "
儿童保健券(二)
使用人次
"); + couponReportMap.put("8_4", "
儿童保健券(三)
使用人次
"); + couponReportMap.put("8_5", "
儿童保健券(四)
使用人次
"); + couponReportMap.put("8_6", "
儿童保健券(五)
使用人次
"); } @Override @@ -356,6 +405,55 @@ public class ReportServiceImpl extends BaseServiceImpl implements IReportService ResponseUtil.responseExcel(cnames,results, resp); } + @Override + public BaseObjectResponse couponInfo(Map param) { + List hospitalIds = Arrays.asList("216", "245"); /** 模拟根据登陆人id 查询出来的医院 */ + + param.put("hospitalIds", hospitalIds); + param.put("status", 2); + param.put("couponTypes", CollectionUtils.asList((String) param.get("couponTypes"))); + + List> couponReport = couponMapper.findReport(param); /** 优惠券统计详情(发放人数、发放券数、使用人数、使用券数) */ + List> usedInfo = couponMapper.findUsedInfo(param); /** 优惠券使用详情 */ + + if(org.apache.commons.collections.CollectionUtils.isNotEmpty(couponReport) && + org.apache.commons.collections.CollectionUtils.isNotEmpty(usedInfo)) { + if(CollectionUtils.putAll(couponReport, usedInfo, "used_hospital_id", "used_hospital_id")) { + for (Map map : couponReport) { + map.put("province_name", findName(map.get("province_id"))); + map.put("city_name", findName(map.get("city_id"))); + map.put("area_name", findName(map.get("area_id"))); + } + return RespBuilder.buildSuccess("couponReport", couponReport, "couponReportMap", couponReportMap); + } else{ + return RespBuilder.buildErro(ResponseCode.DATA_ERROR); + } + } + return RespBuilder.buildSuccess(); + } + + @Override + public BaseObjectResponse couponInit(Map param) { + List hospitalIds = Arrays.asList("216", "245"); /** 模拟根据登陆人id 查询出来的医院 */ + param.put("hospitalIds", hospitalIds); + return RespBuilder.buildSuccess("coupons", EnumUtil.toJson(CouponEnums.class, "code", "name"), + "hTemp", couponMapper.findHospitals(param)); + } + + public static void main(String[] args) { + System.out.println(EnumUtil.toJson(CouponEnums.class, "code", "name")); + } + + private String findName(Object id) { + if(id != null) { + BasicConfig basicConfig = mongoTemplate.findById(id, BasicConfig.class); + if(basicConfig != null) { + return basicConfig.getName(); + } + } + return null; + } + private String getDoctorInfoSql(String startDate, String endDate, Integer childBirth, Integer number, String name, String hospitalId, List params) { StringBuilder sql = new StringBuilder(); sql.append("SELECT A.NAME, ") diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/CollectionUtils.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/CollectionUtils.java new file mode 100644 index 0000000..17aa6ee --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/CollectionUtils.java @@ -0,0 +1,86 @@ +package com.lyms.platform.operate.web.utils; + +import org.eclipse.jetty.util.StringUtil; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author: litao + * @Date: 2017/5/22 0022 10:44 + * @Version: V1.0 + */ +public class CollectionUtils { + private CollectionUtils(){} + + public static Map createMap(Object ... args){ + Assert.notNull(args, "参数不能为null"); + Assert.isTrue(args.length % 2 == 0, "length必须为偶数"); + + Map map = new HashMap<>(); + for (int i = 0; i < args.length; i++) { + String key = args[i++].toString(); + Object value = args[i]; + if(value != null && StringUtil.isNotBlank(value.toString())) { + map.put(key, value); + } + } + return map; + } + + /** + * 合并两个集合中 key 相同的数据 为一行 + * 以第一个集合为主 + * @param listOne + * @param listTwo + * @param oneKey + * @param twoKey + * @return 是否修改了 + */ + public static boolean putAll(List> listOne, List> listTwo, String oneKey, String twoKey) { + Assert.notNull(listOne); + Assert.notNull(listTwo); + Assert.notNull(oneKey); + Assert.notNull(twoKey); + return getIntersect(listOne, listTwo, oneKey, twoKey); + } + + private static boolean getIntersect(List> listOne, List> listTwo, String oneKey, String twoKey) { + boolean modified = false; + for (Map mapOne : listOne) { + for (Map mapTwo : listTwo) { + if(mapOne.get(oneKey).toString().equals(mapTwo.get(twoKey).toString())) { + putCouponInfo(mapOne, mapTwo); + modified = true; + } + } + } + return modified; + } + + private static void putCouponInfo(Map couponMap, Map couponInfoMap) { + /** key命名为 type + "_" + coupon_order */ + couponMap.put(couponInfoMap.get("type") + "_" + couponInfoMap.get("coupon_order"), couponInfoMap.get("type_used_count")); + } + + + public static List asList(String ids) { + return (List) asList(ids, String.class); + } + + public static List asList(String ids, Class clazz) { + Assert.notNull(ids); + Assert.notNull(clazz); + + List list = new ArrayList<>(); + String[] id = ids.split(","); + for (String s : id) { + list.add((T) s); + } + return list; + } + +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SystemDataSource.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SystemDataSource.java index 971cf9d..793ae18 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SystemDataSource.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/SystemDataSource.java @@ -60,7 +60,7 @@ public class SystemDataSource { dataSource.setTestOnReturn(false); dataSource.setFilters("stat"); - dataSource.init(); +// dataSource.init(); logger.info("init datasource success"); }