|
|
@@ -0,0 +1,234 @@
|
|
|
+package cn.start.tz.module.pressure2.service.dynamicOFData.boiler;
|
|
|
+
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boileracceptorderitem.BoilerAcceptOrderItemDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderitem.BoilerAcceptOrderItemMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderuser.BoilerAcceptOrderUserMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
|
|
|
+import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
|
|
|
+import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
|
|
|
+import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
|
|
|
+import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
|
|
|
+import cn.start.tz.module.system.api.dict.DictDataApi;
|
|
|
+import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
|
|
|
+import cn.start.tz.module.system.api.user.AdminUserApi;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 锅炉受理单
|
|
|
+ */
|
|
|
+@Service("QR0405_202402ReportOFData")
|
|
|
+public class QR0405_202402ReportOFData implements IDynamicOFData {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EquipBoilerMapper equipBoilerMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private AcceptOrderMapper acceptOrderMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OrderReportService orderReportService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BoilerAcceptOrderItemMapper acceptOrderItemMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BoilerAcceptOrderUserMapper boilerAcceptOrderUserMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BoilerTaskOrderItemMapper boilerTaskOrderItemMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DictDataApi dictDataApi;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BoilerTaskOrderSignFileService boilerTaskOrderSignFileService;
|
|
|
+ @Resource
|
|
|
+ private BoilerTaskOrderService boilerTaskOrderService;
|
|
|
+ @Override
|
|
|
+ public JSONObject getOFData(JSONObject params) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public JSONObject getOfDataByVO(CreateInstantiateWithRuleVO ruleVO) {
|
|
|
+
|
|
|
+ //日期格式
|
|
|
+ DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
|
|
|
+
|
|
|
+ //受理单ID
|
|
|
+ String refId = ruleVO.getRefId();
|
|
|
+
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ AcceptOrderDO acceptOrderDO = acceptOrderMapper.selectById(refId);
|
|
|
+ if (acceptOrderDO == null) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ result.put("reportNo", acceptOrderDO.getAcceptNo());
|
|
|
+ result.put("unitName", acceptOrderDO.getUnitName());
|
|
|
+ result.put("unitAddress", acceptOrderDO.getUnitAddress());
|
|
|
+ result.put("unitCode", acceptOrderDO.getUnitCode());
|
|
|
+ result.put("zipCode", acceptOrderDO.getZipCode());
|
|
|
+ result.put("contact", acceptOrderDO.getUnitContact());
|
|
|
+ // 检验员签名
|
|
|
+ String orderReportDOId = ruleVO.getParams().getString("orderReportDOId");
|
|
|
+ if (orderReportDOId != null){
|
|
|
+ OrderReportDO orderReportDO = orderReportService.getById(orderReportDOId);
|
|
|
+ result.put("confirmPerson", orderReportDO.getSignUrl());
|
|
|
+ result.put("confirmPersonDate", orderReportDO.getSignDate());
|
|
|
+ }
|
|
|
+ // 填充客户签名
|
|
|
+ BoilerTaskOrderDO taskOrderDO = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
|
|
|
+ if (taskOrderDO != null){
|
|
|
+ BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
|
|
|
+ if (boilerTaskOrderSignFileDO != null){
|
|
|
+ result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
|
|
|
+ result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result.put("SLCK", "");
|
|
|
+ result.put("contactPhone", acceptOrderDO.getUnitPhone());
|
|
|
+ result.put("checkDate", acceptOrderDO.getAppointmentDate().format(dateFormat));
|
|
|
+ if (acceptOrderDO.getFeeNature() != null) {
|
|
|
+ if (acceptOrderDO.getFeeNature() == 200) {
|
|
|
+ result.put("BSMZFC", "true");
|
|
|
+ } else if (acceptOrderDO.getFeeNature() == 300) {
|
|
|
+ result.put("SMZFC", "true");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BoilerAcceptOrderItemDO> boilerAcceptOrderItemDOS = acceptOrderItemMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<BoilerAcceptOrderItemDO>()
|
|
|
+ .eq(BoilerAcceptOrderItemDO::getOrderId, refId)
|
|
|
+ );
|
|
|
+ List<EquipBoilerDO> equipBoilerDOS = equipBoilerMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<EquipBoilerDO>()
|
|
|
+ .in(EquipBoilerDO::getId, boilerAcceptOrderItemDOS.stream().map(BoilerAcceptOrderItemDO::getEquipId).toList())
|
|
|
+ );
|
|
|
+
|
|
|
+ result.put("equipNums", String.valueOf(equipBoilerDOS.size()));
|
|
|
+
|
|
|
+ AtomicReference<Boolean> isDZGL = new AtomicReference<>(false);
|
|
|
+ JSONArray voList = new JSONArray();
|
|
|
+ AtomicInteger number = new AtomicInteger(1);
|
|
|
+ equipBoilerDOS.forEach(equipBoilerDO -> {
|
|
|
+
|
|
|
+ if (equipBoilerDO.getType().equals("1")){
|
|
|
+ isDZGL.set(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject vo = new JSONObject();
|
|
|
+ //序号
|
|
|
+ vo.put("value1",String.valueOf(number.getAndIncrement()));
|
|
|
+ DictDataRespDTO boilerTypeDTO = dictDataApi.getDictData("system_equip_boiler_type",equipBoilerDO.getType().toString()).getData();
|
|
|
+ if (boilerTypeDTO != null){
|
|
|
+ vo.put("value2",boilerTypeDTO.getLabel());
|
|
|
+ }
|
|
|
+ vo.put("value3",equipBoilerDO.getFactoryCode());
|
|
|
+ vo.put("value4",equipBoilerDO.getUseRegisterNo());
|
|
|
+ vo.put("value5",equipBoilerDO.getEquipCode());
|
|
|
+ vo.put("value6","-");
|
|
|
+ if (taskOrderDO != null){
|
|
|
+ BoilerTaskOrderItemDO taskOrderItemDO = boilerTaskOrderItemMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<BoilerTaskOrderItemDO>()
|
|
|
+ .eq(BoilerTaskOrderItemDO::getEquipId, equipBoilerDO.getId())
|
|
|
+ .eq(BoilerTaskOrderItemDO::getOrderId, taskOrderDO.getId())
|
|
|
+ );
|
|
|
+ if (taskOrderItemDO != null){
|
|
|
+ vo.put("value7",taskOrderItemDO.getFee());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.put("value8","-");
|
|
|
+ voList.add(vo);
|
|
|
+
|
|
|
+ });
|
|
|
+ result.put("table",voList.toJSONString());
|
|
|
+
|
|
|
+ if (isDZGL.get()){
|
|
|
+ result.put("DZGL", "true");
|
|
|
+ }else{
|
|
|
+ result.put("GYGL", "true");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (acceptOrderDO.getCheckType() == 100){
|
|
|
+ result.put("inCheck", "true");
|
|
|
+ }else if (acceptOrderDO.getCheckType() == 200){
|
|
|
+ result.put("outCheck", "true");
|
|
|
+ }else if (acceptOrderDO.getCheckType() == 300){
|
|
|
+ result.put("pressureCheck", "true");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (taskOrderDO != null){
|
|
|
+
|
|
|
+ result.put("recipient", taskOrderDO.getRecipient());
|
|
|
+ result.put("recipientPhone", taskOrderDO.getRecipientPhone());
|
|
|
+ result.put("recipientEmail", taskOrderDO.getRecipientEmail());
|
|
|
+
|
|
|
+ result.put("totalAmount", taskOrderDO.getShouldAmount().setScale(2, java.math.RoundingMode.HALF_UP));
|
|
|
+ // 将金额转换为中文数字并按位存储
|
|
|
+ if (taskOrderDO.getShouldAmount() != null) {
|
|
|
+ convertAmountToChineseDigits(taskOrderDO.getShouldAmount(), result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将金额转换为中文数字并按位存储到result中
|
|
|
+ * money1: 百万位, money2: 十万位, money3: 万位, money4: 千位, money5: 百位, money6: 十位, money7: 个位
|
|
|
+ * @param amount 金额
|
|
|
+ * @param result 结果对象
|
|
|
+ */
|
|
|
+ private void convertAmountToChineseDigits(BigDecimal amount, JSONObject result) {
|
|
|
+ // 中文数字数组
|
|
|
+ String[] chineseDigits = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
|
|
|
+
|
|
|
+ // 获取整数部分
|
|
|
+ long integerPart = amount.longValue();
|
|
|
+
|
|
|
+ // 确保不超过百万(9999999)
|
|
|
+ if (integerPart > 9999999) {
|
|
|
+ integerPart = 9999999;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取每一位数字
|
|
|
+ int million = (int)(integerPart / 1000000) % 10; // 百万位
|
|
|
+ int hundredThousand = (int)(integerPart / 100000) % 10; // 十万位
|
|
|
+ int tenThousand = (int)(integerPart / 10000) % 10; // 万位
|
|
|
+ int thousand = (int)(integerPart / 1000) % 10; // 千位
|
|
|
+ int hundred = (int)(integerPart / 100) % 10; // 百位
|
|
|
+ int ten = (int)(integerPart / 10) % 10; // 十位
|
|
|
+ int one = (int)(integerPart % 10); // 个位
|
|
|
+
|
|
|
+ // 存入result
|
|
|
+ result.put("money1", chineseDigits[million]); // 百万位
|
|
|
+ result.put("money2", chineseDigits[hundredThousand]); // 十万位
|
|
|
+ result.put("money3", chineseDigits[tenThousand]); // 万位
|
|
|
+ result.put("money4", chineseDigits[thousand]); // 千位
|
|
|
+ result.put("money5", chineseDigits[hundred]); // 百位
|
|
|
+ result.put("money6", chineseDigits[ten]); // 十位
|
|
|
+ result.put("money7", chineseDigits[one]); // 个位
|
|
|
+ }
|
|
|
+}
|