From db8795116125bb6d60dec7e9c28dbd553cc9239c Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 11:26:27 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/DlRepairTicketsController.java | 14 +++ .../service/DlRepairTicketsService.java | 9 ++ .../impl/DlRepairTicketsServiceImpl.java | 111 ++++++++++++++---- 3 files changed, 114 insertions(+), 20 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java index 70273940..93cc3124 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java @@ -334,5 +334,19 @@ public class DlRepairTicketsController { dlRepairTicketsService.addItems(respVO); return CommonResult.ok(); } + + /** + * 修改工单主表,只是主表 + * + * @author 小李 + * @date 10:25 2024/10/30 + * @param respVO 请求对象 + **/ + @PostMapping("/updateTicket") + @Operation(summary = "修改工单主表,只是主表") + public CommonResult updateTicket(@RequestBody DlRepairTicketsRespVO respVO) { + dlRepairTicketsService.updateTicket(respVO); + return CommonResult.ok(); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java index bcf014d6..a29750f8 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java @@ -217,4 +217,13 @@ public interface DlRepairTicketsService extends IService { * @date 16:35 2024/10/26 **/ void autoInspection(); + + /** + * 修改工单主表,只是主表 + * + * @author 小李 + * @date 10:25 2024/10/30 + * @param respVO 请求对象 + **/ + void updateTicket(DlRepairTicketsRespVO respVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 1f789bf0..81c65c16 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -6,6 +6,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.common.*; import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; import cn.iocoder.yudao.module.base.entity.RepairWorker; import cn.iocoder.yudao.module.base.service.RepairRecordsService; import cn.iocoder.yudao.module.base.service.RepairWorkerService; @@ -13,6 +15,8 @@ import cn.iocoder.yudao.module.base.vo.RepairRecordsPageReqVO; import cn.iocoder.yudao.module.base.vo.RepairRecordsRespVO; import cn.iocoder.yudao.module.booking.entity.DlRepairBooking; import cn.iocoder.yudao.module.booking.service.DlRepairBookingService; +import cn.iocoder.yudao.module.company.entity.Company; +import cn.iocoder.yudao.module.company.service.CompanyService; import cn.iocoder.yudao.module.conf.entity.BaseType; import cn.iocoder.yudao.module.conf.service.BaseTypeService; import cn.iocoder.yudao.module.custom.entity.*; @@ -170,6 +174,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl dataList = dictDataApi.getDictDataList(DICT_REPAIR_PART_DISPOSAL); @@ -526,10 +533,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl item.getItemPrice().multiply(BigDecimal.valueOf(item.getItemCount()))).reduce(BigDecimal.ZERO, BigDecimal::add); + // 加上特殊费用 + // 管理费 + BigDecimal managerMoney = ObjectUtil.isNotEmpty(tickets.getManagerMoney()) ? tickets.getManagerMoney() : new BigDecimal("0"); + // 救援费 + BigDecimal rescueMoney = ObjectUtil.isNotEmpty(tickets.getRescueMoney()) ? tickets.getRescueMoney() : new BigDecimal("0"); + // 三包费 + BigDecimal threePackMoney = ObjectUtil.isNotEmpty(tickets.getThreePackMoney()) ? tickets.getThreePackMoney() : new BigDecimal("0"); + // 定损费 + BigDecimal confirmFaultMoney = ObjectUtil.isNotEmpty(tickets.getConfirmFaultMoney()) ? tickets.getConfirmFaultMoney() : new BigDecimal("0"); + matTotalCost = matTotalCost.add(managerMoney).add(rescueMoney).add(threePackMoney).add(confirmFaultMoney); params.put("matTotalCost", matTotalCost); // 应收费目前是工单的打折后的总价 params.put("allCost", tickets.getTotalPrice()); @@ -661,14 +677,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl companies = companyService.list(new LambdaQueryWrapper().in(Company::getTenantId, tenantId)); + // 得到属于当前业务的公司 + Company company = companies.stream().filter(item -> { + String[] service = item.getServiceCodes().split(","); + for (String s : service) { + if (s.equals("weixiu")) { + return true; + } + } + return false; + }).findFirst().orElse(null); + String corporation = ""; + String bank = ""; + String bankAddress = ""; + String account = ""; + if (company != null){ + corporation = company.getCorpName(); + bankAddress = company.getAddress(); + } // 取不到的先给未知 - params.put("corporation", "未知"); - params.put("bank", "未知"); - params.put("bankAddress", "未知"); - params.put("account", "未知"); + params.put("corporation", corporation); + // todo + params.put("bank", bank); + params.put("bankAddress", bankAddress); + // todo + params.put("account", account); Configure config = configureBuilder.build(); try { @@ -1276,6 +1313,20 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl 0; } @@ -1392,6 +1443,26 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl Date: Wed, 30 Oct 2024 15:37:40 +0800 Subject: [PATCH 2/8] 1 --- .../mapper/custom/CustomerMainMapper.xml | 8 +-- .../impl/DlRepairTicketsServiceImpl.java | 13 ++++- .../tickets/vo/DlRepairTicketsReqVO.java | 6 +++ .../tickets/vo/DlRepairTicketsRespVO.java | 2 + .../mapper/tickets/DlRepairTicketsMapper.xml | 50 +++++++++++++------ 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/dl-module-base/src/main/resources/mapper/custom/CustomerMainMapper.xml b/dl-module-base/src/main/resources/mapper/custom/CustomerMainMapper.xml index 91712365..94bd20ed 100644 --- a/dl-module-base/src/main/resources/mapper/custom/CustomerMainMapper.xml +++ b/dl-module-base/src/main/resources/mapper/custom/CustomerMainMapper.xml @@ -59,9 +59,11 @@ AND main.phone_number LIKE concat('%',#{entity.phoneNumber},'%') - AND main.phone_number = #{entity.phoneOrCar} - OR car.license_number = #{entity.phoneOrCar} - OR car.vin = #{entity.phoneOrCar} + AND ( + main.phone_number LIKE CONCAT('%',#{entity.phoneOrCar},'%') + OR car.license_number LIKE CONCAT('%',#{entity.phoneOrCar},'%') + OR car.vin LIKE CONCAT('%',#{entity.phoneOrCar},'%') + ) GROUP BY main.id diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 1f789bf0..d16cbefd 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -742,14 +742,25 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl().eq(RepairWorker::getUserId, SecurityFrameworkUtils.getLoginUserId())); // 查自己班组的员工信息 List list = repairWorkerService.list(new LambdaQueryWrapper().eq(RepairWorker::getWorkType, one.getWorkType())); // 所有的员工信息 - List userIds = list.stream().map(RepairWorker::getUserId).collect(Collectors.toList()); + String userIdsStr = ""; + List userIds = new ArrayList<>(); + for (RepairWorker worker:list){ + userIds.add(worker.getUserId()); + if("".equals(userIdsStr)){ + userIdsStr = String.valueOf(worker.getUserId()); + }else{ + userIdsStr = ","+worker.getUserId(); + } + } repairTicketsReqVO.setUserIds(userIds); + repairTicketsReqVO.setUserIdsStr(userIdsStr); } else { //普通维修工 repairTicketsReqVO.setUserIds(Collections.singletonList(SecurityFrameworkUtils.getLoginUserId())); diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java index c1e3b341..225a51c8 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java @@ -25,6 +25,12 @@ public class DlRepairTicketsReqVO extends DlRepairTickets { /** 工单中项目指定的施工人员的ids */ private List userIds; + /** 工单中项目指定的施工人员的ids字符串拼接 */ + private String userIdsStr; + /** 查询类型(waiting 待处理的 | all 所有数据) */ private String selectType; + + /** 人员角色code */ + private String roleCode; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java index b4057bf7..7c82fee1 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java @@ -58,5 +58,7 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 如果是完成并移交下一班组,就有移交给了那一个班组 */ private String nextName; + /** 维修班组长是否可以重新派工--当前施工人是自己或者本班组内的人员 */ + private Boolean canOperate; } diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml index 70a97621..349d4b4c 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -106,6 +106,7 @@ + @@ -208,7 +209,13 @@ @@ -311,7 +331,7 @@ -- 维修工或维修厂长查所有的就是维修人是自己的或者是自己班组内的 -- and ( - find_in_set(#{item}, drt.now_repair_id) > 0 + find_in_set(#{item}, drti.repair_ids) > 0 ) From 0f51329be6644a82a0f0772248c63f6900de0b92 Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 16:13:55 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dl-module-base/pom.xml | 12 +++++ .../yudao/module/company/entity/Company.java | 5 +- .../iocoder/yudao/util/CreateQRCodeUtil.java | 43 ++++++++++++++++++ .../impl/DlRepairTicketsServiceImpl.java | 19 ++++++-- .../resources/templates/ticketTemplate.docx | Bin 16880 -> 17279 bytes pom.xml | 1 + 6 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/util/CreateQRCodeUtil.java diff --git a/dl-module-base/pom.xml b/dl-module-base/pom.xml index ffce3d1c..8d0bfd04 100644 --- a/dl-module-base/pom.xml +++ b/dl-module-base/pom.xml @@ -16,6 +16,18 @@ + + + com.google.zxing + core + ${zxing.version} + + + com.google.zxing + javase + ${zxing.version} + + com.blingblingbang diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java index 33e6f43d..08d61e7d 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java @@ -66,5 +66,8 @@ public class Company extends TenantBaseDO { private String loginAccount ; /** 关联的服务编号(多个以英文逗号隔开)(实际就是这个企业的用户登录后有哪些系统权限) */ private String serviceCodes ; - + /** 开户行 */ + private String bankAccount; + /** 收款账号 */ + private String account; } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/util/CreateQRCodeUtil.java b/dl-module-base/src/main/java/cn/iocoder/yudao/util/CreateQRCodeUtil.java new file mode 100644 index 00000000..7d95dd0f --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/util/CreateQRCodeUtil.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.util; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * 用于生成二维码的工具类 + * + * @author 小李 + * @date 14:56 2024/10/30 +**/ +public class CreateQRCodeUtil { + + /** + * 生成二维码的方法 + * + * @author 小李 + * @date 15:00 2024/10/30 + * @param text 二维码的内容 + * @param width 二维码的宽度 + * @param height 二维码的高度 + **/ + public static byte[] GenerateQRCode(String text, int width, int height) { + try { + BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height); + + try (ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream()) { + MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream); + return pngOutputStream.toByteArray(); + } + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } +} diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 81c65c16..6c61f3bb 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -53,6 +53,7 @@ import cn.iocoder.yudao.module.tickets.service.DlTicketWaresService; import cn.iocoder.yudao.module.tickets.service.DlTwItemService; import cn.iocoder.yudao.module.tickets.tools.WordUtil; import cn.iocoder.yudao.module.tickets.vo.*; +import cn.iocoder.yudao.util.CreateQRCodeUtil; import cn.iocoder.yudao.util.SendSmsUtil; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -63,6 +64,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; +import com.deepoove.poi.data.PictureRenderData; +import com.deepoove.poi.data.PictureType; import com.deepoove.poi.plugin.table.HackLoopTableRenderPolicy; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; @@ -692,11 +695,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl().eq(RepairOrderInfo::getGoodsId, tickets.getId())); if (ObjectUtil.isNotEmpty(orderInfo)) { - if (ObjectUtil.isNotEmpty(orderInfo.getPayTime())) { - params.put("settleDate", date.format(orderInfo.getPayTime())); - } // 付款情况 // 先取支付字典 List payTypes = dictDataApi.getDictDataList(DICT_REPAIR_PAY_TYPE); @@ -731,15 +733,22 @@ public class DlRepairTicketsServiceImpl extends ServiceImplZ|q`gYUj-0 zZfkR*s~x{OnCP=n_JXQ>ZHLiINV9u^#c!y7wsT81E)b5q!K~I$vJY z_P8_q_AD>h+OAhSHj$=zrxp^@+UC=uC;)EV^N73wvp2PyE+F0Aq^Y{vEdIREV_XHZ zdm8uAq+2K37T3Yxb>DXZ_))qXy2-o6xHr;4ZTMld`k@~yw{eptjc8)DY3=c%%=NgF zATSVxt+&&d=-`UbzWhYLs<*uQ)#9?PNRJ&RV!b~k@@&7=P3!j!iMRW&LZwT>1qi^dC zas=zpBlACM@3pj@#%ZSWb={gO#HM)XW~9hDn_5K}WR`QUaP}fPv8*71p#gdNJI04_9d=ayWrWu0*TH1VkgA>?#l!1t@tUB~ny9 z2yIk@mROrJ(RhHZyecC{t%TrMqn4xyH3GXxUZ^lt0?MRqF9$ZQT|P@#KBh#uNazi#EtVOuSCreep|(!^jbn>CLmU>>!8Y%1l9F^mvdzhT%s zi?#opG)Bm#xcC;SLyqDfBkcGMEX=~0mbKnSAK!~H z`YU@m((aK5APr&jd$LQJvBfoIeb#L(Z=7W;va)kOR7$d$s<%Fz;aS*M8?~uywN@SH zES7w}W(!>mQqe2xG+o7MtHYJMinrB>I_|KIw|e)x!79Lfh!d-Ar9v@jqhq6EQ&6dC zBLRNuJoAN*>)nv)ubzG6p|T&@>AMmp754@ZxQIPt0E!N_2En$~g(cK->{`j@J}b3SG92qPC8|Gr1m=T2nz zy-naAVGnK7Csn-_w_1m}RTP2P25A==S2YP&HzVWDVEVgsS&JcCx!wk${$NA_<0Og0M9uKAqiY!eK=I0P$D@CQ{hZ>_(Cg?94B(yCTYeB=Dyy+CCJ z{k3i!K}thjx3Y%ENCVk=qygh6w>aY^S+N0=vS{qA0DP3)B7d6ESXsPCYQGT0BEo#! z7ryDa!&}ZNEzj(GEkwKf^R1=ZpnZiHSgj3bAY#QM+L@(SJyq3GYs$y_ek*_B?DY1n zlgsN;G{ea9W;6oP#rgc(@lU&_t<(JI^G3VpLh!Xsj?SgR$x|$n0+OoUUTh9h9_|>% zm^DvF8peRPfJM-!v!uO@^SehKnf7nIlMt@!-qlG}x=+daJP3!}uSe=T<-tV$)}$l2 zfC@vBJN$JB&v$`67PwOX!6%gFVx7c+FotL)y9*rcc*?hef@XA^UQ2#qz8)3j{uvaY zd3hOdytrGRd=1WAhpjw)B2VBdVDRUP+$zDAvofD49Wxg;cHjj2P+1m$?>wx{&xtqQ zn792{(0xu{ z#TPfo=T0^suAMm$HSLz5snnPO(ji|g17X_*<_|%8DRMkW;hlO#%1p4LM6{zPOU_vc zXQa(e=c|2P{8FLDGnbLMX4#Pus;s1ZJPV@U%eN+nk8S%-Jr!w@^lbtFG8#WrbmlNS zcYkXIaB=tHVg3Y)h8l1iyNn z?h_8Ju&|g-Yk<`>boXs=bj*BlbzAVSV!=G>|{ zbQyRnNP{pQYvAI<^>`9_#(=PWX)@lJMq%3It808kwTbl}w_3i{YlWRhErJ3;*vLg$ z7_NtF6q|Ye%Tqp(AN^*YrjRc4iAvu1r;DA=+T4tVvZ>AddXe$m*uMY3iit3b2OU|c zaBOI(KS|lk=Gga_;>szX)fP|IDH3SaKL4_v!g(`GR#$MH=^X8RAd1{3yQXMa3>g;$ zDBx3`oIe$p;db)0DBQ#F4>Ve7qy#peYu1e=I_NjgF)}JZRkMa7&*fUo`mRle1{H13 zF!qCZ?nf29yjQd-NIk5SkZ>~zPIxPpLddUW5=NS0O5*B@T2}KDR2pxy$$g8fPI$<8KE3w%(B#Zuk=Obmh^j$D zvbL3!d4ZQY-)^QWGugBX5N)>8d5uK7^OvEeb}I(%1g$n+&nM6A3l%AJC-lg#$GxMosP{k-3NKJn3`&m>eumWf4o{FP<4&y)xwrCEIUtg7g}I zFUfJ!OAA>|js7;qoK|Ik+a$u~caW&p)xQx9stft3LO;uMv`_F`05^3p_T<1J4^4}> z3%3MF8e90GvMdkR!seQf()E%35Dak3Jp{Y($s&YJ!sjwCpHz1~H zQxY+lHW2wcyoX#>Y3Keg!A6|Nh(CT(99aOyYQd0b7GbZqV&?4Ko0L2lIiJC6S4JR; zX%M85h9Z_wKnw_Pv^@vOt^^D{T1r3l#7p@ODkK3m^)80LBwtjiXPd9@rrT~!7 zA|V-w(m@H+NxS!dAJXiz=5hM`cu4AAmOLaxc#G+&hG`0?6k%Zc{?PY*=6jNBQKl?K z$3EjG5})CB+?GoW>qilXRt-PNoXMU8Ggb zME)}4g$v`(GNhzrsgFuF328wewqTXhUSy>EE6mJZBDE(w+o#e@5ptP#PjWcl(`^ewlI~aFwcwCy0UUE)f z0;1(|UI~mC_NdJi3l9xycFz2&I|TAOlwHQWTuH1+dNOTHA3;cW8m0$S;8HEu^(wNgfNPR$CwreXdPuzN z&wAA1o|Hrty|6E2pVem3kOUF|CQ6Gd9jhdAlSz(vv4h=^6uQ=aG!a!%B?_tFof?!{ zwtMeN%9uD1bv5N+J?i?Fa}tg_|Dz-aRIdLsbkGIv{#dr*M>U{WXC^?uuxAq*CGNk-jv9zj?6Aby;O={I$!zc?WHoZ^^ z%}o=kM_nboEz?f}kwQAXW>7Xt1Cx7j=_bt1Wpw0_% z?DlJNgEy(QfB6_WWFyEmGJb7P|vD$orAtGDYmJyW51DAp??~1}$A+B#Gx6XD{ zZZj?Jp~5v33JXQEc1M5-igYpJRDNZJC@HeCck(CkmFX-p<+A=KqbKXyN~t>3VNnm|)t20v(!d_Hr1*IE z9yhiI0p6T2DV1CgK<#`hc}W+9+Z6umXZ1OziR+m+peiwRc2~TQk@Xvm&z0=j z>^;daTGZ3#FjR?oZ@XW?Rfd4;`T2m~H+%V+ZDIbU0h69*2P(D?PAuCA19yG=4%mri zuxNxsj^T1U6JsajPzs=1^^EDBnq1%1|Gh=)5ti*r8e0(DoJrZt@g(jc1> zddA`QG?$8zF%9x3{IAugc7@&^C+S(1&zT z8ird-qQ{6(69;!IcVf}%k!iVC#!N8gC0?TR0x^+Cz*@vsR9f_Lk>r3csgVYjSQk24 zFoYAq?X;JFZBFQ5FKZpmug89`VQR`lCT^X6Q zk@JgIP|Y}J|AoO@{;j@`#oNBv@qW``=RyS3hG~Y$vwPj;XE{IL?Dgam{gG<+j|Fve;H_`+?0eoL@d{KI!kIaSmq#i(H&^3L z6zoQF-J>s&)ch8wP>Q)}j7P+J2A2#Fy@!{kx9p1FXsm$2laG8c>#c4`?f5sbD7!8C zG_QYqyPV!3jv_k2j-LE6FQc}sa?&cT#ZI0L&NWuoKxU{NJt;)pXj^-v*e1Aj7W z8k}5O7k6x7F4`CW8< zfk!s>>52Cn!|JcX;lF6R5t!~NkbmkqI1L79jFMNb%ZjYro#s#Ho0 zVTT!7STP%$_DhZ8@}krF-1W=9pJyF-W9xJa?QxfVI#XBIje(@ zijEJy_+-?#vrsdwJ`uTGG`>#7>9!obkzk~;*Pms+0-*RG`0wkha4%s2+lyii2v`uP z`u%@2&YVo0oh|Lmo&IW^HE66mt#Tj%8|$yI+1UqLc><^DZL{X-43bSemQ^14lq+WR zp*(S6J7>3DsB^)m4JQnTwv5by#2|kV9OT1I(@-5QKN`cQa%|)4L}sE`8e{HCj_}J< zS)R)wa#G-H;*P(n39|qi^Xuu&l;BHiHX<2iO(=RvNq_q|_D*HOjTaBra#DguyAgXS zNQYI=2tM13m7aNn{f5HWG?G$x+JCg~Jzfy+*?i4F^VWR3Iy1H9V5)(2>6d+*jv~B6 z00#aw!<#oY#Z*?3X8DY3uK@HxgR-#!`+MV+I2eFvCQRUaUL_?OHQHQFA7qVcGv^bO z;v3?lRB%c{CnXUwWyX~#pB=pA42$yY^6z*eZ!8m9V_TVT*_#}DpJV^N8PCHj6{TyD z8G6KtpAASQx+@9JBCu{1G#gL#Z}*5rFhO=LA*S>xlHO(6=#*JU%P)-^z_737GAo#o z&;wkB4oc1xvYzR~4onPSb!V`K+S@j~9}}0Kjg*L59gL%8Axl%oxyJ669N-^ zjrBU*hjE**7~3`<5r!*;_~Gf7-g6Sn-hLv?-IF7-cIQgcZcQQ%31C?i;d)zx^N^&y zO8POOrl-P5gC}R?MzF}atN2r~#TNCeza6w>O^jboGXi%{8>*~us{*Hg!3d>5%|7*; zXyWHAsO?ris4a(n0XB06O;=Prt{R}1@{rHnE2Bz7PNn99TsGjHAcQ0Pw05U&-@myP zC__^DF6l}EEwNSlF%U}i6{Y=)urW>#ant4o5=r991OM7a`e#`se^RN7?l-}7FuEk7 zmcC-MRXgJN8yK&kkC5pzUOfqWz3y;<$=>ScjzHEoSfb3Vjp7VbVrHD;Jr95;u|jF! z{*xTa`O-_ek=teJ^wSiem3<~~R(1XpYw@cQKy&VPcL}o&FoenLhn*H*-8$&{tmzKm zIKLbiO`m%;60_Moe7%IQTC9mQ>`(eoXm~&on1yD%FFGv~9-w#h%hYI99+S|YZs_`V z$PT`rEAe|gIgCTJG3OJKc`|@?7is>LmV)ECfH7SjeU<4u$TGG&+*Ulif7s=5_Ypy| zeRzIlKSk`<)3^Rmf=V}nS!5f24ENAd@C5tm+;v09USZGzB#s_&fj9wUO~bS+|I~u# zQ2KIg`AyV$8)+C=!m6NC&CIOTrvPkV#@%UYiN1lTTxsiPsU<;+sR1ORTi7CEnB03O z`h*1x-$%KL3}ps>OC4syu$3YIko)CB;3pRIMvm(IC5{_`5R9?KgVj5GZ$2kwbx)k_ z;ooK}6;gDpj$lsO+V)R#WA|A&mL2g0L8iy1N+wh*_XPqh?`#Vt%!iR1JYqzm26>=b zScl}CQ-1|0l+k5E$KnB+QMY_w(^g6=FTtS%&9}8;>8bb}b!3syRBP7ca%^h(-N*{N zmPelukW0LxsN56?pn@>1S^Co+Vt1DD`#JLGq;`b9lgv6rYG88nh7p(qwtl|*LFbk^*KM?-%S?UH;Lp)U@GDP~9<~&r zsE!qGFzXJr{bm*z;eTogh$=aiV7#;xAf4ZJEltCl;oJ_tOg^P(J$uf^@+!rrb__gj zJswi~;Kave!?zJFPFURJYv-~lQ z^+yKg1ffM$o^3AXKGWf84m&|oSf`n2&n*Su+1o|xB4+`7SP!S6P0JAS7iywnpkWtx zjSpMePU~OKfP)|55fS7Ho9-hpBffBw+jFO|N=v>+&qDx9Tb{RsyZ-R#EoU0g5uDHY zHkE7cO}3^NR&AqrZ7oLXmmKWqf={jQazIn!E6^5nsLV3I-MGX^Z?;lK-Qn8?Th4$? zzxaFom7a|zll;W_Lf;|@N+4_|^t@o9U(ApT-WR}F`SGPc>VRzZv8}7M55U)dd-vCx z3G}$>A^9VKKxw)l5bD48nVg(GY)t=IEHfq?cbd_M&PzvmYn<LX_a`MRIZ8q zJA}*2tY1W^jN%N0tW2i3n+P0-Nf%X6xGA5Y()nbmi0#oq6sDuH3Knp!8W1)7 zepHrTcQ3|iQ2HgGaHj^p1JmW}!b0^i;&g4qf6@rSlXfB~QOUXx3cmcE9!z?ejjo41 z#!l@F>^)_Xa3RRLZ8qeg@6B}Avs*QA#%XceSW}i%Zj;RtlGH%hlc7|9AKwPNM_PQG ztY+_M@z&3?v+0~cxDN=~6B-gz9$fO4YF1CVIiVC+6(O2>Yz=|PfNhUx0wU2&UJOnq z6&52Uowkt}EGVH);lh7vRQ<~62-`A&jrjD)-tr2Gs~_SPwE3wZnrrYljX5F77A4#v zBcC!@ls-z^Sj*QUO625}^HhO&w0(dkk0tDDvsiv^9VKO`BzjZmdpEye={4oDM_y!k z#&cGNVYXO`Lt#H>z+dS5y#8|X(PyAA`deEo)Qza#(g!?UbkwQCi1GM31;K&H5@4b0 z_YiDWqG$~lrReaIyTh0gUJUUe+5NaO*^Ap(DM`gndR#oz&X?a$z{^gwmG(0SZEG|N zVzWodWJ1h|-r1W-+@-G>uUow8?V|g^N&X6(X)Fb1EvrX4fE4VaTt2k`y*s8qugF-X zHdq&NBAIBgtH;x}z4b1Vs&I{&=%h?}B+@OJ)Bh`J{P1-nyzDY`I9VDvYRm|Gn%FpP z9gFST&(}WKOxPo2(rojqr`O9^Y!d3cyJ*r0Rkc`8*0@ntKm{h0=dmgBwB#(es?S(T zg$h~BBAnk8P;96YCEsUcfSOw0z_>GzUhAX(8r|5>{}bcxCaL*jRtxEL7r(N-W~#z* z{;>?k8k+DK^vI6T-pC}C<|Wm&WvEqm!F#^8CV^+~w6W=6tOXdHrbYE0`l)vUh;x_g z9TQpcJE2K}azMX1<1Ky9A(!9?1Fr5+VsKED3mm2Fmc z%;QUDHxrDFGbFtslc6PpAd>EGSUn*k{ny6Nn>=fpA|@kf-`ZA!4vrl^WSt*_36B=9 z+$e71Sx%c;jhmIgk{ARdk#Xh{I?WYuQa4*Wwt$`9YccYF-0Lzizu_bNJLx~^#T z-i0U~o$22(Y3qH!co65gSzsHuT4u=JDXVK}1A=p9?Tpjx^p1W~P!urBlhOEVKQ>3E zsjJP#X9QHVMsMNy44mz-r1U=$%}K9KpJ|O1P3kji1HEF^SoIx5_15^c9xH4OR|i-- z-k!#%-L!+S$C23|QD~Eblaekn#Ezl&EKjt_jDh@6f$SIb~KfDKh9Ck*STM zWzA#k7MNv}LEhCK2^T$Xyup^c=*vhB+A=3UE6ngQg+^{1(3i9_Tdt^2$1}{_ABQ{k zG8faJ6v*eMd6!1LQ2HaHW-`p>+czBe5JvtQ1~onu45nSY-cP4!q{q$r17Vi<5-{-~YwVIU-Oz3Z#&PC1`#q zDj`C!WyaKoY;FiD62h=FU;dd|W`AghR`P=gr{u>^N(IsZ;Li#Ae^2FcK&c16iq?%AN~(-{-s0;iB;0QM*W|dWj^m)g#VwO0{?RL zkLCXg(fd_X5M?O)UoqSs?nL)0XcmWL>M58Ie1fP*Z28}L%qwv@0-}uAzgEco|C>j=UQxIM?!i) zO~p4L8t-Q>Ukw=QP6g#rr_&Zbto^%yyuG%+=7F&Ot*y4d;YAMP;Zd`Vo=0pSI@6gn zEB#JvPdlS_)3_nd-QKSx(vz*u@imqJ!nNdR?Vw;ksY%94RQjhwi-%hplHV=H;SM%b zzgsBh$|Q%Fm~2E@F>U7muqhj+!Z&8S=i7%plaW3FtPK%E}^f5q|dFq*AOrLFFS*fDFAcFHL8 z=l+ben0W!SLg z^0}z(2^4vY&&m@BN2Vypg|E)X$L8ISo_duX%?9ZDB>*oDpQVh|!JF)o&7T%#Rk}vH zOVwJ*8?`&1gy!HtpjL(=d!?psEzoi8-64CrSkC3D6(qX6@*E{vVYT=UtL)rm>?q_@ zCj;l42$ueoN?V!jqoRW~y7;BXM5oM7bRhC?$x>kWeS2Kz(G`LDD@ zir|GGqe_M0o!C)G0t%G)%58E-<1JN&b$GJ{O8P!6<7Ds}bJFr^$Pq-6fk52Tltr9Q z{E){FIOR@cv;!*kd80viiA;GuY?J zd{(b9=B)+mDFmenG((mz zlpjfTtF&lf1()kQM%4LwM*!DDdbx#2Ms7UT)ONCOwW)u0y~b&q^jy0lldB`BrK4M$ zJ31i+3OQgn{nf(dlIJ$Hz~3C1Y(6Y7Q0&grcUav$+cSqSLu6mJ7^sxEc&Q>D zQv&)ns$(yWoT})zd=zsZ_3Q-lkzNVZUc)9P7GUI5l>~f256Rq527Lupb;o^3bc!jk zT?u1|X~*m0%>EgXiIkk@jGZH^IP(61NEk&zZ!a*T@RuQrBkVA9(nv;PV!->#?i@o` zpCkuSkHRfEb%X}`ZZ2d={881g{RNt^+ASvlZQMQbGskwrjQ?`c9BTzGV944HL5ic{ zYsy`Z)Fh;S^QA#_zg@gcUDwq&!}yc1Zv)IzR`i`7qE<>ga;D?v`#@c4F3a`M4o}Ol zpBjr`_25kK$oWq3<*7Gknf9=&I)OscZiXZBxEfD*o-hIB{btd+-be%?XLuHNjDDqh z-Oba`K#8DnI&gzV%}Nm-TYb^3$KRpq@o(guL36==0D-s7dv?j`+(r7Cy(x~&YpD;Ub{o%|3R zBltVstV-v|HG@E5$R@NnoF z_#o@^$Rskw)@Qx3&Af8u+j~py;{!k0Xi#OX=mWm<$~END``*k(6JG{g1V=0EFPH)L zClI|L;lNeJR$g+3Decc=4D_4co0l{8*Th@9ZRYrB7oK_Eox z_)sBU$X3?)K_MYXJdSucVT!-ssCXt}Y{*uwcnM+hf9`#}gD@7P9B+KEFdyU_fBb+j LC5*YyUqJs0Kf@Z< delta 10094 zcmb7q1yEhf(k>8Of(3VX2~KbgJGe`5cXwM@2plB9Cb&az-?)Sz!QI{6-C@7nbMODo zv-+#v>Y7@sr>DQJSu(4;r=j7n=b^CGONc<5g;+@eHVn+0IT)BfCm1g$S91NR z3rBZ$ZwLEhgA=!<-c)EH_nnyawFs4GumMck2eP)pEct+}p7y||=4M!soFqCNDNNn5 z_lGV0G0#j0vz6%_$gapEtuftZX8CswDT@-6C_YhirNg-u1_Z(a!BR5Dao$K!0;^do z0k?N;$B;4hz{{yJ48McF4jz(@GCm_#aSzECs=FN}K|CEF2$HYo!glDyI5S#IT4Q}2 zAJPsupw}_L^Ve+q^63@5GLsLTI8+<=EF>d~%{w=g)|DE}fetJ7gs(>!WxLHkTZ!8Y z-AM4fJZ4H$zhlgmX;Z#QIoF%K>Qk&a}grtlQKzdISQV*9pEiiU;P)vaB5dr$yT-)8=0k1vffw>U=4!FC$s zD?C`EW6ldhsPw`6uOQGkke=AH9z&}sU})Jvj}fxo9l~9+i|i&LxiiH8qm1>7mpiv+ ze+tW&hq+$rpwPWM%ygy*_XhQc85tKo?R4jyHvb(T(*0dz|0Y%hr8PNA`iYj9#lZ*OzMJS$MO$fUhe)|0wfQ&KVz6W)VPYd?8y<^u*B{&KrR!%e zNqUsaT5jyF=V|$yz87u~?V$|o%FMjqY~DF%u5pEJAG~|*pTXP2om~@c9Oh(>!ZRS( zR~ymHw?Mj9x+X}P1lsl|x?6cK=kY@4BZ()P3mf%wwcGa#p@vZUJ{kV!yLZt0`cG#E zgF)ukRd=7gGJ}5BI0_aZ7H%LVI1vSy4h%Sz!#lbE3|L)#sC#)9yA|_YUi~@ske&R* z(IMOfO9!i=jc zks-|BNo@7-RCML($zIUE#39m{=TjUE=KOKS-cg3z0mWE8OxvdS~>ipm2c}C`Drf0 zH`W4rs4cYtywf;Y&Al`JUiX;haEn4@FP)|jrE8Y;CkvNkEG?WsUG6+-jJ9)RAzc1k zUzyhaIF(-M*Q}hdQ4rT#y7SPv#7>2>U*d2*`qqiLa>aJM(;XTJmAsGGdR3tBKImNN zkhaR1yUbVgoq`-*?-2{)5UWZ_)5_imdEz-MR1Ne2>{7uLuHOlK4=)5z!pVGz;CPO? z2rqbuZ+S4k&V=HI&k(^-nfFE>Mh3W(nkb4-c&X`m*z-3K8Ix$Uyy~t8OTz z1VvzEUu+|^^nA~nx0o?(b#~mv*94^8e63fEDa04*7a2`+4VPZauhKJb+ec2d*Lvzd z(0mmM>Rz7>_O_TlNvWXarX$T z;aE$CeJ!V|g{OwXP2O)0nWOLK^qa|~X7L*Uw4q4Ir>js$sM9y@&6JNI4VnFzXmf5C zZ};-3$FAG$lEiTYUXr&k&)SQR}vXD(t?cx z1X`#bzGMz^%5t^IhXv+Mx-}}*sC`?YA~I2pg?sTyPE=vq-sqO>8IS}2P%B-&o&9=( z`SVoRcVcz%;Pv1IE9ZBNde|lXvKS5h;z>o4fBD(yB1aj2&FmlPptD zsh~X_#A>rH7$+SaiY6(OjKK*6)^6(%fJdYW|CHHXG=R_iCu8pBNcY?h=NpXx^K1?t z$-)qAk^J{%s3tsFm*=NGGIQ~xi5~WguN$&{R}y<0kkGHnXxA4+65XWcgT(4=a<*kj z4xdLC>Fg>CB`%#iu;1}uguS&ySvkvut^lrg>$fYXbGm&yKKHBWDufu!JKGmGz!Am} zUrc?C3!QI7me>s57r8jf?%1>`!YS8VXrq#EGj`#;=%qkP+ zF23OMs)Bk{;WC@_4(D=8RfNGUQ?9mBYT2wTYBn8f=pLr*{ePS%x}Xg=6M z>PV2Z6AT>U&PWrqYUcA1NEOBh;(K!Dd!#{FGd}k-tEZ6LJ?KKaS6M$Tf@XI}>DHI& zT_)~I10(*77LmCDls5V@IXo^}2ACi$nQ5DG_#%a8t`=k}3N(zG+8%LGKDQVoX2kXy zsAe_QPnMCVUTk!1XzUpKaRp;Sj^C`xew{KZ&r80k`>PBNSA7DVh+YCvEUXkyU{BCV zil5#vNSvuZBygLE`tHmeFXw^<3YaTL2vkUlRVj4$h*#HePdueH`AYElq#|>oT}*G; znjP3=H{;d9``*Nl&ZA2}$4=ThQqNBcn(PFhwF2{_UGm|W$tDWhO~#0Dco$YJEk~?d zX6cx>p4_nCD+xj98jL_KGgiuhg(lw6@6k}Fw~kI08`K8IVEtum7C3T64%Iwk_P}$O zz0vH}j`qwi@$MisR{?6+(ptmW=AGM7g3PaDx7o2SV!f0&Kg4Mh2^ABJeawnmRpERQ zWhJT0P|C-ct`KpGtaZ{>^^H2kU!FbpmZ~5*iR{P<(Q2~0aUXyYLibMJt6uFV*W=CY$jXbaL8!wT2sG33VBe@kObPV5roq z44CE+Bo5%@s-h8O-O!+}6MMbUX|$(}&?Dujn(Ob`@v*#en3ES`;nXF8vPHoZ5${oc zK|p@_}`iPGr5+VS$%xED>JDEgcGSk7HfMM5=zQ z&OxRrSf&p^iTG)hFJz>3*$a)|aMyhP&86v6+V~!&c#>rB2wua%xJttu%8n z3`e7tj(@iZ5k<=H*KtT z79&@{0JoIPJ3?CL`~pvfZv{(}pMyzv#nERo`e_(xM^#c+I&~i-)I@jqqA8_(KZ#l> zizyC%lZkA&f> z2`0(6E-$Zk&!`tyl$|you3^Cu5DYu>maxzu>Me@lF~D9x$fEC5FZ6GNn@D6fjHJ~C z*3Ib=Ny4?gi9Ug@F7d00;L;U{ED*Zr4J=cchveRw3bDo2eD5`(LdRw^274%EQBBz& zR_A`*XVUvxgKZ;g!YlJDe>b{MJZ@(mJnqp^H>VW-nn^)F;0DKH z{7mdc^rw%FBi*}_U+?BPq}|vI9OhX9r;4#3700d>&;Dvwm|jpr4Ct-pjEpB0Q!|#{ z)RYrAs~d*9Xu0d|%QS+PBo@bf*Y{W%;%UQ4k}<5a1}0x!q7h5_#5#VwJbm8dcvf%n zSTJe1OU@ zYb^19TtkAvJ9!JYk<&s9HpIJ|Yk`>`ZvxGdDItE)BQ@q*XJKCOdBMLt6A>p_*bwxM z;xXswU|;qu{y2@SsgI`-B4R2O$J4r^#UK6rhEvH$e~tP2{yoL7yPHFYr8x%|@49`iExJ`?3PAFt6)7Hy zpD-uPidq_2rzv+;!ZFNUT^xK2Bxd1zvzSiooezxrk;pHEx#O_R+ zo8l;W#zdd0Jj&?)R1R>3FslEoTYe;5^>vLf(+%)^y2~69OX6l+e|%-xAC(Nk!;jUk z6a6^u@6zE0c(>Wkqid#wy7-4Pn@>N#S*W(64;Qi*t%NGkV-iw_Ynu4)J=2nN_HAH| z6d|J#v#<)&l!a6(pRs7mum?H31RF=}F-7!_c=(qc!`rNA@ND=yp^3z

8qLL(`#^1Yj z&@}DEUQ|ow42Aj^m`BbJrbh^W*DKG1oTV zy3v$3E}`#9NwzvvRDfGLtr@0GN=e`y&78r+hn?*nQ^o14%@(jqE}#8Z+fa>TQmEvB}?tgY!vPJQ{BcttK@3BD@-QQUY~w9$Y3+Z40`N*I7nX?Ygry z8w1&%B^c|73vt^nppY#hL}WmXPu8*%5e6m=_kT(AxLLTn+c;Xe{VUB=r=#n(#D^7l zrT`6<9n+K!NiHav+(;Fu&*ZD!id>__sl^J0M}l!+$$Y(I_m*=FaX(ggG7Ww@VZZG% z-7o_DSQqxQkU>86q)S!h7ZDnQ9M&F3XGvVVSEe~1$w55vnCB~=#0i6P;8QkPhU#33Pp3Ee^#(3^_dCx@#G3Zt_*V= z_k1o;cOS{FTWtEoc!x$-Zs{U7=&|1L5 z_lM2n%1yW`qLeol0wJG>>t_!-;;>$(*ayty=Um3oB1Y}@KNtyce8h}Oiy)09uVWn| zR^}BSL}g5ZV^4^AwopF|?+n>1sZSwpGI+k)Vk+vnK& zO@K$UGOdB;MM)Y#fi2Fd=9gf~w0!S+#=5;qj!;QZXdv|p)3IK;Aqb0>h+u9nb1G$n znSo{ew_Kg}cwd@FV@vLrMbD(8xC~r>WojVfj5bsa^#)@+1fvxvrJ>S2EJ-M!d?QQ8 z;XpQk617DSZDZ4oW=620|Fh&-!(n;LWV6^`E6Dmr@gF^;W*R&;kqzV%OiLs|E_f&* zUKGT#Ej@e*<_ChSSG!D5T}^S_u*=$DSFCl@>@;v(d5a$!oX$pqJGSt$3_)8^6asLK z_V_%NhtOi*Qd9%=rFnbDssU&7rdrKU);+g!p8!Yew@?HQLW}_-up9z#2Wj~3-8t)5 z-SQ3~hqHDDyh80~Eosf_e&#q=ODCs5?YJ4gk{E|q?ugs$wnni09%_8@MH7W0VP|G# z6@~0k)Wr4e*f4!>n{2WlKIc(EfQL?2bWeHT)#Ss zao--GEd?@H-6ikzt;o2_@&oM2FQW`kof%rB_!K$n7)v@@oA)mG9ukxL*fqNnq+>C1 z@65AQ5d{sg3S?;;+IaY=Vo#b)ETwn*)9*wsSZHf3ZPwtjsVgnMQgKn6!~soN*r2$x zn=hAm35YdLbt8}pYd&ro!($?|^(9Aqcv*N~F)rJyc1ri?nyis$WIB3t$0x`#|+HKdLq%tiQ=bI zQ?IUG{!-oz+$FJNh&(ZN90v3c=WCqGd!|t~`&qfsLgooGc_5^7tY9i3-d%=tDj}Y% za{Jilah;2W(BDu zd^E-kvpK%gcC21)=@R3~+r$*XZE5}6nKV}DFRaF2calhS;h)fVOE6F7XmN{j`J+Cg z6_UX>N;i)?O^WqYPfqm~AJdxZS0en*M|-i&w2iHwm#HH@=M8qr%AhW@6bS-@kos}B zlR5*0U>tl0Wh5*z;}n5bO9Gu`vYT7dF1ar@k1G<%J=J@DnYJ2m zGZEBip;#p@lgwdJ&A?-`W7-Yz(?PI_JhR2*!zqc z!1uLLz-Z4WOzdsAIS>A*^0VWelmn)@SyR-XsH~nReUEQ%2yKD)(MtSnJq6hI98)$X(n<08)n`<8OVe zG)L1y#DjkoP>(Ucm>w3oH~;1ZweaJ-qdh}@$p^)r5^&y0WuTSz(&$d*^?ZAj`MS7y z)~qYEEw(X}Vp$1f+m5@a)qVE)%8hnu^P zy~V%(eHkOJOD%YPcbNx5&UIe258Su$%qccQ5K`@J7Y`L}Rk;8)bk5 zM~-ekO_E5o@0}OLt>Ilr8>Ox^PS%9#S?X^4+1m3Z!5Z7><)&b+4<)Q_U{ZL#q5eAv zBv1^~EG^*~FMC2EP;iHu?#nYH`6Cndx2pxi{wX4+`7pY2@6$6(#J+Y^8hu9p4;EDI z>l?y9baS_!Lg*9vA;OlBwn8?2Yczm8FLj-2#LZ{YM(t9qtCr5v8(EwQ4Poq|&YMoT z&^BIn;Cw^8LmrH`j*K*q6top5xRlG_|hmJ$GB_vbfbNsyDI3P`RKw@`fY~c#r| zKHKNh_Ps%dY65|io2+cRli16v5%fNP5x-;Pa<{#k)bX^8hK|-RZVjLsDEVbj<-h+dzn$Pw(W=d5*XhSTSmdJFSpF-qdK_?bjO%=847NE~#`noB7z8p&C zg6Y*GvWR`>{c#yg=3;af;kWpnpZ3wMZ(2x;cG~BR8T@Cli9?dGbji6iHv?yQZ#@)< z^BU_TXNd@$y^3ZIEPUM=g-!P2pX(&cM(`&teo6OBuSnP`Ng}$1hD)_=$#hPUk^fLA z>dZ`|Bm1gA!rEl%13*TXc(10~b9{ml99%F>FoZn|Mtaun>9G4^68Cx0jgMHF= z46aSuJR?JX!8FR!nwveV&Tn6fnz!-*Pm_>uXa(D1TwUe)a(!bnWzvfDvnx;7#9j?;T7Q9!cW)2a0tcyz1)|%QPLecf1$Tz#^^^1ry zCOz^~;c)2-jfwZj?7(k$2&y-wxCT(kR)`=2! zjSlM*UL|dAVKj^qcKO5jpAeQfG~@d$;`m7Pm~8>#0yZRKLkXi?_ezVh6I@Lf)ediL zh!%L@mH)75njwuQa*#soja?$YwsfE43qpbgCPJYFrqQ3ZG>hoBsevZ8)N3Ha;h3da zA%S0*ZiYIA*%eLNmzOLr|=W95f=tNoF94)!}|b zcxwOj2FQD%<#&1i(QNys3Q+z2qxuh|^-<|g<=%P7Q0id;tKbAQ?#T&o)e@K1*?&UrOwWQ!!lJSr4vjI&PPX(>(z z3za&4&-`KM%P=c6N)fuFzF>!C;M62BPivyTcG&Q2?c{p%hM;)OS}YSOdB^ND{UAwb zva-lE9V_Yk*!ynabIRAs`1PzolchL*8i{zXdA`XJIp-Ol`J{jmIZh1n20DY2p~rXv zL9*cW1|BnbOtuY&g+=7A2FpqLG2-*x4yg;sVPwlm-(r5{i_`5TPkfAhac}eY#lu<* z&zBIW!Cefen=V!A8z-#HTR^Ei{L{D=|KtTK2-~VX-{}D+LW9b-*4*XOud?;H)oM~9 z$doBnk@X{%vf@R^QHU1F}&rt&Vj|fqdOV3vB*Cz~=KO_Fe1O5$I%vW+_ zkjPu2ib}H46vat{#ZN^N+_Y^E@2ep%TW3{ojwM`1SFBkfSgFS)1Hsjw`O_@wa8-Qu z-g}#zFxGW>CT34J*_ME8f&9fk;4U)>nzs7&)6Be;dbZz*wb>Sa^lHj0s%@42pf7m= zLo(Ot{w)Et+3G*VlqDViTjVmM2L2o8zvlEGj9U3WW6}!#!T4_t{0C*=e_H?Bgrhm~ z(g1K3txo;d`lXMoOc$3yx;x+>CZEuUu<#qOUbPC@6@HM+H=ZMNZ?{;xCa^m~D9u0k z0or-}a{Q#~WcezkslonMi%jy&n+_yh^-z?Cr!hpTCI50TtK9*6bO&)g`Hc{DFZr_6 zybdB$!+2c_y9r0(*es3I)Y%%0dCU&^*q&&iuV4C`NOS6N25*F8O&eI6zVpTF>+R>{ zh#oo9=^6ACQOkWaY%F(`e)VY1#bJi}RxWBfPKhCqL=ctQqO;^86V|e)Xqy45omGF!HQwB*yk}2=@gdo^`#`nI1Zp<*L)Z?Mu^GL;Eo$v=k312XBWo&+(_`%17GUsY&_*VviL%7&nEsE$Tc; zt8z6rviu~fO5#^drQyes=rH$Yg_4XD^Pyb?BNA-GnxTnJJOkhxU6nCCL{plh5e-^z z^~kXm_w2nGS7Vu4?l?8)eRXIV1NZAl)5>wWbWjasV+rpz=g&2INEU2c;Dj~;c6hq zHg@p>@eXOXIFxUH;pw>22q1wL3oG{F2GTE}SJzg@=5>SIPAI*ll0}T@$d}?#lFTB? z6EE(^m~mEQa|u>o!rxVN=3xto$xDM|Ox9=L(GeE?^5q46W*&UUmchc*tHlaX?(r3q zwcuNQ8E7t(=kB8;81sKCK)nsOx8AfJyM?%)Oor_cujbx=`P-aL92K2tJ16tE3D#!& zT=2ljK)9Bm^X_1UynxM0WTu~mrd4?^s4YaOnz+{9Ie@5bJ2m{x$~>)l5fxBR?aI8x>yhqYQj9P9iK< z^;Vug|0MD2>dcLMw2pM%JSHfhkSg~@ly18O4ew7UckrIhVvinJ!A!1aQer5AnW zJSO<(rvDQ*tfvvn`22Ysqi`@VSTM-2f2yKXAkIQmu)wsN)_zQUw>9hh=mgl zT3>^G=>8gn9xJ5DWhwP0)~YZ3#Lww3esoo#R;E2jDeL&BqB;lu9kT$BTK1@vFwHK3 zsPxOAn&rza8gJxLGdW^22^>DhL3TP|R40+_mU^_0NtpJHSiF@`-nFfC9d3h7(kFe*mDG|Q{ zk>{IN(d1q2%jM4KL?0Ioc3FSQ27d#TQK_xDcsNdM1Z&QaF}f+e~Ehx$+D8u&?E87_wq ztRNu=H%kmol3*bHKl7b`p#F2jQ-T*HXh=(b{O=**e~DpWf*HVsl0q14T>mMC^RoC; z@Ul&RH0&Aw`Ec JFZwUs{{fr5Z#Dn` diff --git a/pom.xml b/pom.xml index 71853a32..012302b6 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,7 @@ 1.5.5.Final UTF-8 1.1.2 + 3.4.1 From a93e59e5c6c487a3ce93eee78b21654de9ca5aee Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 17:30:37 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/RepairOrderInfoController.java | 18 ++++++++++++++++++ .../impl/DlRepairTicketsServiceImpl.java | 12 +++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java index 35e01ace..9e2cbbf4 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java @@ -19,6 +19,11 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 维修模块 订单") @@ -95,4 +100,17 @@ public class RepairOrderInfoController { public CommonResult census() { return success(repairOrderInfoService.census()); } + + /** + * PC支付按钮 + * + * @author 小李 + * @date 17:26 2024/10/30 + * @param id id + **/ + @GetMapping("/toPay") + @Operation(summary = "PC支付按钮") + public CommonResult toPay(@RequestParam("id")String id) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeyException { + return success(repairOrderInfoService.payTransactions(id)); + } } \ No newline at end of file diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 7e45efd5..e3c48da2 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -697,6 +697,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl().eq(RepairOrderInfo::getGoodsId, tickets.getId())); if (ObjectUtil.isNotEmpty(orderInfo)) { // 付款情况 @@ -742,9 +743,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl stringObjectMap = repairOrderInfoService.payTransactions(orderInfo.getId()); + payUrl = (String) stringObjectMap.get("prepay_id"); + }catch (Exception e){ + e.printStackTrace(); + throw exception0(500, "系统异常"); + } // 生成收款二维码 int width = 100, height = 100; - byte[] texts = CreateQRCodeUtil.GenerateQRCode("hello world", width, height); + byte[] texts = CreateQRCodeUtil.GenerateQRCode(payUrl, width, height); if (ObjectUtil.isNotEmpty(texts)){ params.put("qrCode", new PictureRenderData(width, height, PictureType.PNG, texts)); } From 85c0f41442f636f08cc67a55a7f669739a6310f5 Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 17:41:42 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/tickets/service/impl/DlRepairTicketsServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index e3c48da2..58d652f0 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -743,7 +743,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl stringObjectMap = repairOrderInfoService.payTransactions(orderInfo.getId()); From c1cf26a98c48bb606ac6180123938ccc8dcc94fa Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 17:48:27 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DlRepairTicketsServiceImpl.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 58d652f0..31d23f15 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -748,15 +748,15 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl stringObjectMap = repairOrderInfoService.payTransactions(orderInfo.getId()); payUrl = (String) stringObjectMap.get("prepay_id"); + // 这个地方可能报错,报错就不生成二维码了,保证工单是能出来的 + // 生成收款二维码 + int width = 100, height = 100; + byte[] texts = CreateQRCodeUtil.GenerateQRCode(payUrl, width, height); + if (ObjectUtil.isNotEmpty(texts)){ + params.put("qrCode", new PictureRenderData(width, height, PictureType.PNG, texts)); + } }catch (Exception e){ e.printStackTrace(); - throw exception0(500, "系统异常"); - } - // 生成收款二维码 - int width = 100, height = 100; - byte[] texts = CreateQRCodeUtil.GenerateQRCode(payUrl, width, height); - if (ObjectUtil.isNotEmpty(texts)){ - params.put("qrCode", new PictureRenderData(width, height, PictureType.PNG, texts)); } Configure config = configureBuilder.build(); From 6583cb87edd598bdd93864d52accc7ee9e1e3d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com> Date: Wed, 30 Oct 2024 18:06:35 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=B6=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DlInspectionProjectServiceImpl.java | 6 ++++++ .../mapper/inspection/DlInspectionProjectMapper.xml | 1 + 2 files changed, 7 insertions(+) diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/DlInspectionProjectServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/DlInspectionProjectServiceImpl.java index 9e460e00..51919d1c 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/DlInspectionProjectServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/DlInspectionProjectServiceImpl.java @@ -31,6 +31,12 @@ public class DlInspectionProjectServiceImpl extends ServiceImpl() + .eq(DlInspectionProject::getProjectName, createReqVO.getProjectName())); + if (ObjectUtil.isNotNull(dlInspectionProject1)) { + throw new RuntimeException("检测项目已存在"); + } // 插入 DlInspectionProject dlInspectionProject = BeanUtils.toBean(createReqVO, DlInspectionProject.class); dlInspectionProject.setDeleted(false); diff --git a/dl-module-inspection/src/main/resources/mapper/inspection/DlInspectionProjectMapper.xml b/dl-module-inspection/src/main/resources/mapper/inspection/DlInspectionProjectMapper.xml index 93c01800..5e3a7fc3 100644 --- a/dl-module-inspection/src/main/resources/mapper/inspection/DlInspectionProjectMapper.xml +++ b/dl-module-inspection/src/main/resources/mapper/inspection/DlInspectionProjectMapper.xml @@ -23,5 +23,6 @@ AND role_id = #{entity.roleId} + ORDER BY create_time DESC \ No newline at end of file From fd3b9c0aecbcd97fadb927bef012e9ddc239490b Mon Sep 17 00:00:00 2001 From: xiaofajia <1665375861@qq.com> Date: Wed, 30 Oct 2024 18:07:27 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=B7=A5=E5=8D=95=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/RepairOrderInfoController.java | 2 +- .../service/impl/DlRepairTicketsServiceImpl.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java index 9e2cbbf4..dde61feb 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java @@ -111,6 +111,6 @@ public class RepairOrderInfoController { @GetMapping("/toPay") @Operation(summary = "PC支付按钮") public CommonResult toPay(@RequestParam("id")String id) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeyException { - return success(repairOrderInfoService.payTransactions(id)); + return success(repairOrderInfoService.payTransactionsCode(id)); } } \ No newline at end of file diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 31d23f15..5ba05b08 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -743,11 +743,11 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl stringObjectMap = repairOrderInfoService.payTransactions(orderInfo.getId()); - payUrl = (String) stringObjectMap.get("prepay_id"); + Map stringObjectMap = repairOrderInfoService.payTransactionsCode(orderInfo.getId()); + payUrl = (String) stringObjectMap.get("code_url"); // 这个地方可能报错,报错就不生成二维码了,保证工单是能出来的 // 生成收款二维码 int width = 100, height = 100; @@ -1357,6 +1357,16 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl().eq(RepairOrderInfo::getGoodsId, ticketId)); + RepairOrderInfo newOrderInfo = new RepairOrderInfo(); + newOrderInfo.setId(orderInfo.getId()); + // 更新商品原价和实付金额 + newOrderInfo.setGoodsPrice(tickets.getTotalPrice()); + newOrderInfo.setPayMoney(tickets.getTotalPrice()); + repairOrderInfoService.updateById(newOrderInfo); + return baseMapper.updateById(tickets) > 0; }