package com.pz.web.task; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.common.utils.DateUtils; import com.pz.common.utils.spring.SpringUtils; import com.pz.merchant.domain.Company; import com.pz.merchant.domain.Employees; import com.pz.merchant.domain.EmployeesDivide; import com.pz.merchant.mapper.CompanyMapper; import com.pz.merchant.mapper.EmployeesDivideMapper; import com.pz.merchant.mapper.EmployeesMapper; import com.pz.merchant.service.ISonOrderService; import com.pz.system.domain.*; import com.pz.system.mapper.*; import com.pz.system.service.impl.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.formula.functions.T; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * 每天12点新增订单数据 */ @Slf4j @EnableScheduling @Component @RequiredArgsConstructor public class InsertTestOrderTask { private final BusinessMapper businessMapper; private final TotalOrderMapper totalOrderMapper; private final YypzOrderMapper yypzOrderMapper; private final DbghOrderMapper dbghOrderMapper; private final DbwzOrderMapper dbwzOrderMapper; private final ZyphOrderMapper zyphOrderMapper; private final ZqghOrderMapper zqghOrderMapper; private final DbmyOrderMapper dbmyOrderMapper; private final StoreOrderMapper storeOrderMapper; private final ServicesMapper servicesMapper; private final CompanyMapper companyMapper; private final EmployeesMapper employeesMapper; private final HospitalMapper hospitalMapper; private final UserVsitorMapper userVsitorMapper; private final EmployeesDivideMapper employeesDivideMapper; private final FalseDataMapper falseDataMapper; private final DepartmentMapper departmentMapper; public static List<Integer> businessIds = Arrays.asList(1, 2, 3, 4, 5, 6); public static Map<Integer, Integer> orderNumMap = new HashMap<>(); static { // //上海 // orderNumMap.put(5, 53); //北京 orderNumMap.put(15, 50); // //杭州 // orderNumMap.put(14, 48); //合肥 orderNumMap.put(17, 32); // //长沙 // orderNumMap.put(18, 38); //贵阳 orderNumMap.put(19, 25); //西安 orderNumMap.put(16, 27); } @Scheduled(cron = "0 0 1 * * ?") // 凌晨12点执行 @Transactional public void insertUser() { Random random = new Random(); // 生成 30 到 50 的随机整数 int randomNumber = random.nextInt(20) + 30; List<FalseData> falseData1 = falseDataMapper.selectList(); FalseData falseData = new FalseData(); falseData.setId(1L); falseData.setAdminToday((long) randomNumber); falseData.setAdminSeven(falseData1.get(0).getAdminSeven() + randomNumber); falseData.setAdminThirty(falseData1.get(0).getAdminThirty() + randomNumber); falseData.setAdminSum(falseData1.get(0).getAdminSum() + randomNumber); // falseData.setCompanyToday((long) randomNumber); // falseData.setCompanySeven(falseData1.get(0).getCompanySeven() + randomNumber); // falseData.setCompanyThirty(falseData1.get(0).getCompanyThirty() + randomNumber); // falseData.setCompanySum(falseData1.get(0).getCompanySum() + randomNumber); falseDataMapper.updateById(falseData); // List<Company> companies = companyMapper.selectList(); // for (Company company : companies) { // FalseData falseData2 = falseDataMapper.selectOne(new LambdaQueryWrapper<FalseData>().eq(FalseData::getCompanyId, company.getId())); // if (null == falseData2) { // continue; // } // falseData2.setId(1L); // falseData2.setAdminToday((long) randomNumber); // falseData2.setAdminSeven(falseData2.getCompanySeven() + randomNumber1); // falseData2.setAdminThirty(falseData2.getAdminThirty() + randomNumber1); // falseData2.setAdminSum(falseData2.getAdminSum() + randomNumber1); // falseDataMapper.updateById(falseData2); // } } @Scheduled(cron = "0 0 0 * * ?") // 凌晨12点执行 @Transactional public void insertOrder() throws InterruptedException { // 就诊人员 List<UserVsitor> userVsitors = userVsitorMapper.selectList(Wrappers.<UserVsitor>lambdaQuery().orderByDesc(UserVsitor::getId).last("limit 50")); // 查询固定机构 List<Company> companies = companyMapper.selectList(Wrappers.<Company>lambdaQuery().in(Company::getId, 5, 14, 15, 16, 17, 18, 19)); // 加入线程池并发执行 ExecutorService executorService = Executors.newFixedThreadPool(10); for (Company company : companies) { List<Employees> employees = employeesMapper.selectList(Wrappers.<Employees>lambdaQuery().eq(Employees::getCompanyId, company.getId()).last("limit 10")); Employees element = getRandomElement(employees); executorService.submit(() -> { // 每日单量 Integer num = orderNumMap.get(company.getId()); for (int i = 0; i <= num; i++) { //接单人员 UserVsitor vsitor = getRandomElement(userVsitors); //随机业务 Integer businessId = getRandomElement(businessIds); //获取服务价格 List<Services> services = servicesMapper.selectList(Wrappers.<Services>lambdaQuery().eq(Services::getBid, businessId).eq(Services::getCityId, company.getCityId())); //随机服务 Services service = getRandomElement(services); Long orderId = saveTotalOrder(businessId, element.getId(), company.getCityId().intValue(), company.getId(), service); List<Hospital> hospitals = hospitalMapper.selectList(Wrappers.<Hospital>lambdaQuery().eq(Hospital::getCityId, company.getCityId()).last("limit 50")); //随机医院 Hospital hospital = getRandomElement(hospitals); //随机科室 List<Department> departments = departmentMapper.selectList(); Department randomElement = getRandomElement(departments); //新增业务 randomOrder(businessId, orderId.intValue(), 2, hospital.getId(), vsitor.getId(), element, randomElement.getTitle()); } }); } executorService.shutdown(); executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } public void randomOrder(Integer businessId, Integer orderId, Integer status, Integer hid, Integer vid, Employees element, String title) { Date dateStr = randomTime(); Date date = subtractMinutes(dateStr, 31); switch (businessId) { case 0: StoreOrder storeOrder = new StoreOrder(); storeOrder.setOrderId(orderId); Integer storeId = RandomUtil.randomInt(1, 5); storeOrder.setGoodsId(storeId); Integer addressId = RandomUtil.randomInt(1, 9); storeOrder.setAddressId(addressId); storeOrder.setStatus(status); storeOrder.setLogistics("顺丰速运"); storeOrder.setLogisticsCode("SF" + RandomUtil.randomNumbers(16)); storeOrder.setCreateTime(date); storeOrderMapper.insert(storeOrder); break; case 1: YypzOrder yypzOrder = new YypzOrder(); yypzOrder.setOrderId(orderId.intValue()); yypzOrder.setPhone(generateRandomPhoneNumber()); yypzOrder.setStatus(status); yypzOrder.setVisitTime(dateStr); yypzOrder.setHid(hid); yypzOrder.setDidName(title); yypzOrder.setVisitor(vid); yypzOrder.setCreateTime(date); yypzOrderMapper.insert(yypzOrder); break; case 2: DbghOrder dbghOrder = new DbghOrder(); dbghOrder.setOrderId(orderId.intValue()); dbghOrder.setHid(hid); dbghOrder.setStatus(status); dbghOrder.setVisitTime(dateStr); dbghOrder.setVisitor(vid); dbghOrder.setCreateTime(date); dbghOrder.setDidName(title); dbghOrderMapper.insert(dbghOrder); break; case 3: DbwzOrder dbwzOrder = new DbwzOrder(); dbwzOrder.setOrderId(orderId.intValue()); dbwzOrder.setStatus(status); dbwzOrder.setVisitTime(dateStr); dbwzOrder.setChiefComplaint("电话沟通"); dbwzOrder.setHistoryOfPresentIllness("电话沟通"); dbwzOrder.setLastMedicalTreatmentSituation("电话沟通"); dbwzOrder.setPastHistory("电话沟通"); dbwzOrder.setPostTreatmentCondition("电话沟通"); dbwzOrder.setRelatedReports("电话沟通"); dbwzOrder.setServiceRequirements("电话沟通"); dbwzOrder.setDidName("电话沟通"); dbwzOrder.setVisitor(vid); dbwzOrder.setCreateTime(date); dbwzOrderMapper.insert(dbwzOrder); break; case 4: ZyphOrder zyphOrder = new ZyphOrder(); zyphOrder.setOrderId(orderId.intValue()); zyphOrder.setHid(hid); zyphOrder.setStatus(status); zyphOrder.setVisitor(vid); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String formattedDate = sdf.format(date); String format = sdf.format(dateStr); zyphOrder.setStartDay(formattedDate); zyphOrder.setEndDay(format); zyphOrder.setOverTime(dateStr); zyphOrder.setDidName(title); zyphOrder.setCreateTime(date); zyphOrderMapper.insert(zyphOrder); break; case 5: DbmyOrder dbmyOrder = new DbmyOrder(); dbmyOrder.setOrderId(orderId.intValue()); dbmyOrder.setPhone(generateRandomPhoneNumber()); dbmyOrder.setAddress("***"); dbmyOrder.setAddressInfo("***"); dbmyOrder.setPzShr(element.getName()); dbmyOrder.setPzShPhone(element.getPhone()); dbmyOrder.setCreateTime(date); dbmyOrder.setIsRefrigerate(RandomUtil.randomInt(0, 2)); dbmyOrderMapper.insert(dbmyOrder); break; case 6: ZqghOrder zqghOrder = new ZqghOrder(); zqghOrder.setOrderId(orderId.intValue()); zqghOrder.setHid(hid); zqghOrder.setStatus(status); zqghOrder.setOverTime(dateStr); zqghOrder.setDidName(title); zqghOrder.setDoctorId(1); zqghOrder.setCreateTime(date); zqghOrderMapper.insert(zqghOrder); break; default: break; } } public Date randomTime() { Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 9); // 设置开始时间为早上9点 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); long startMillis = calendar.getTimeInMillis(); // 获取开始时间的毫秒数 calendar.set(Calendar.HOUR_OF_DAY, 18); // 设置结束时间为晚上6点 long endMillis = calendar.getTimeInMillis(); // 获取结束时间的毫秒数 long randomMillis = startMillis + (long) (Math.random() * (endMillis - startMillis)); // 生成随机的时间毫秒数 Date randomDate = new Date(randomMillis); // 转换为Date类型 return randomDate; } public Date subtractMinutes(Date date, int minutes) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MINUTE, -minutes); return calendar.getTime(); } public Long saveTotalOrder(Integer businessId, Integer emId, Integer cityId, Integer companyId, Services services) { //创建主订单 TotalOrder totalOrder = new TotalOrder(); // Integer status = RandomUtil.randomInt(0, 3); totalOrder.setStatus(2); // Integer suborderStatus = RandomUtil.randomInt(0, 3); totalOrder.setSuborderStatus(2); totalOrder.setPayMoney(services.getPrice().doubleValue()); totalOrder.setIsSatisfaction(1); totalOrder.setBusinessId(businessId); totalOrder.setFinishTime(randomTime()); totalOrder.setServiceId(services.getId()); totalOrder.setCityId(cityId); totalOrder.setOrderSn(RandomUtil.randomNumbers(21)); totalOrder.setEmId(emId); totalOrderMapper.insert(totalOrder); //添加机构收益 EmployeesDivide employeesDivide = new EmployeesDivide(); employeesDivide.setOrderId(totalOrder.getId().intValue()); employeesDivide.setOrderPrice(totalOrder.getPayMoney() + ""); double money = 0; double fenmo = (double) 20 / 100; double v = totalOrder.getPayMoney() * fenmo; money = totalOrder.getPayMoney() - v; Company company = companyMapper.selectById(companyId); company.setTotalRevenue((Double.parseDouble(company.getTotalRevenue()) + money) + ""); company.setBalance((Double.parseDouble(company.getBalance()) + money) + ""); employeesDivide.setCompanyId(companyId); companyMapper.updateById(company); employeesDivide.setDividePrice(money + ""); employeesDivideMapper.insert(employeesDivide); return totalOrder.getId(); } public static String generateRandomPhoneNumber() { StringBuilder sb = new StringBuilder(); Random random = new Random(); // 手机号码前三位 String[] prefixArray = {"130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "150", "151", "152", "153", "155", "156", "157", "158", "159", "180", "181", "182", "183", "185", "186", "187", "188", "189"}; String prefix = prefixArray[random.nextInt(prefixArray.length)]; sb.append(prefix); // 手机号码后八位 for (int i = 0; i < 8; i++) { sb.append(random.nextInt(10)); } return sb.toString(); } public static <T> T getRandomElement(List<T> list) { if (CollectionUtils.isEmpty(list)) { return null; } Random random = new Random(); int index = random.nextInt(list.size()); return list.get(index); } public static void main(String[] args) { } }