package com.deloitte.system.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.common.core.constant.GlobalConst; import com.common.core.enums.ResultCodeEnum; import com.common.core.exception.BizException; import com.common.core.service.CryptoService; import com.common.core.utils.BeanHelper; import com.common.core.utils.DesensitiveUtils; import com.common.core.utils.IdUtils; import com.common.redis.util.RedisUtil; import com.deloitte.system.model.CacheList; import com.deloitte.system.model.Opportunity; import com.deloitte.system.model.Order; import com.deloitte.system.request.OpportunityDto; import com.deloitte.system.request.OrderDto; import com.jfinal.plugin.activerecord.Db; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import static com.common.core.constant.GlobalConst.PIPL_UNCONFIRM_INSERT; import static com.common.core.constant.GlobalConst.PIPL_UNCONFIRM_UPDATE; @Service public class OrderService { private String tableName = "order"; @Autowired private CryptoService cryptoService; @Autowired private IdUtils idWorker; @Autowired private RedisUtil redisUtil; public OrderDto queryForOne(String dataId) { Order order = Order.dao.findById(dataId); if (!ObjectUtil.isEmpty(order)) { return BeanHelper.copyAs(order,OrderDto.class); } return null; } public List insertList(List orderList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); orderList.forEach(e -> { String dataId = idWorker.nextId(); OrderDto cacheItem = BeanHelper.copyAs(e, OrderDto.class); cacheItem.setDataId(dataId); dtoItemList.add(cacheItem); OrderDto target = BeanHelper.copyAs(e, OrderDto.class); target.setDataId(dataId); OrderDto dto = cryptoService.encryptModelColumns(e); dto.setDataId(dataId); cryptoService.convertor(dto,target); DesensitiveUtils.format(target); respList.add(target); }); dtoCacheList.setData(dtoItemList); String insertJsonString = JSONArray.toJSONString(dtoCacheList); String insertKey = PIPL_UNCONFIRM_INSERT + txId; boolean redisFlag = redisUtil.set(insertKey, insertJsonString, GlobalConst.DATA_EXPIRE); if (!redisFlag) { throw new BizException("缓存写入失败"); } return respList; } public List updateList(List orderList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); orderList.forEach(e -> { Order order = Order.dao.findById(e.getDataId()); OrderDto cacheItem = BeanHelper.copyAs(e, OrderDto.class); dtoItemList.add(cacheItem); OrderDto dto = BeanHelper.copyAs(BeanHelper.copy(cacheItem,order),OrderDto.class); OrderDto target = BeanHelper.copyAs(dto, OrderDto.class); dto = cryptoService.encryptModelColumns(dto); target.setSpecialDeliveryPhoneEncrypt(dto.getSpecialDeliveryPhone()); target.setSpecialDeliveryPhoneDEncrypt(dto.getSpecialDeliveryPhoneD()); target.setShippingRecieverEmailAdrEncrypt(dto.getShippingRecieverEmailAdr()); target.setShipToContactIdEncrypt(dto.getShipToContactId()); target.setCustomerAuthorizedByIdEncrypt(dto.getCustomerAuthorizedById()); target.setBillToContactIdEncrypt(dto.getBillToContactId()); target.setSpecialDeliveryContact2Encrypt(dto.getSpecialDeliveryContact2()); target.setSpecialDeliveryContactTextEncrypt(dto.getSpecialDeliveryContact()); target.setShippingAddressTextEncrypt(dto.getShippingAddressText()); target.setSpecialDeliveryContact2DEncrypt(dto.getSpecialDeliveryContact2D()); target.setEndUserEncrypt(dto.getEndUser()); target.setEndUserDEncrypt(dto.getEndUserD()); target.setSpecialDeliveryContactEncrypt(dto.getSpecialDeliveryContact()); target.setSpecialDeliveryContactDEncrypt(dto.getSpecialDeliveryContactD()); target.setPdfNNotifyPartyEncrypt(dto.getPdfNNotifyParty()); target.setPdfNFaxEncrypt(dto.getPdfNFax()); target.setPdfNContactEncrypt(dto.getPdfNContact()); target.setPdfSTelEncrypt(dto.getPdfSTel()); target.setPdfSPhoneEncrypt(dto.getPdfSPhone()); target.setPdfSNameEncrypt(dto.getPdfSName()); target.setPdfSFaxEncrypt(dto.getPdfSFax()); target.setPdfFTelEncrypt(dto.getPdfFTel()); target.setPdfFFaxEncrypt(dto.getPdfFFax()); target.setPdfFContactPersonEncrypt(dto.getPdfFContactPerson()); target.setPdfSAddsEncrypt(dto.getPdfSAdds()); target.setPdfSAddressEncrypt(dto.getPdfSAddress()); target.setPdfSellerEncrypt(dto.getPdfSeller()); target.setPdfCTheconsigneEncrypt(dto.getPdfCTheconsigne()); target.setPdfCTelEncrypt(dto.getPdfCTel()); target.setPdfCFaxEncrypt(dto.getPdfCFax()); target.setPdfCConsigneeEncrypt(dto.getPdfCConsignee()); target.setPdfCContactEncrypt(dto.getPdfCContact()); target.setPdfCAddrEncrypt(dto.getPdfCAddr()); target.setSpecialDeliveryAddressEncrypt(dto.getSpecialDeliveryAddress()); target.setSpecialDeliveryAddressDEncrypt(dto.getSpecialDeliveryAddressD()); target.setDealerSalesStaffNameAEncrypt(dto.getDealerSalesStaffNameA()); target.setPdfSignTitleEncrypt(dto.getPdfSignTitle()); target.setPdfSignNameEncrypt(dto.getPdfSignName()); target.setPdfSignaturePlacesEncrypt(dto.getPdfSignaturePlaces()); target.setPdfByTelEncrypt(dto.getPdfByTel()); target.setPdfByAddEncrypt(dto.getPdfByAdd()); DesensitiveUtils.format(target); respList.add(target); }); dtoCacheList.setData(dtoItemList); String updateJsonString = JSONArray.toJSONString(dtoCacheList); String updateKey = PIPL_UNCONFIRM_UPDATE + txId; boolean redisFlag = redisUtil.set(updateKey, updateJsonString,GlobalConst.DATA_EXPIRE); if (!redisFlag) { throw new BizException("缓存写入失败"); } return respList; } public Boolean deleteOne(String dataId) { Order order = Order.dao.findById(dataId); order.setIsDelete(1); return order.saveOrUpdate(); } public Boolean undeleteOne(String dataId) { Order order = Order.dao.findById(dataId); order.setIsDelete(0); return order.saveOrUpdate(); } public List search(List idList){ if (CollUtil.isEmpty(idList)) { return null; } StringBuilder queryParam = new StringBuilder(); queryParam.append("and id in ").append(idList.stream().collect(Collectors.joining(", ", "(", ")"))); List quotesList = Order.dao.findList(queryParam.toString()); return quotesList.stream() .map(quotes -> BeanHelper.copyAs(quotes, OrderDto.class)).collect(Collectors.toList()); } public List decryptUpdate(List orderList) { List respList =new ArrayList<>(); String[] decryptColumn =new String[]{"expected_delivery_date","sales_account_code","special_delivery_address","dealer_service_d","dealer_service","dealer_sales_staff_name_d","dealer_sales_staff_name"}; Db.tx(() -> { for (OrderDto e : orderList) { Order order =Order.dao.findById(e.getDataId()); if (order == null) { throw new BizException("无效的DataId"); } Order item=new Order(); BeanHelper.copyEncrypt(e, item); cryptoService.decryptoColumnModel(item,decryptColumn); BeanHelper.copyEncrypt(item, order); order.setSfRecordId(e.getSfRecordId()); if (!order.saveOrUpdate()) { throw new BizException(ResultCodeEnum.RT_ERROR); } respList.add(e); } return true; }); return respList; } public List decryptInsert(List orderList) { List respList =new ArrayList<>(); Db.tx(() -> { for (OrderDto e : orderList) { Order order = new Order(); String dataId =idWorker.nextId(); BeanHelper.copyEncrypt(e, order); cryptoService.decryptoModel(order); order.setSfRecordId(e.getSfRecordId()); order.setDataId(Long.valueOf(dataId)); if(!order.save()) { throw new BizException(ResultCodeEnum.RT_ERROR); } e.setDataId(dataId); respList.add(e); } return true; }); return respList; } }